与这一点混淆。
基本上,我在表中有一列,我想检索该列中特定行的值。
我有一组有效的代码,但在这种情况下却没有。
我的代码是:
$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']设置为其他变量吗?
有人可以提供他们的指导吗?
干杯
编
答案 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'
测试失败。