2013-03-29 17 views
0

我知道这是非常简单的事情,但我不知道这一点。我在同一页上有一个注册表单,当任何条件与代码匹配时,会显示一些会话变量。PHP:我的session_variables显示当页面刷新

的代码结构是这样的:

 <?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表单中显示错误消息。

+0

我不明白的问题之间有任何的三条线。什么形式?我没有看到任何表格。 – Shoe

+0

这可能是因为你没有清空会话变量。 在2个HTTP请求之间,会话保留在服务器上(每次请求重新装入)。 因此,如果您在第一次调用时在$ _SESSION ['error1']'上发送消息,它会显示它。然后,在第二次加载时,如果您要在'$ _SESSION ['error2']'上输入消息,您将会收到'error1'的消息,因为会话会保留您的数据。显示表单后,您应该清空所有会话消息。 – MatRt

回答

0

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

在2个HTTP请求之间,会话保留在服务器上(每次请求重新装载)。

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

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

+0

我应该用session_destroy还是用其他函数清空它? –

+0

你可以用'unset($ _ SESSION ['error1'])'清空所有条目,或者尝试重置entiere会话'$ _SESSION = array();' – MatRt

0

回声后,只需取消设置会话变量即可。

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

谢谢大家!问题解决了。 –

+0

并评价我的问题,如果发现有用的一些新的初学者。 –

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> 
    } 
} 
0
在PHP页面的第一行

,U可以写 你可以尝试,如果条件

if(isset($_SESSION)) 
{ 
unset($_SESSION); 
unregister($_SESSION['variable-name']) // try this also 
session_destroy(); //try this also 
}