Php 验证时显示错误

Php 验证时显示错误,php,mysqli,twitter-bootstrap-3,Php,Mysqli,Twitter Bootstrap 3,我使用的是引导。。我需要一次显示1个错误。下面的代码在不同的行中发布错误,它会占用整个页面 如果第一个字段中存在问题,则只在继续下一个字段之前过帐该错误,而不是一次过帐所有字段 function validate_registration(){ $errors = []; if ($_SERVER['REQUEST_METHOD'] == "POST") { $email = clean($_POST['email']);

我使用的是引导。。我需要一次显示1个错误。下面的代码在不同的行中发布错误,它会占用整个页面

如果第一个字段中存在问题,则只在继续下一个字段之前过帐该错误,而不是一次过帐所有字段

function validate_registration(){
    $errors = [];    

    if ($_SERVER['REQUEST_METHOD'] == "POST") {


        $email = clean($_POST['email']);        
        $user_name = clean($_POST['user_name']);
        $birthdate = clean($_POST['birthdate']);
        $country = clean($_POST['country']);
        $password = clean($_POST['password']);
        $confirm_password = clean($_POST['confirm_password']);


        if (empty($email)) {
            $errors[] = "Email Address Required.";
        }
        if (email_exists($email)) {
            $errors[] = "Email Address in use.";
        }

        if (empty($user_name)) {
            $errors[] = "Username Required.";
        }
        if (strlen($user_name) < $min) {
            $errors[] = "Username is to short.";
        }

        if (user_exists($user_name)) {
            $errors[] = "Username Taken.";
        }

        if (empty($birthdate)) {
            $errors[] = "Birthdate Required.";
        }

        if (empty($country)) {
            $errors[] = "Country Required.";
        }

        if (empty($password)) {
            $errors[] = "Password Required.";
        }

        if ($password !== $confirm_password) {            
            $errors[] = "Your password fields do not match";
        }

        if (! empty($errors)) {            
            foreach ($errors as $error) {                
                echo validation_errors($error);
            }
        } else {

            if (register_user($email, $user_name, $birthdate, $country, $password)) {

             set_message('<div class="alert alert-success alert-dismissible" role="alert">
             <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
             Please check your email for account Information.</div>');

             redirect("../account/login.php");

            }
        }
    }
}
函数验证\注册(){
$errors=[];
如果($\u服务器['REQUEST\u METHOD']==“POST”){
$email=clean($_POST['email']);
$user\u name=clean($\u POST['user\u name']);
$birthdate=干净($_POST['birthdate']);
$country=clean($_POST['country']);
$password=clean($_POST['password']);
$confirm_password=clean($_POST['confirm_password']);
如果(空($email)){
$errors[]=“需要电子邮件地址。”;
}
如果(email_存在($email)){
$errors[]=“正在使用的电子邮件地址。”;
}
if(空($user_name)){
$errors[]=“需要用户名。”;
}
if(strlen($user_name)<$min){
$errors[]=“用户名太短。”;
}
如果(user_存在($user_name)){
$errors[]=“已获取用户名。”;
}
如果(空($birthdate)){
$errors[]=“需要生日。”;
}
如果(空($国家)){
$errors[]=“需要国家/地区。”;
}
if(空($password)){
$errors[]=“需要密码。”;
}
如果($password!=$confirm_password){
$errors[]=“您的密码字段不匹配”;
}
如果(!empty($errors)){
foreach($errors作为$error){
回波验证错误($error);
}
}否则{
if(注册用户($email、$user\u name、$birthdate、$country、$password)){
设置消息('
&时代;
请查看您的电子邮件以了解帐户信息。“);
重定向(“../account/login.php”);
}
}
}
}

更新:

根据您的意见,如果您希望一次打印一个错误,则需要使用ELSEIF而不是if like:

if (empty($email)) {
    $errors[] = "Email Address Required.";
}
elseif (email_exists($email)) {
    $errors[] = "Email Address in use.";
}
...

您也可以通过保留现有代码来实现这一点

只需替换此代码:-

     if (!empty($errors)) {              
        echo validation_errors($errors[0]);               
     }
您还可以通过
if-else-if
方式获得相同的功能。将$error声明为字符串

$error = ''; 

if(empty($email)) {
            $error = "Email Address Required.";
        }
        else if (email_exists($email)) {
            $error = "Email Address in use.";
        }

        else if (empty($user_name)) {
            $error = "Username Required.";
        }
        else if (strlen($user_name) < $min) {
            $error = "Username is to short.";
        }

        else if (user_exists($user_name)) {
            $error = "Username Taken.";
        }

        else if (empty($birthdate)) {
            $error = "Birthdate Required.";
        }

        else if (empty($country)) {
            $error = "Country Required.";
        }

        else if (empty($password)) {
            $error = "Password Required.";
        }

        else if ($password !== $confirm_password) {            
            $error = "Your password fields do not match";
        }

       if (!empty($error)) { 

                echo validation_errors($error);

        } else {

            if (register_user($email, $user_name, $birthdate, $country, $password)) {

             set_message('<div class="alert alert-success alert-dismissible" role="alert">
             <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
             Please check your email for account Information.</div>');

             redirect("../account/login.php");

            }
        }
$error='';
如果(空($email)){
$error=“需要电子邮件地址。”;
}
else if(电子邮件_存在($email)){
$error=“正在使用的电子邮件地址。”;
}
else if(空($user_name)){
$error=“需要用户名。”;
}
else if(strlen($user_name)<$min){
$error=“用户名太短。”;
}
else if(user_存在($user_name)){
$error=“已获取用户名。”;
}
else if(空($birthdate)){
$error=“需要生日。”;
}
else if(空($country)){
$error=“国家/地区必填。”;
}
else if(空($password)){
$error=“需要密码。”;
}
如果($password!=$confirm_password){
$error=“您的密码字段不匹配”;
}
如果(!empty($error)){
回波验证错误($error);
}否则{
if(注册用户($email、$user\u name、$birthdate、$country、$password)){
设置消息('
&时代;
请查看您的电子邮件以了解帐户信息。“);
重定向(“../account/login.php”);
}
}
要进行引导验证,请访问以下站点:-


希望它能帮助您:)

为什么不使用jquery验证进行客户端验证

然后也使用服务器端验证,但将其显示为全部 在循环中而不是内联中出错


因为客户端和服务器端验证都很有用

只需替换$errors[]使用$errors。@RaviHirani这不会导致上一个错误被上一个错误覆盖吗?@devpro如果您尝试注册,则不会有错误。请说所有内容都为空,然后发布所有错误,您必须单击每个错误以关闭。我要根据发布每个错误field@SagarGuhe例如他需要一次犯一个错误。我知道这不是个好办法。但他会得到他所需要的。与其发布所有错误,不如发布每个错误row@devpro:-如果我没有错,那么他需要对他的表单进行客户端验证。我已经发布了服务器端验证的解决方案,以获得第一个错误。我还更新了我的答案,并为他发布了一个链接,为您提供准确的引导验证。Ravi Hirani非常感谢您,这正是我试图做的。对于非常严重的错误,如果elseif??使用当前代码?@devpro:是的。我同意你的看法。If-else优于数组方式。我用他当前的代码给了他最小的解决方案。我也在用你建议的方式编辑我的答案。