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

标签 php mysql

我目前正在创建一个网站,用户可以在其中登录帐户。为此,我需要检查用户提交的电子邮件和密码是否与 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 默认情况下将返回下一行的第一列,而不是返回整行。

我不知道你们以前在同一张 table 上。对于登录表单,我认为您应该采取一些不同的做法。

  1. 您应该为每个用户使用唯一的盐对密码进行哈希处理。您永远不应该在数据库中存储纯文本密码。

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

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

    然后您可以比较密码(希望经过哈希处理)

关于php - 如何检查变量是否与 fetch() 具有相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057410/

相关文章:

php - 如何从数据库中选择的前 10 个条目中更新前 5 个条目

mysql - 当某些项目组合在一起时,需要如何对项目进行排序的指导

php - 使用 PHP 从 API 下载 CSV 文件 - URL 不以 .csv 结尾

php - cakephp3中如何转义mysql数据库名称以防止sql注入(inject)?

php - 如何仅删除选定的帖子?

php - 上传图片到MySQL数据库

python - 你如何在python中执行带有url的mysql?

mysql - group_concat mysql子查询只返回一项

java - MySQL性能

php - Laravel 6 PHPUnit 测试 - 找不到驱动程序(SQL : PRAGMA foreign_keys = ON;))