我正在尝试使用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>
答案 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";