通过一个变量返回几个错误


returning several errors through one variable?

对于我的注册表单,我有一个函数可以检查所有字段是否正确。

如果字段不正确,则通过与$_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