我有以下代码,它将检查以下字段是否产生错误:
//Input Validations
if($user_name == '') {
$errmsg_arr[] = 'Username missing';
$errflag = true;
}
if($user_password == '') {
$errmsg_arr[] = 'Username Password missing';
$errflag = true;
}
if($insp_name == '') {
$errmsg_arr[] = 'Inspector Name missing';
$errflag = true;
}
if($insp_email == '') {
$errmsg_arr[] = 'Inspector Email missing';
$errflag = true;
}
if($confirm_password == '') {
$errmsg_arr[] = 'Confirm Password missing';
$errflag = true;
}
if ($user_password != $confirm_password) {
$errmsg_arr[] = 'The password which you have entered do not match';
$errflag = true;
}
$result = mysql_query("SELECT * FROM members WHERE `email` = '$insp_email' or `login` = '$user_name' LIMIT 1" );
$exist = mysql_fetch_row($result);
if ($exist !==false ) {
$errmsg_arr[] = 'That email is already registered.';
$errflag = true;
}
//If there are input validations, redirect back to the registration form
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: accountinfo.php");
exit();
}
如果用户重定向回注册页面后产生错误,则不会显示错误消息。因此用户不知道为什么他们被重定向回注册页面。我怎样才能得到它,一旦它们被重定向回注册页面,它将显示一条错误消息,说明问题是什么?防爆。用户名丢失,或电子邮件已注册。我想显示与错误有关的错误消息,导致它们被重定向回注册页面。
答案 0 :(得分:6)
最常见的方法是使用flash messages
。我们的想法是使用session
存储Flash消息。如果当前会话中存在该消息,则显示其内容并将其删除(因此我们确定它是“一次性”消息):
//注册页面代码:
...
$_SESSION['flash_message'] = 'An error has occurred on the previous page! You\'ve broken something!';
...
重定向后:
if (!empty($_SESSION['flash_message'])) {
// let's show our message to a user
echo $_SESSION['flash_message'];
// and don't forget to erase it from session
unset($_SESSION['flash_message']);
}
我建议为此目的编写自己的类,例如:
FlashMessage::set('error', 'the error message itself');
FlashMessage::get('error'); // will perform the unset
// or
FlashMessage::render('template', 'error'); // would render error template and show error message immediatelly if exists... etc.
答案 1 :(得分:0)
在accountinfo.php中添加error_message
或error_messages
GET参数。
然后,如果出现错误,请重定向到:
header("location: accountinfo.php?error_message=$some_message");
我注意到可能存在多个错误,因此您需要决定是否要一次显示所有错误。
另一种解决方案是在session
:
$_SESSION['registration_errors'] = $errmsg_arr;
另请注意,您的代码容易受到SQL injection的攻击。</ p>
答案 2 :(得分:0)
print "You have input errors. These are:";
print "<BR><UL>";
for ($i=0; $i<sizeof($errmsg_arr); $i++)
{
print "<LI>$errmsg_arr[$i]";
}
在代码下方插入,它将显示缺少哪些字段。