2011-12-21 21 views
2

我想更新我的數據庫中的一些條目,基本上我計算在前一頁中選中的複選框的數量,並將它們與25相乘,然後將該值添加到數據庫中的當前值。插入到數據庫中,echo顯示正確的值,UPDATE將其倍增?

這是我的代碼:

<?php 
    if($_POST['code_approve']) 
    { 
    for($i=0;$i<count($_POST['checkbox']);$i++) 
    { 
     $approval_id = $checkbox[$i]; 
     $checkboxCount = count($_POST['checkbox']); 
     $countx25 = $checkboxCount * 25; 
     $sql = "UPDATE table SET status='approved', used='processed' WHERE id='$approval_id'"; 
     $sql2 = "UPDATE members SET balance = balance+'$countx25'"; 
     $result2 = mysql_query($sql2); 
     $result = mysql_query($sql); 
    } 
    if($result) 
    { 
     echo "$countx25"; 
    } 
    } 
?> 

看來,由於某種原因,它是將其插入到MySQL之前乘以$ countx25與複選框數量。這if($result){echo "$countx25";}}總是讓我看到正確的價值。

如果我選擇1它打印25,2打印50,3打印75等等,但對於MySQL部分,如果我選擇1它將25添加到當前值,2添加100,3添加225?!

這裏有什麼錯誤?

+0

哦,不,除非'3 * 25 = 225' :-) – user990767 2011-12-21 17:41:08

回答

1

正如我在我的評論中所述。您正在爲通過$ _POST獲取的每個複選框運行此操作。如果您使用count來計算複選框,爲什麼還要使用for循環。刪除for循環,它將按照你的意圖工作。

+0

+1:好點丹。 – hakre 2011-12-21 23:58:56

3

在您的SQL查詢:

$sql2 = "UPDATE members SET balance = balance+'$countx25'"; 

你不告訴的數據庫行要更新的,因此,所有行被更新。當你測試時,你首先測試一次,然後再測試一次,所以它可能會增加你不期望的字段。可能這是你的問題。

要指定要更新哪一行,請使用WHERE clause­Docs

若要防止多次更新同一個字段,請僅執行一次查詢。

+0

嘿,只有1行中的數據庫,所以我認爲這並不重要,但對於爲了完成,我添加了'WHERE member_id ='2''(這是唯一的一行),但是這並沒有解決問題,但:-( – user990767 2011-12-21 17:36:36

+3

@ user990767:這是因爲你很明顯爲你通過$ _POST superglobal只需刪除for循環... theres沒有意義吧 – Dan 2011-12-21 17:38:38

+1

如果你爲了調試目的輸出你執行的實際SQL查詢,你可以使用PHPMyAdmin(或類似的)來測試獨立於你的腳本是什麼SQL查詢d OES。這也可以幫助找到問題。然後你寫的關於該行的內容是正確的,但請記住,每個查詢都會添加該值,這也是[TomS編寫的](http://stackoverflow.com/a/8593937/367456)。 **和**正確地縮進你的代碼,然後你看到Dan如何寫入,你正在循環中執行查詢(多次)。所以你多次添加它。 – hakre 2011-12-21 17:39:08

1

代碼中的for循環是問題。我想在這裏你試圖使用前一頁中的所有複選框,因爲你的代碼循環了所有複選框,所以如果有4個複選框,for循環將運行4次。所以請確定你想要做什麼。

這是你的代碼。

<?php 
if($_POST['code_approve']) 
{ 
    for($i=0;$i<count($_POST['checkbox']);$i++) 
    { 
     $approval_id = $checkbox[$i]; 
     $checkboxCount = count($_POST['checkbox']); 
     $countx25 = $checkboxCount * 25; 
     $sql = "UPDATE table SET status='approved', used='processed' WHERE id='$approval_id'"; 
     $sql2 = "UPDATE members SET balance = balance+'$countx25'"; 
     $result2 = mysql_query($sql2); 
     $result = mysql_query($sql); 
    } 
    if($result) 
    { 
     echo "$countx25"; 
    } 
} 

?>