对于我的注册表单,我有一个函数可以检查所有字段是否正确。
如果字段不正确,则通过与$_SESSION['errors'] = $errors;
的会话传递变量$errors
,并将用户发送回显示错误消息的注册页面。
我想做的是能够在每个错误输入旁边显示一条错误消息,因此,例如,如果一个用户没有同时输入他的用户名/密码,并且captcha错误,就会显示这样的内容:
[输入用户名]请输入您的用户名
[输入密码]需要密码
[电子邮件输入]
[验证码输入]重试
我知道我可以通过为每个错误设置一个不同的变量来创建它,并将它们全部传递到会话中,然后检查它们是否都设置好了,但这看起来不太干净。
我该如何做到这一点?使用$errors
作为数组,这样我就可以为每个不正确的输入存储一个错误?(我还没有学会使用它们,但如果是这样的话,我会的)。
这是我的代码,更清晰:
if (!isset($username) || $username == ''){
$errors = "";
gg::writeLog('registration failed - error');
}
if (!ctype_alnum($username)){
$errors = "";
gg::writeLog('registration failed - error');
}
if (gg::getUser($username)){
$errors = "";
gg::writeLog('registration failed - error');
}
if (gg::getUser($email, 'email')){
$errors = "";
gg::writeLog('registration failed - error');
}
if (!isset($password) || $password == ''){
$errors = "";
gg::writeLog('registration failed - error');
}
if (!isset($passwordconf)){
$errors = "";
gg::writeLog('registration failed - error');
}
if (!isset($_POST['captcha'])){
$errors = "";
gg::writeLog('registration failed - error');
}
if ($password != $passwordconf){
$errors = "";
gg::writeLog('registration failed - error');
}
if (filter_var($email, FILTER_VALIDATE_EMAIL) == false){
$errors = "";
gg::writeLog('registration failed - error');
}
if ((int)$captcha != (int)$_SESSION['captcha_answer']){
$errors = "";
gg::writeLog('registration failed - error');
}
if ($error != false) {
$_SESSION['errors'] = $errors;
header('Location: ' .ggconf::get('base_url'). '/user/register.php');
}
创建一个会话数组,并使用它来验证表单提交中的输入错误。
$errors = //array
if (!isset($username) || $username == ''){
$errors['username']= "username error";
gg::writeLog('registration failed - error');
}
if (gg::getUser($email, 'email')){
$errors['email']= "email error";
gg::writeLog('registration failed - error');
}
......
现在,在你的表格中,你可以这样做:
<?php
if(isset($errors['username'])){
echo $errors['username'];
}?>
//html for username input
$errors= array(
"username" => "bar",
"email" => "foo",
);
http://php.net/manual/en/language.types.array.php