PHP:my session_variables显示页面刷新的时间


PHP:my session_variables shows when the page refresh

我知道这是很简单的事情,但我没有意识到这一点。我有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表单中显示错误消息

这可能是因为您没有清空会话变量。

在两个HTTP请求之间,会话保存在服务器上(只是在每个请求时重新加载)。

因此,如果您为第一次呼叫在$_SESSION['error1']上放置消息,它将显示它。然后,在第二次加载时,如果您在$_SESSION['error2']上放置消息,那么您也将拥有error1的消息,因为会话保留了您的数据。

显示表单后,您应该清空所有会话消息

只需在回显后取消会话变量。

<li><?php echo $_SESSION['err1'];} unset($_SESSION['err1']); ?></li>

这是一个使用会话回显错误的糟糕示例。

是我在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>
     }
}

在PHP页面的第一行,你可以写您可以尝试if condition

之间的任何三行
if(isset($_SESSION))
{
unset($_SESSION); 
unregister($_SESSION['variable-name']) // try this also 
session_destroy();  //try this also 
}