0

これは非常に単純なことですが、私はこれに気づいていません。コードと条件が一致したときに表示されるいくつかのセッション変数を持つサインアップフォームの同じページにphpコードがあります。

コード構造は次のようになります。

      <?php
         session_start();
         if(isset($_POST['signup'])
       {
      if(condition)
       {
          $_SESSION['err1']="string";
       }
     else
       {
           $_SESSION['err2']="string";
       }
     }

     ?>

                 //HTML form
    <?php if(isset($_SESSION['err1']) {?>
    <li><?php echo $_SESSION['err1'];}?></li>

    <?php if(isset($_SESSION['err2']) {?>
    <li><?php echo $_SESSION['err2'];}?></li>


                 //rest of the form

コードに if-else のブロックが増えました。最初に、条件が一致すると、セッション メッセージが表示されます。ただし、ページが更新されるとすぐに、別のセッション メッセージが前のセッション メッセージとともに表示されます。

これはフォームを使用した正しいコーディング方法ですか? HTMLフォーム内にエラーメッセージを表示したいからです。

4

4 に答える 4

0

これは、セッションを使用してエラーをエコーする悪い例です。

PHPの開始時に何度も行うこと。

$errors = array(); // make a empty array errors before the conditional statements
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['Submit'])) {
      //handle your POST variable
      if(condition1){ 
          $errors[] = "some error";
      } 
      if(condition2) {
          $errors[] = "some another error";
      }
      //more conditions

     if (!empty($errors)) {
           //process your form data if there is no errro
     } else {
        //display back your form along with Errors
        if(isset($errors) && !empty($errors)) {

             foreach($errors as $error) {
                echo "<p class = 'error'>" . $error . "</p>";
              }
        }
        <form action = "" method = "POST">
           //your form elements
        </form>
     }
}
于 2013-03-29T05:25:43.447 に答える
0

エコー後にセッション変数の設定を解除するだけです。

<li><?php echo $_SESSION['err1'];} unset($_SESSION['err1']); ?></li>
于 2013-03-29T05:05:08.390 に答える
0

PHP ページの最初の行に、if 条件の間の 3 行のいずれかを試すことができます。

if(isset($_SESSION))
{
unset($_SESSION); 
unregister($_SESSION['variable-name']) // try this also 
session_destroy();  //try this also 
}
于 2013-03-29T06:45:30.027 に答える
0

これはおそらく、セッション変数を空にしていないためです。

2 つの HTTP リクエスト間で、セッションはサーバー上で保持されます (リクエストごとにリロードするだけです)。

したがって、$_SESSION['error1']最初の通話でメッセージを送信すると、それが表示されます。次に、2 回目のロードで、 にメッセージを送信すると、セッションがデータを保持するため、$_SESSION['error2']のメッセージも表示されます。error1

フォームを表示した後、すべてのセッション メッセージを空にする必要があります。

于 2013-03-29T05:11:26.857 に答える