2013-09-26 86 views
0

我有下面的代碼來從數據庫中檢索行,但是如果我在'assign_id_input'中輸入數據庫中不存在的id,它將不會執行else語句並顯示'Error 」。else else語句問題

$assign_id_input = $_POST['assign_id_input']; 

$search_assign_user_id = mysql_query("SELECT * FROM free_ebook WHERE useid = $assign_id_input;")or die(mysql_error()); 

while($assign_user_id_array = mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) { 
    $filtered_assign_user_id_array = array_filter($assign_user_id_array); 

    if(count($filtered_assign_user_id_array) > 0) { 
     echo 'No Error'; 
    } 
    else{ 
     echo 'Error'; 
    } 
} 
+2

請縮進代碼。 –

+1

使用var_dump()來檢查你的查詢返回到數組中,並啓發你將會! – Borniet

+0

驚訝的沒有人提出了關於注入和庫的觀點,所以:請不要嘗試和修復安全性,所以從開始就不要將'POST'變量直接放入查詢中。它是不可信的數據,可能包含各種東西(比如SQL命令)。此外,你使用一個廢棄的庫(mysql *)。查看關於這些功能的所有手冊頁上的BIG紅色錯誤(您檢查過手冊頁,是嗎?) – Nanne

回答

0

您的代碼是沒有鋸齒,稍undreadable,但在我看來,問題是,你在while循環分配。我想你應該使用這個。

while($assign_user_id_array == mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) { 
+0

這不是問題。這是一種獲取表格行的方法。如果mysql_fetch_array回退FALSE,while循環將被關閉。 – beniamin

0

你的錯誤是沒有顯示,因爲您的代碼將不會進入while循環,因爲 $search_assign_user_id中有0行,所以mysql_fetch_array()將返回FALSE

如果您的查詢返回任何行,您應該檢查mysql_num_rows(),之後您可以輸入while循環。

$assign_id_input = $_POST['assign_id_input']; 

$search_assign_user_id = mysql_query("SELECT * FROM free_ebook WHERE userid = $assign_id_input;")or die(mysql_error()); 

if (mysql_num_rows($search_assign_user_id) > 0) { 

    while($assign_user_id_array = mysql_fetch_array($search_assign_user_id, MYSQL_ASSOC)) { 
     $filtered_assign_user_id_array = array_filter($assign_user_id_array); 
     echo 'No Error'; 
    } 
} else { 
    echo 'Error'; 
} 
+1

哦,我明白了。多謝兄弟。 –

0

使用mysql_affected_rows() while循環之前

+0

請閱讀php手冊。 mysql_affected_rows()被棄用,它只能在INSERT,UPDATE,REPLACE或DELETE上不在SELECT上。 http://php.net/manual/en/function.mysql-affected-rows.php – Chris

+0

它以下面的方式爲我工作$ sql =「Select * From abc」; $ result = mysql_query($ sql)或(「!sql」); 如果(mysql_affected_rows()) { echo「hi」; } else { echo「bye」; } – rohitr

+0

它可能有些工作,但它返回的價值肯定不是你真正想要的價值。並且爲了將來的使用,這個函數被解壓縮並將被刪除。 – Chris