验证时给出错误消息的最佳方法

时间:2011-08-26 02:39:53

标签: php

我是一名新程序员,正在尝试对基本注册表单进行一些验证。我已经构建了一个基本的注册表单,在提交时将用户发送回同一页面。我还创建了一个用户类,并创建了一些基本的验证函数。但是,这些函数会在其中内置错误消息。我显然把这些功能放在注册表的顶部,所以当出现错误时,错误会在注册表上公布。但是,我无法控制错误消息的外观,并且想知道是否有更好的方法以某种方式回应来自类外部的错误消息,因此我可以使用某种类型的css或其他东西来更好地控制如何他们看。我希望这是有道理的。此外,当出现错误时,用户将被发送回空注册表单。我试图找出如何在文本框中保留有效信息,并让它们重做无效信息。这是我已经完成的验证的基本示例。我知道它的基本但我是编程的新手

function validate_password($password)
{   
    $valid = TRUE;
    if ($password == '')
    {
        echo "<p> Please enter a value for the password </p>";
            $valid = FALSE;
    }
    elseif($_POST['pwd'] !== $_POST['pwd2'])
        {
            echo "The passwords do not match please try again";
            $valid = FALSE;
        }
return $valid;
}

2 个答案:

答案 0 :(得分:2)

不要马上回复它们,而是存放它们供以后使用。您提到这是在类中,因此您可以使用类属性来保存错误消息。

类YourClass {     public $ error;

function validate_password($password)
{   
    $valid = TRUE;
    if ($password == '')
    {
        // Set the error message
        $this->error = "Please enter a value for the password";
            $valid = FALSE;
    }
    // etc...
}

}

稍后,当您需要时,可以在HTML中输出:

if (!empty($yourclass->error)) {
  echo "<p class='errmsg'>{$yourclass->error}</p>\n";
}

然后你需要一个CSS类errmsg,你可以按照自己喜欢的方式设置它:

.errmsg {
   color: #FF0000;
   font-size: 36px;
}

现在,如果你有这个工作,你可以进一步扩展它,使$error类属性成为一个数组并将多个消息推送到它上面:

// In the class, initialize it as an array
$this->error = array();


// Use the [] notation to append messages to the array.
$this->error[] = "Another error message..."
$this->error[] = "And yet another error message..."

在演示文稿代码中,使用循环输出消息:

// Output a big stack of error messages...
foreach ($yourclass->error as $err) {
      echo "<p class='errmsg'>$err</p>\n";
}

答案 1 :(得分:0)

我通常对类及其错误所做的是有一个专门针对错误的变量。 如下所示:

class User
{
    private $_ValidationErrors = array();

    function validate_password($password)
    {   
        $this->_ValidationErrors = array();
        $valid = TRUE;
        if ($password == '')
        {
            $this->_ValidationErrors[] = "Please enter a value for the password";
                $valid = FALSE;
        }
        elseif($_POST['pwd'] !== $_POST['pwd2'])
        {
            $this->_ValidationErrors[] = "The passwords do not match please try again";
            $valid = FALSE;
        }
        return $valid;
    }

    function ValidationErrors ()
    {
        if (count($this->_ValidationErrors) == 0)
            return FALSE;
        return $this->_ValidationErrors;
    }
}

然后使用:

$user = new User();
if (!$user->validate_password('somepass'))
    echo implode('<BR>',$user->ValidationErrors ());

编辑:用户显示错误:

<?php
if (isset($_POST["submit"]))
{
    $user = new User();
    $passwordErrors = (!$user->validate_password($_POST["pass1"]))?$user->ValidationErrors():array();
}
?>
<form action="<?php echo $_SERVER["php_self"]; ?>" method="post">
    <input type="text" name="pass1" value="<?php echo htmlspecialchars($_POST["pass1"]); ?>" /><BR/>
    <?php
        echo ((isset($passwordErrors) && count($passwordErrors) == 0)?"":implode("<BR/>", $passwordErrors));
    ?>
    <input type="submit" name="submit" value="Register" />
</form>