我有以下代码,它将检查以下字段是否产生错误:
//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();
}
如果用户重定向回注册页面后出现错误,则不会显示错误消息。因此,用户不知道为什么他们被重定向回注册页面。我该如何获取它,以便在它们被重定向回注册页面后,它会显示一条错误消息,说明问题所在?例如,用户名丢失,或者电子邮件已注册。我想显示与导致它们重定向回注册页面的错误有关的错误消息。
最常见的方法是使用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.
将error_message
或error_messages
GET参数添加到accountinfo.php。
然后,如果出现错误,重定向到:
header("location: accountinfo.php?error_message=$some_message");
我注意到可能有多个错误,所以您需要决定是否要同时显示所有错误。
另一种解决方案是将错误列表存储在session
:中
$_SESSION['registration_errors'] = $errmsg_arr;
还要注意,您的代码容易受到SQL注入的攻击。
print "You have input errors. These are:";
print "<BR><UL>";
for ($i=0; $i<sizeof($errmsg_arr); $i++)
{
print "<LI>$errmsg_arr[$i]";
}
在下面插入您的代码,它将显示缺少哪些字段。