请帮我调试这段代码

时间:2011-11-03 15:09:49

标签: php mysql

与这一点混淆。

基本上,我在表中有一列,我想检索该列中特定行的值。

我有一组有效的代码,但在这种情况下却没有。

我的代码是:

$qry="SELECT * FROM logins WHERE username='$login' AND password='$password'";
$result=mysql_query($qry);

这显然会检索该特定行,然后:

$member = mysql_fetch_assoc($result);
$_SESSION['SESS_MEMBER_ID'] = $member['User ID'];

这成功设置了会话变量,作为此行中用户ID列的值。

这很好,这很有效。我在新情况下尝试使用的代码是:

$qry = "SELECT * FROM vote WHERE Username = '" .$_SESSION['SESS_USERNAME']. "'";
$result = mysql_query($qry);

这将根据当前用户获取行,然后:

 while($row = mysql_fetch_array( $result )) 
 { 
 Print "<b>Name:</b> ".$row['Username'] . " <br>"; 
 Print "<b>Vote:</b> ".$row['Vote'] . " "; 
 } 

while循环正常工作,它显示当前用户名及其投票。显然我觉得循环不是必需的,因为我已经选择了一行。移除循环打破了它,所以我把它放回去。没什么大不了的,如果能完成任务,我可以忍受。

我关注的问题是使用

$row['Username']

在这个if语句中:

 if($row['Username'] == "Admin") {
 echo ("Win!<br />");
 }
 else {
 echo "Failed!";
 }

从上面的循环打印时,它会打印:

 Name, as Admin, 
and vote, as 0. 

如果我然后尝试使用if语句进行验证,我要求它回显Win!如果用户名==管理员。

显然它是真的,因为它之前已经将它打印在线上,然而,它总是骄傲失败!我无法理解为什么。

我应该将$ row ['Username']设置为其他变量吗?

有人可以提供他们的指导吗?

干杯

2 个答案:

答案 0 :(得分:1)

问题源于你的循环:

while($row = mysql_fetch_array( $result )) 
 { 
 Print "<b>Name:</b> ".$row['Username'] . " <br>"; 
 Print "<b>Vote:</b> ".$row['Vote'] . " "; 
 } 

第一次,$row设置为数据库中的数据行。然后它再次尝试遍历循环,但由于只有一行,mysql_fetch_array返回false。现在$row设置为false。因此,循环之后的任何代码都将无法访问数据。

解决方案是用简单的if语句替换你的循环:

 if ($row = mysql_fetch_array( $result )) 
 { 
   Print "<b>Name:</b> ".$row['Username'] . " <br>"; 
   Print "<b>Vote:</b> ".$row['Vote'] . " "; 
 } 

答案 1 :(得分:0)

我无法看到您的PHP代码如何产生“打印”样本。但是,请检查您的Username字段实际上是否包含确切的“管理员”字符串。它可能有一个换行符或其他空格。做一个

var_dump($row['Username']);

应该显示类似

的内容
string(5) Admin

括号内的数字(5)是字符串的长度。如果它不是5,那么你在字符串中有一些额外的东西导致== 'Admin'测试失败。