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

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

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

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

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

因此,如果您要$_SESSION['error1']为第一次通话添加消息,它会显示它。然后,在第二次加载时,如果您在 上添加消息$_SESSION['error2'],您还将收到消息,error1因为会话保留您的数据。

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

于 2013-03-29T05:11:26.857 回答
0

这确实是一个使用 session 来回显错误的坏例子。

我在我的 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

在 php 页面的第一行,你可以写你可以尝试 if 条件之间的三行中的任何一行

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