繁体   English   中英

如何检查变量是否与fetch()具有相同的值

[英]How to check if a variable has the same value as a fetch()

我目前正在创建一个网站,用户可以在其中登录帐户。 为此,我需要检查用户提交的电子邮件和密码是否与MySQL数据库中的相同。

这是我的代码;

<h2> Log in to an existing account </h2>
<form action = "account.php" method = "POST" id = "log">
    <p><label> Email </label> <input type = "text" name = "logmail" ></p>
    <p><label> Password </label> <input type = "password" name = "logpass"></p>
    <p><input type = "submit" value = "Log in"></p>

if(!empty($_POST['logmail']) && !empty($_POST['logpass']))
{
    $sql = ("SELECT customer_mail FROM customer_user WHERE customer_mail = '{$_POST['logmail']}'");
    $sql2 = ("SELECT customer_pass FROM customer_user WHERE customer_pass = '{$_POST['logpass']}'");

    $stmt = $dbh->prepare($sql);
    $stmt2 = $dbh->prepare($sql2);

    $stmt->execute();
    $stmt2->execute();

    var_dump($stmt->fetch());
    var_dump($_POST['logmail']);
    var_dump($stmt2->fetch());
    var_dump($_POST['logpass']);

    if($stmt->fetch()[0] == $_POST['logmail'])
    {       
        if($stmt->fetch()[0] == $_POST['logpass'])
        {
            echo "Logged in";
        }
        else
        {
            echo "Wrong password";
        }
    }
    else
    {
        ?> <h2> Wrong email </h2> <?php
    }
}

当我尝试运行此命令时,var_dumps给了我一个数组stmt-> fetch()和stmt2-> fetch。 这些数组的位置0是我要登录的帐户的电子邮件和密码。 它们也与我在表单字段中键入的内容相同。 $ _POST的var_dumps确认了这一点。

但是即使认为它们是完全相同的,它也不会触发If语句。

有谁知道为什么会这样吗?

为什么不使用fetchColumn()呢? 默认情况下, fetchColumn将返回下一行的第一列,而不是返回整行。

我没意识到你以前在同一张桌子上。 对于登录表单,我认为您应该这样做有些不同。

  1. 您应该为每个用户使用唯一的盐散列密码。 您绝对不应在数据库中存储纯文本密码。

  2. 您实际上只需要一个查询:

     $sql = ("SELECT customer_pass FROM customer_user WHERE customer_mail = ?"); 

    然后,您可以比较密码(希望是散列的)

使用一个SQL查询

$sql = ("SELECT customer_pass FROM customer_user WHERE customer_mail = ?");
$stm = $dbh->prepare($sql);
$stm->setFetchMode(PDO::FETCH_ASSOC);
$stm->execute($_POST['logmail']); 
if ($stm && $stm->rowCount() == 1) { 
   $result = $stm->fetch();
   if ($result['customer_pass'] === $_POST['logmail']) { 
      // Login
   } else { 
      echo 'Wrong Password';
   }
} else { 
  echo 'Email does not exist';
}

下次使用SHA256和Salt在注册和登录时养成加密密码的习惯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM