单击提交后显示所有错误

时间:2014-01-10 21:54:11

标签: php validation

如何在用户点击提交时显示所有错误。例如,我有这段代码:

if(strlen($username) < 5){ echo "Show error message"; }
if($password != $passwordRetype){ echo "Show error message"; }
if(strlen($password) < 8){ echo "Show error message"; }

如何在一段时间内显示所有错误消息?现在它显示,第一个错误,如果这是第二个修复,第二个修复后。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:0)

您可以使用列表/数组来跟踪发生的所有错误,然后在这个非常简单的演示中将它们呈现给用户。

$errors = []; // Array creation
if (strlen($username) < 5) { 
    // Add this error to our list
    $errors[] = 'Username not valid.';
} 

if ($password != $passwordRetype) {
    // Add this error to our list
    $errors[] = 'Password does not match our records.';
}

// Repeat this process for other errors
// Then handle your list of errors
foreach ($errors as $error) {
    echo "Error Found: $error<br>";
}    

答案 1 :(得分:0)

做点什么

$error = false ;
$msg = '';
if(strlen($username) < 5){ $msg .= "Show error message<br />"; $error = true ;}
if($password != $passwordRetype)){ $msg .= "Show error message<br />"; $error = true ;}
if(strlen($password) < 8){ $msg .="Show error message<br />"; $error = true ;}

if($error === true){
 echo $msg ;
}

答案 2 :(得分:0)

更新以显示<form>标记并使用jQuery提交表单。

真的,你应该在javascript / jQuery而不是PHP中进行这个字段测试。当它到达PHP端时,如果某些内容验证失败并且您需要返回,则屏幕将刷新,您必须存储/替换值,否则已输入的字段值将丢失。

使用javascript / jQuery,您可以在重定向之前停止验证并保留字段值并节省一些工作。

这是一个简单的例子:

jsFiddle Working Example

<强> HTML:

<form id="myForm" action="some_file.php" method="post">
One: <input type="text" id="f1"><br />
Two: <input type="text" id="f2"><br />
Three: <input type="text" id="f3"><br />
Four: <input type="text" id="f4"><br />
</form>
<br />
<input type="button" id="mybutt" value="Go" />

<强>的JavaScript / jQuery的

<script type="text/javascript">
$(function() {

var chkFld, arrAll = {'One':'f1','Two':'f2','Three':'f3','Four':'f4'};

$('#mybutt').click(function() {
    var errMsg='', badFlds='', firstBad='';
    for(var key in arrAll){
        chkFld = arrAll[key];
        if ($('#'+chkFld).val() ==''){
            //alert('Please complete field ' + arrAll[key] );
            errMsg += '*' + chkFld + '\n';
            if (firstBad=='') firstBad=chkFld;
        }
    }
    if (errMsg != '') {
        alert(errMsg);
        $('#'+firstBad).focus();
        return false;
    }
    $('#myForm').submit();
}); //END mybutt.click

}); //END document.ready
</script>

注意:

  1. 没有必要使用type =“submit”的按钮。使用jQuery提交表单非常有效。

  2. 如果表单验证失败,请使用return false;停止此时的处理并将控制权交还给用户。

  3. 如果表单通过验证,请使用$('#formID').submit();提交表单

  4. 确保您的action=method=属性(表单标记)正确无误。

  5. 另请注意,上面的示例使用jQuery。确保在文档中包含jQuery库,通常在head标记之间,因此:

    <head>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    </head>
    

答案 3 :(得分:0)

就个人而言,我总是向用户显示错误的基本原理是:

$email = $_POST['email'];
$address = $_POST['address'];
if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
 $_SESSION['errors'][] = 'Email was invalid';
}
if($address == '') {
 $_SESSION['errors'][] = 'Address was invalid';
}

if(isset($_SESSION['errors'])) {
 header("Location: " . $_SERVER['PHP_SELF']);
 exit();
} else {
 //everything okay, do other stuff like send mail or save to database
}

然后,在页面本身上,我使用一个列表:

if(isset($_SESSION['errors'])) {
 echo '<ul>';
 foreach($_SESSION['errors'] as $err) {
  echo '<li>' . $err . '</li>';
 }
 echo '</ul>';
 unset($_SESSION['errors']); //show them just once
}

这样用户就无法重新发布已经通过点击F5提交的数据,他们也不会得到一个丑陋的网址,例如?post = success。