2011-11-03 99 views
-1

与此混淆的一点。请帮我调试这个代码

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

我有一套工作的代码,但不是在这种特殊情况下。

我有工作的代码是这样的:

$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']设置为其他变量吗?

任何人都可以提供他们的指导吗?

干杯

+1

将您的同时改为if。 – pritaeas

+0

你的循环不应该像你所显示的那样输出。请仔细检查您发布的代码 – Raptor

+0

奇怪,它应该可以工作。像@pritaeas所说的,改变一个if和另一个显示mysql_error()的方法。 – 2011-11-03 15:19:51

回答

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'] . " "; 
} 
+0

这个伎俩!谢谢!无论如何,我可以彻底删除if语句,并将该值设置为一个我可以使用的变量? – Eds

+0

别担心,我从if语句中设置变量!再次感谢! – Eds

0

我看不出你的PHP代码可能会产生“它打印”样本。但是,请检查您的Username字段实际上是否包含确切的“Admin”字符串。它可能有换行符或其他空格。做一个

var_dump($row['Username']); 

应该显示类似

string(5) Admin 

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