【问题标题】:form username and database username not agreeing even though they are the same表单用户名和数据库用户名不一致,即使它们相同
【发布时间】:2014-09-11 17:37:07
【问题描述】:

我正在尝试使用河豚、PHP 和 MySQL 创建登录

我在数据库中有一个用户设置,并在表单中输入了相同的信息。通过使用 echo 进行检查,代码一直到 if 语句(看到它们不匹配(即,它进入 if 语句并使用密码失败,因为它没有正确的用户(使用!=) 一双新鲜的眼睛会很棒。

谢谢

PHP 代码

$query = "SELECT  * FROM 'users' WHERE LOWER('username')=:username";
$stmt=$dbh->prepare($query);
$stmt->bindValue(':username',strtolower ($_POST['username']));
$stmt->execute();


if ($stmt->rowCount() == 1)
{
    $row=$stmt->fetch(PDO::FETCH_ASSOC);
    require('blowfish.php');
    require('bcrypt.class.php');
    $bcrypt = new Bcrypt(4);
        if($bcrypt->verify($_POST['password'],$row['password']))
    {
        echo"logged in!! fish";
    }
}

HTML 代码:

<form method="POST" action="authorise.php">
Username: <input type ="text" name="username"/><br/>
Password: <input type ="password" name="password"/><br/>
<input type="submit"/>
</form>

【问题讨论】:

  • 不要将表和列视为字符串。

标签: php mysql blowfish


【解决方案1】:

查询中不需要单引号

$query = "SELECT  * FROM users WHERE LOWER(username)=:username";

如果您使用任何保留关键字,您可能需要在列名和表名上使用反引号。当您在查询中使用字符串对其进行转义时,将使用引号。

【讨论】:

    【解决方案2】:

    您的查询错误

    $query = "SELECT  * FROM 'users' WHERE LOWER('username')=:username";
    

    在 LOWER 函数中使用单引号本质上是询问 MySQL 参数 username 是否等于文本字符串 username 而不是名为 username 的列。 IE 如果$_POST['username'] 等于“robbert”,则您的查询询问是否 robbert=username。不,它等于 robbert。表也​​是如此。要么使用反引号,要么根本不使用引号。

    在 MySQL 中,反引号 (`) 用于引用列名或表名。这应该是您要使用的查询

    $query = "SELECT  * FROM users WHERE LOWER(username)=:username";
    

    【讨论】:

    • 嗨,这是否意味着我不使用 ':username' 而使用 $_POST['username']。同时更改选择语句:$query = "SELECT * FROM users WHERE LOWER(username)=:username";。感谢您的帮助
    • 不,您想在查询中保留:username 并使用bindParam 方法来最大程度地减少SQL 注入攻击。
    • 我收到以下错误:致命错误:在第 27 行的 C:\xampp\htdocs\newlogin\authorise.php 中调用未定义的方法 Bcrypt::verify()。有问题的行是:if($bcrypt->verify($_POST['password'],$row['password'])),谢谢,如果你能帮助我真的很感激
    • 您的 bcrypt 对象不包含名为 verify 的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多