1

Web サイトに登録フォームがあり、登録は $_POST 値を引数として受け入れる関数を呼び出します。通常のチェックを行っている間にエラーが見つかった場合は、エラーを設定するエラー メッセージ クラスの関数を使用し、errorcounter 変数もインクリメントします。この関数は、フィールドとエラー メッセージ (配列に格納) の 2 つの引数を受け取ります。

    $errmsg->setError("firstname", "You must enter your name");

setError() はエラーを設定します。

    function setError($field, $errMsg){
        $this->errors[$field] = $errMsg;
    }

登録機能は、エラー カウンターが増加したかどうかを確認し、増加していない場合はアカウントを登録し、増加している場合は登録ページにリダイレクトします。

登録ページは、errmsg クラスの関数を使用してエラーを表示します。

    $errmsg->showError("firstname");
    // Argument being the field name.

この関数は、設定されているエラー メッセージを表示する必要があります。

    function showError($field) {
        if (isset($this->errors[$field])) {
            return $this->errors[$field];
        } else {
            return "";
        }
    }

したがって、配列にインデックスが定義されているかどうかを確認でき、値を表示する必要があります。そうでない場合は何も表示しません。

私が抱えている問題は、エラーが発生しても何も表示されないことです。

$errmsg->errors['firstname']; をエコーアウトしてみました。エラー カウンターが > 0 の場合はレジスタ関数で、正しいメッセージが表示されます。したがって、配列キーが設定されていることはわかっています。また、配列キーが存在しない場合に文字列を返すようにelseステートメントを変更すると、それも正常に機能します。したがって、何らかの理由で値が設定され、ページがリロードされると再び失われます。

また、エラー メッセージ クラスに関数を作成して、エラーが見つかったときに登録関数によって呼び出すことができる配列を返すことも試みました。

    function getErrorArray(){
        return $this->errors;
    }

これも何もしませんでした。register関数の実行時に配列キーが存在することを100%確実にするために、これを試しました:

    if ($errors > 0) {
        if(isset($errmsg->errors['firstname'])) {
            header("Location: ".$session->referrer);
        } else {
            header("Location: http://www.google.com");
        }

予想どおり、エラーが発生した場合 (ここで取り組んでいるエラーは空の文字列です)、リダイレクトされてメッセージが表示され、フィールドに値が含まれている場合は Google にリダイレクトされます。

私も使ってみました:

    if(array_key_exists($field,$this->errors))

それ以外の:

    if(isset($errmsg->errors['firstname']))

これが機能しない理由が本当にわかりません。スコープの問題ですか? これを $_SESSION に保存する必要がありますか? 任意のポインタをいただければ幸いです。ありがとう。

4

3 に答える 3

2

2つのリクエスト間でデータを保存する場合は、$_SESSIONまたは何らかのデータベースシステムを使用する必要があります。

function setError($field, $mess) {
   $_SESSION['errors'][$field] = $mess;
}

コードは適切ですが、セッション配列にリファクタリングする必要があります。

于 2012-12-10T10:33:59.317 に答える
2

Yes, you should be storing this in $_SESSION. PHP variables only exist in the scope of the current request. As soon as the request is completed the variables are lost. And redirecting creates a new request.

You could also show the error during the same request (when user posts the data to your server).

于 2012-12-10T10:29:48.917 に答える
1

PHP はステートレスです。したがって、ページを更新すると、変数がリセットされます。そのため、重要な情報を SESSION 配列に格納しています。$_SESSION が最善の方法です。

よろしく

于 2012-12-10T10:34:41.297 に答える