2017-06-12 136 views
-1

嗨有我在学习如何使用预处理语句。我已经想出了如何检查密码和电子邮件地址匹配,但是我希望在参数检查中也有一个标准,即电子邮件地址在系统中,并检查密码是否不匹配。检查用户名是否存在,并检查密码是否匹配

如何添加'IF/ELSE'参数来检查电子邮件地址,然后检查密码是否匹配(它目前是这样做的)。

任何帮助,将不胜感激:

$emailAddress = $_POST['emailAddress']; 
$password = $_POST['password']; 

if ($stmt = $conn->prepare("SELECT `password` FROM `users` WHERE emailAddress=?")) { 

    $stmt->bind_param("s", $emailAddress); 
    $stmt->execute(); 

    $stmt->bind_result($result); 
    $stmt->fetch(); 
    $stmt->close(); 
} 


if(password_verify($password, $result)){ 
    // Login if the email and password matches 
    session_start(); 
    $_SESSION['loggedin'] = true; 
    $_SESSION['emailAddress'] = $emailAddress; 
    header('Location: ../index.php'); 
} 
else{ 

    header('Location: ../login.php?error=1'); 
} 

$conn->close(); 
+1

什么是你的问题? –

+0

@u_mulder“我希望在参数检查中有一个标准,即电子邮件地址在系统中,并检查密码是否不匹配。” – danjbh

+1

这不是问题。这是一个'愿望'。什么是“论证”? –

回答

2

修改你的代码为:

$emailAddress = $_POST['emailAddress']; 
$password = $_POST['password']; 

if ($stmt = $conn->prepare("SELECT `password` FROM `users` WHERE emailAddress=?")) { 

    $stmt->bind_param("s", $emailAddress); 
    $stmt->execute(); 

    $stmt->bind_result($result); 
    $stmt->fetch(); 

    /** 
    * Another option can be 
    * if ($stmt->fetch()) { 
    */ 

    if (!empty($result)) { 
     // something is found 
     if (password_verify($password, $result)){ 
      // Login if the email and password matches 
      session_start(); 
      $_SESSION['loggedin'] = true; 
      $_SESSION['emailAddress'] = $emailAddress; 
      header('Location: ../index.php'); // or whatever 
      exit; 
     } else { 
      // No password match 
      header('Location: ../login.php?error=1'); // or whatever 
      exit; 
     } 
    } else { 
     // No email found 
     header('Location: ../login.php?error=2'); // or whatever 
     exit; 
    } 
    $stmt->close(); 
} 
+0

退出的应该被添加到每个标题;-) –

+0

@ Fred-ii-绝对,固定) –

+0

我选择使用这个,因为我可以理解它 – danjbh