此代码适用于我的计算机,但是当我在我的网站主机服务器上运行它时,它却没有。输出是“密码或电子邮件不正确”,即使我使用的密码正确。我以为我在密码上犯了一个错误,但代码不会在while循环的顶部输出$ r ['email']或$ r ['passwordHash']。如果我在$ sql上使用mysql_result,我会得到数据,所以必须在mysql_fetch_array中发生一些奇怪的事情。我在这里遗漏了什么,或者这更可能是我应该与我的主持人的支持人员讨论的一个独特问题?
$query = "SELECT * FROM users WHERE user='$email'";
$sql = mysql_query($query);
while($r = mysql_fetch_array($sql)) {
echo $r['email'];
echo $r['passwordhash'];
if($passwordHash == $r['passwordhash']) {
$_SESSION['user_id'] = $email;
echo "started session";
}
else {
echo "Incorrect password or email";
}
}
答案 0 :(得分:1)
使用$sql = mysql_query($query) or die (mysql_error())
检查查询是否出错。
或者,您可以尝试mysql_fetch_assoc
(因为我看到您最常使用关联数组),以排除mysql_fetch_array的可能“错误”(我怀疑这一点,但您可以尝试一下)。< / p>
并检查$email
是否为空。如果它通过一个清理函数(在放入查询之前它应该有),看看该函数是否实际返回了一个值,还是只返回NULL或空字符串。
而且,顺便说一下,你为什么要使用while循环?您是否应该使用相同的电子邮件地址获取多个记录(和密码)?
答案 1 :(得分:0)
快速检查的一件事是计算机上的PHP和MySQL版本与Web服务器相比。你是如何处理哈希的,因为这也可能导致问题。
您是否在做类似以下的事情?
$password = md5($password);
如果是这样,您是否在Web服务器端正确转换?
$password = $_POST['password'];
$passwordHash = md5($password);
unset($password);
$query = "SELECT * FROM users WHERE user='$email'";
$sql = mysql_query($query);
while($r = mysql_fetch_array($sql)) {
echo $r['email'];
echo $r['passwordhash'];
if($passwordHash == $r['passwordhash']) {
$_SESSION['user_id'] = $email;
echo "started session";
}
else {
echo "Incorrect password or email";
}
}