您是否知道在这个简单的代码中导致警告消息的原因是什么?
if(isset($_POST['remember']))
{
$query_cookie = ("SELECT id FROM users WHERE email = '$email' OR username = '$username'");
$result_cookie = mysql_query($query);
$row_cookie = mysql_fetch_array($result_cookie); // LINE 36
$id = $row_cookie; // Will be hashed before using
setcookie( "Remember", $id, strtotime( '+30 days' ) );
echo $id;
}
这是我得到的错误:
警告:mysql_fetch_array()要求参数1为资源,布尔值在第36行的C:\ xampp \ htdocs \ Signup \ includes \ login.php中给出
我遇到的另一个问题是我的查询。基本上我有一个带三个输入的登录表单:一个用于用户名,一个用于电子邮件,一个用于密码。我希望用户能够使用他的用户名或密码登录。然而,查询看起来有点奇怪,我想知道它是否会按预期工作,因为最终查询将以这样的结尾:
SELECT id FROM users WHERE email = 'user@host.com' OR username = ''
或者相反。我猜这个查询不是完全正常的。如果你有任何建议,我愿意接受建议。
$ id与$ row_cookie atm相同,因为$ id将被哈希。如果我做一个简单的$id = sha1(md5($row_cookie));
会不会好的?
我知道MySQL已经折旧了。我很快就会切换到MySQLi,所以不用担心。
正如您所看到的,实际上有三个问题。如果这是一个问题,请在降级之前告诉我,以便我可以编辑我的问题。谢谢!
答案 0 :(得分:2)
将$ query_cookie更改为$ query。
尝试:
$result_cookie = mysql_query($query_cookie);
您在mysql_query()语句中引用了$ query。该变量不存在。
答案 1 :(得分:2)
来自the docs
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回FALSE。
在尝试从中提取记录之前,您应该始终检查mysql_query
来电的结果是否不是false
。
您还将错误的变量传递给mysql_query
来电。您的SELECt位于$query_cookie
,您正在通过$query
。
答案 2 :(得分:1)
你犯了一个小错误:
$query_cookie = ("SELECT id FROM users WHERE email = '$email' OR username = '$username'");
$result_cookie = mysql_query($query_cookie);
$row_cookie = mysql_fetch_array($result_cookie);
答案 3 :(得分:1)
假设电子邮件或用户名字段是唯一的,并且您拒绝可能的SQL注入,请尝试:
if (isset($_POST['remember'])) {
$query_cookie = ("SELECT id FROM users
WHERE email = '$email' OR username = '$username'");
$result_cookie = mysql_query($query_cookie);
if ($result_cookie) {
$row_cookie = mysql_fetch_array($result_cookie);
$id = $row_cookie['id'];
setcookie("Remember", $id, strtotime('+30 days'));
echo $id;
}
}
获取结果后获取id
尝试:$row_cookie['id']
。
我建议使用bcrypt
进行散列。它是一种可通过硬件扩展的散列算法。
查看更多信息:
答案 4 :(得分:1)
试试这个:
change $id = $row_cookie[id]; instead of $id = $row_cookie;
答案 5 :(得分:0)
检查是否退回记录。
if(isset($_POST['remember']))
{
$query_cookie = ("SELECT id FROM users WHERE email = '$email' OR username = '$username'");
$result_cookie = mysql_query($query);
if($result_cookie === FALSE) {
echo "Could not successfully run query ($query) from DB: " . mysql_error();
exit;
}
$row_cookie = mysql_fetch_array($result_cookie); // LINE 36
$id = $row_cookie; // Will be hashed before using
setcookie( "Remember", $id, strtotime( '+30 days' ) );
echo $id;
}