2011-11-03 79 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'測試失敗。