输入错误-重定向回注册页面,显示错误消息


Input Errors - Redirect back to registration page, display error message

我有以下代码,它将检查以下字段是否产生错误:

//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_messageerror_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]";
}

在下面插入您的代码,它将显示缺少哪些字段。