用PHP登录表单验证

时间:2019-02-20 12:20:08

标签: php

我正在验证PHP中的登录页面形式,我有以下代码:

if($customerCount > 0) {
   if(password_verify($password_2, $customer['password'])) {
      if($customer['isEmailConfirmed'] == 0) {
          $msg_2 = "<span class='text-danger'>Please verify your email!</span>";
      } else {
          $customer_id = $customer['id'];
          login_2($customer_id);
      }
   } else {
       $msg_2 = "<span class='text-danger'>The email address and password combination you provided was not found. Please try again.</span>";
   }
} else {
      $msg_2 = "<span class='text-danger'>The email address is not registered in our system.</span>";
}

它工作正常。但是我需要添加

if(empty($_POST['email_3']) || empty($_POST['password_3'])){
    $msg_2 = 'You must provide email and password.';
}

如果电子邮件和密码均保留为空。如果电子邮件已填写,但密码为空,我也需要显示消息,反之亦然。现在如何将这些代码添加到验证中。我对所有这些if语句感到困惑和迷茫。我应该在哪里添加这些以及如何添加?

4 个答案:

答案 0 :(得分:0)

<?php

// changed || to &&
if(empty($_POST['email_3']) && empty($_POST['password_3'])) {
    $msg_2 = "<span class='text-danger'>You must provide email and password.</span>";
}
// No need to write this code.
else if(empty($_POST['email_3']) && !empty($_POST['password_3'])) {
    $msg_2 = "<span class='text-danger'>Please enter a valid email address.</span>";
}
/*
    You can write this code for validate email
else if(!empty($_POST['email_3']) && filter_var($_POST['email_3'], FILTER_VALIDATE_EMAIL) === false) {
    $msg_2 = "<span class='text-danger'>Please enter a valid email address.</span>";
}
*/
else {
    // Please write your remaining code

    if($customerCount > 0) {
        if(password_verify($password_2, $customer['password'])) {
            if($customer['isEmailConfirmed'] == 0) {
                $msg_2 = "<span class='text-danger'>Please verify your email!</span>";
            } else {
                $customer_id = $customer['id'];
                login_2($customer_id);
            }
        } else {
            $msg_2 = "<span class='text-danger'>The email address and password combination you provided was not found. Please try again.</span>";
        }
    } else {
        $msg_2 = "<span class='text-danger'>The email address is not registered in our system.</span>";
    }
}

?>

答案 1 :(得分:0)

您可以使用顺序算法。这样,可以轻松添加大量验证,并保持可读性。

$everythingOk = true;
$errMessage = '';
if (empty($_POST['email_3']) {
  $everythingOk = false;
  $errMessage = 'Email 3 empty';
}
if ($everythingOk && empty($_POST['password_3']) {
  $everythingOk = false;
  $errMessage = 'Password 3 empty';
}
if ($everythingOk && ($customerCount === 0)) {
  $everythingOk = false;
  $errMessage = 'Customer count error';
}
........
if ($everythingOk) {
  // all info ok, move on
} else {
  // info is not valid
  // message is in $errMessage
}

答案 2 :(得分:0)

将所有内容放到函数中并返回结果可能会更容易。您处理if语句的方式会以大V结束,有时很难读取:

<?php

$loginCheck = getLogin( $_POST , $customer , $password_2 );
if( is_array( $loginCheck ) ){ // if error messages are present
    // Login errors
    foreach( $loginCheck  as $errorMsg ){
        echo $errorMsg . '<br />';
    }
} 
if( $loginCheck ){ //assuming login_2 returns boolean true if logged in
  echo 'Logged In!';
}


function getLogin( $details , $customer , $password ){

    $errors[]; //set errors array to catch all errors
    if(empty($details['email_3'])){
        $errors[] = "You must provide an email.";
    }

    if(empty($details['password_3'])){
        $errors[] = "You must provide a password.";
    }

    if( ! empty( $errors[] ) ){
        //fatal error no point going futher
        return $errors;
    }
    if( ! $customer ) { //assuming if no email is found $customer returns boolean
        $errors[] = "<span class='text-danger'>The email address is not registered in our system.</span>";
    }

    if( ! password_verify( $password , $customer['password'] ) ) {
        $errors[] = "<span class='text-danger'>The email address and password combination you provided was not found. Please try again.</span>"
    }

    if($customer['isEmailConfirmed'] === 0) {
        $errors[] = "<span class='text-danger'>Please verify your email!</span>";
    }

    return login_2($customer['id']);
}

?>

答案 3 :(得分:-1)

尝试以下代码:

<?php
    if(empty($_POST['email_3'])) {
        // Email is left blank
        if(empty($_POST['password_3'])) {
            // Password is also blank
            $msg_2 = "You must provide email and password.";
        } else {
            // Only email is blank
            $msg_2 = "You must provide email address.";
        }
    } elseif(empty($_POST['password_3']) && !empty($_POST['email_3'])) {
            // Only password is blank
            $msg_2 = "You must provide a password.";
        }
    }
    // Your custom form validation goes here
?>

第一个if检查电子邮件是否为空白。嵌套的if同时检查密码是否也为空。在这种情况下,消息You must provide email and password.被分配给$msg_2;否则为You must provide email address.

elseif检查密码是否为空 AND 电子邮件是否为空。如果是这种情况,则将第三条消息放入$msg_2