2011-11-08 32 views
0

大家好,這是我的第一篇文章堆棧overflow.com 我想創建購物車。值將存儲在二維表中的會話中。第一個值表示數據庫中的項目標識,第二個項目數量。從購物車使用unset()刪除項目創建mysql錯誤

foreach($cart_array as $row){ 
    $sql = "SELECT * FROM prod_table WHERE id=".$row['0'].""; 
    $cart_result = mysql_query($sql, $conn); 
    while ($array = mysql_fetch_array($cart_result)) { 
     echo "<tr><td>". $array[manufacturer] . "</td>"; 
     echo "<td>". $array[model]."</td>"; 
     echo "<td>".$row['1']."</td>"; 
     $cart_value = $array[price]*$row['1']; 
     //sum and store value of all products 
     $total_cart_value += $cart_value; 
     echo "<td>&pound;" .$cart_value. "</td>"; 
     echo "<td><a href='search.php?kick_id=".$row['0']."'>Remove</a></td></tr>"; 

OK,除去項目形式車用戶點擊刪除,然後他被髮回到同一頁面(由於某種原因,我有困難使用$ _ SERVER [「PHP_SELF」}用GET方法... ) 然後觸發不同部分的代碼,它將使用未設置的函數從$ cart_array中刪除一對值。

if(isset($_GET['kick_id'])) { 
    $t = count($cart_array); 
    for($u = 0; $u < $t; $u++){ 
     if ($cart_array[$u]['0'] == $_GET['kick_id']){ 
      unset($cart_array[$u]['0']); 
      unset($cart_array[$u]['1']); 
      echo " Item has been removed from your cart"; 
      $cart_array = array_values($cart_array); 

,它實際上消除對值,但是,現在不是流暢的運行它會顯示錯誤消息: 警告:mysql_fetch_array():提供的參數不是一個有效的MySQL結果資源...... 我假設有必須在會話數組中導致錯誤的一些「跟蹤」刪除值。 如何修復代碼? 是否有任何其他方法/方法來刪除值?

回答

0

可用任何結果我認爲......

那是你做錯了。
程序員不應該「假設」。程序員可以(也應該)是某些
假設會讓你誤入歧途,浪費你的時間(以及其他人在你提問時的時間)。

所以,你必須做一些調試 - 調查找到的實際原因的問題。 supplied argument is not a valid MySQL result resource錯誤表示查詢中存在錯誤。所以,你必須看到它是什麼錯誤。因此,以讓您看到發生的任何錯誤的方式運行所有的查詢。最簡單的方法是

$cart_result = mysql_query($sql, $conn) or trigger_error(mysql_error()." in ".$sql); 

並再次運行您的代碼。
你會發現一個sql錯誤在他們平常的地方 - 一個屏幕或日誌文件。

如果您無法獲得錯誤的含義並自己更正代碼 - 現在可以提出問題了。一個確定而直接的問題,不是模糊的問題,出於的假設。疑難雜症?

1

您似乎沒有unset($cart_array[$u]),只是它包含的兩個鍵。不要打擾未設置$cart_array[$u]['0']'1',只是未設置$cart_array[$u]

+0

這幫助 - 謝謝你。 –

0

有兩種方法來解決這個問題:你的第一個部分

1):

foreach($cart_array as $row){ 
    if(empty($row[0]) 
    continue; 
    $sql = "SELECT * FROM prod_table WHERE id=".$row['0'].""; 
    [...] 

2)當您刪除的項目,而不是取消設置($ cart_array [$ U] [」 0' ]);你爲什麼不unset($ cart_array [$ u]); ?

0

也許這

while ($array = mysql_fetch_array($cart_result)) { 

引起的問題。基於你看到的錯誤。您嘗試獲取結果前檢查是否有通過

if(mysql_num_rows($cart_result)>0){ 
    while ($array = mysql_fetch_array($cart_result)) { 
//rest code here 
} 
+0

是啊php是說它是這行代碼。然而,如果購物車是空的,還有另一部分代碼正在銷燬會話 - 這很好,所以問題是不顯示空購物車。感謝您的輸入 –

+0

好的,但如果是這一行,查詢結果必然有問題,因爲如果該foreach循環被觸發,他仍然試圖獲取cart_result。我沒有看到完整的代碼,這就是爲什麼即時猜測知道; o)你是否嘗試echo $ sql來查看查詢的外觀,在這個錯誤之前? – Kokers