我知道这是很简单的事情,但我没有意识到这一点。我有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
}