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

时间:2011-07-26 15:30:57

标签: php redirect validation

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

//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();
}

如果用户重定向回注册页面后产生错误,则不会显示错误消息。因此用户不知道为什么他们被重定向回注册页面。我怎样才能得到它,一旦它们被重定向回注册页面,它将显示一条错误消息,说明问题是什么?防爆。用户名丢失,或电子邮件已注册。我想显示与错误有关的错误消息,导致它们被重定向回注册页面。

3 个答案:

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

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