Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 验证时给出错误消息的最佳方法_Php - Fatal编程技术网

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

Php 验证时给出错误消息的最佳方法,php,Php,我是一名新程序员,正在尝试对基本注册表进行验证。我已经建立了一个基本的注册表单,在提交时将用户发送回同一页面。我还创建了一个用户类,并创建了一些基本的验证函数。但是,这些函数内置了错误消息。很明显,我将函数放在注册表的顶部,因此当出现错误时,错误会被张贴在注册表上。但是,我无法控制错误消息的外观,我想知道是否有更好的方法可以从类外以某种方式回显错误消息,以便我可以使用某种类型的css或其他方法更好地控制它们的外观。我希望这是有道理的。此外,当出现错误时,用户将被发送回空注册表。我试图找出如何在文

我是一名新程序员,正在尝试对基本注册表进行验证。我已经建立了一个基本的注册表单,在提交时将用户发送回同一页面。我还创建了一个用户类,并创建了一些基本的验证函数。但是,这些函数内置了错误消息。很明显,我将函数放在注册表的顶部,因此当出现错误时,错误会被张贴在注册表上。但是,我无法控制错误消息的外观,我想知道是否有更好的方法可以从类外以某种方式回显错误消息,以便我可以使用某种类型的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;
}
函数验证密码($password)
{   
$valid=TRUE;
如果($password=='')
{
echo“请输入密码值”

; $valid=FALSE; } elseif($_POST['pwd']!=$_POST['pwd2']) { 回显“密码不匹配,请重试”; $valid=FALSE; } 返回$valid; }
不要立即回显它们,而是将它们存储起来供以后使用。您提到这是在类中,因此可以使用类属性来保存错误消息

你的班级 { 公共错误

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";
}
现在,如果您有了该功能,可以进一步扩展它,将
$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";
}
//输出一大堆错误消息。。。
foreach($yourclass->error as$err){
echo“

$err

\n”; }
我通常对类及其错误执行的操作是使用一个专门针对错误的变量。 比如:

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;
    }
}
<?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>
然后使用:

$user = new User();
if (!$user->validate_password('somepass'))
    echo implode('<BR>',$user->ValidationErrors ());
$user=新用户();
如果(!$user->验证密码('somepass'))
echo内爆(“
”,$user->ValidationErrors());
编辑:显示用户的错误,如:

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;
    }
}
<?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>


我的意思是,只有当出现错误时,它才会将用户发送回同一页面。如果不是的话,它会把它们发送到主页谢谢你,我一直在努力解决这个问题hours@Mike老师很乐意帮忙。请看我刚才添加的关于保留错误消息数组的内容。现在有没有办法让错误在无效框中明确显示?