表单用户名和数据库用户名不同意,即使它们是相同的

时间:2014-09-11 17:37:08

标签: php mysql blowfish

我正在尝试使用blowfish,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>

2 个答案:

答案 0 :(得分:0)

您的查询中不需要单引号

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

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

答案 1 :(得分:0)

您的查询错误

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

在LOWER函数中使用单引号本质上是询问MySQL参数username是否等于文字字符串用户名而不是名为username的列。 IE如果$_POST['username']等于&#34; robbert&#34;,则您的查询询问robbert = username。不,它等于罗伯特。表格也是如此。要么使用反引号,要么根本没有引号。

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

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