2011-02-11 95 views
0

此代码的工作在我的电脑上,但是当我在我的虚拟主机的服务器上运行它,它没有。输出是“密码不正确或电子邮件”,即使我使用的是正确的密码。我想我现在已经把密码错误,但这些代码不会输出$ R [“电子邮件”]或$ R [“passwordHash”],在while循环的顶部。如果我在$ sql上使用mysql_result,那么我会得到数据,所以mysql_fetch_array必须发生一些奇怪的事情。我在这里错过了些什么,或者这更可能是我应该与我的主持人的支持人员解决的一个独特问题?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"; 
     }  
    } 
+3

'$ passwordHash`是什么? – BoltClock 2011-02-11 16:53:50

回答

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"; 
     }  
    } 
1

使用$sql = mysql_query($query) or die (mysql_error())来检查查询是否有问题。

另外,你可以试试mysql_fetch_assoc(因为我看到你最喜欢使用关联数组),以排除mysql_fetch_array可能的错误(我怀疑你可以试试看)。

而且检查$email不是空的。如果它通过消毒传递给函数(因为它应该有被放到查询之前),看看有没有什么功能实际上已经返回的值或空或空字符串。

而且,顺便说一句,你为什么使用while循环?您是否应该使用相同的电子邮件地址获取多个记录(和密码)?