2016-01-19 158 views
-1

我使用自举引导程序..我需要一次显示错误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"); 

      } 
     } 
    } 
} 
+0

只需将$ errors []替换为$ errors即可。 –

+0

错误是什么? – devpro

+0

@RaviHirani会不会导致最后一个错误被覆盖以前? –

回答

0

你可以通过保留现有的代码也可以做到这一点。

只需更换该代码: -

 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"); 

      } 
     } 

对于引导验证,只需访问该link: -

希望它会帮助你:)

+0

这是什么? – devpro

+0

@devpro: - 如果我没有错,那么他需要客户端验证他的表单。我已经发布了服务器端验证的解决方案,以获得第一个错误。我也更新了我的答案,并发布了一个链接给他,让你确切的引导验证。 –

+0

Ravi Hirani非常感谢你,这正是我想要做的。对于非常错误, – Rome

0

更新:

根据您的意见,如果你想在每次打印一个错误比你需要使用ELSEIF,而不是IF,如:

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

devpro无辜的代码工作正常 – Rome

0

为什么不使用jQuery验证的客户端验证

,然后使用服务器方面验证,但显示为所有 错误循环而不是内联。

由于客户端以及服务器端验证有用