2013-04-30 54 views
0

嘿,我通常抓住AJAX發送JS做這個物件常PHP POST通過JavaScript發送對象字面

$_POST['called'] 
$_POST['chk1'] 
etc etc... 

但現在我有我不能似乎找到了一個問題解決方案。

根據多少複選框被選中,我環路(使用JS)來查看所有檢查箱子,並將它們添加到最終看起來像這樣的JS對象:

doBulk = { 
    called: "Approved", 
    chk0: "1789156857", 
    chk2: "5134465673753", 
    chk3: "234123554646", 
    chk10: "25511545542"   
}; 

現在chkXX能是0-19的任何數字(因此每頁20個複選框)。我發送到我的PHP頁面很好,但我不確定如何去循環獲取所需的數據來更新數據庫。

$chk1 = $_POST['chk0']; 
$chk2 = $_POST['chk1']; 
$chk3 = $_POST['chk2']; 
$chk4 = $_POST['chk3']; 
$chk5 = $_POST['chk4']; 
$chk6 = $_POST['chk5']; 
$chk7 = $_POST['chk6']; 
$chk8 = $_POST['chk7']; 
$chk9 = $_POST['chk8']; 
$chk10 = $_POST['chk9']; 
$chk11 = $_POST['chk10']; 
$chk12 = $_POST['chk11']; 
$chk13 = $_POST['chk12']; 
$chk14 = $_POST['chk13']; 
$chk15 = $_POST['chk14']; 
$chk16 = $_POST['chk15']; 
$chk17 = $_POST['chk16']; 
$chk18 = $_POST['chk17']; 
$chk19 = $_POST['chk18']; 
$chk20 = $_POST['chk19']; 

我可以做很多的如果比其他來檢查,看看是否每個人都有數據,但有一定是這樣做的更好的辦法?

因此,如果我正在做一個批量MySQL的更新,那麼我將不得不運行一個查詢每個複選框,我有一個值爲上面?是否還有更好的方法來更新所有需要在一個記錄中的記錄?

$result = mysql_query("UPDATE userAccount SET Accept = 1 WHERE ID = " . $chk1 . ""); 

謝謝!

UPDATE

foreach($_POST as $key => $value) 
{ 
    // $key = CHK1-20 
    // $value = XXXXXXXXX 
    $dbBuilder = $value . ", " . $dbBuilder; 
} 

$dbBuilder = '(' . $dbBuilder . ')'; 

$result = mysql_query("UPDATE userAccount SET Accept = 1 WHERE ID in $dbBuilder"); 

回答

1

您可以在ID的一個在SQL子句中傳遞。所以,舉例來說,你將有:

UPDATE userAccount SET Accept = 1 WHERE ID in $idCollection 

其中$ idCollection將所有的ID檢查,用逗號和括號內分離出來的,就像這樣:

(1, 2, 3) 

對於循環,你可以遍歷像在任何其他數組中那樣通過$ _POST數組,並使用讀取的值填充此字符串。

希望幫助

+0

你可以再次檢查我的OP,我只是用新的代碼更新它,看看我是否在正確的軌道上。 – StealthRT 2013-04-30 02:02:20

+0

是的,你是!讓我知道這是否可行 – 2013-04-30 02:06:08

+0

此外,請確保您添加了正確的ID,因爲您正在遍歷整個$ _POST數組,您可能會得到您不期望的值 – 2013-04-30 02:07:16

0
for ($i=1;$i<=20;$i++){ 
${'chk'."$i"}=$_POST["chk"."$i"]; 
} 

對於UPDATE,我認爲你可以使用Mysql create procedure這樣

$query=mysql_query("CREATE PROCEDURE dorepeat(p1 INT) SET $i = 0; REPEAT SET @i = @i + 1; UPDATE userAccount SET Accept = 1 WHERE ID = ${'chk'."$i"}; UNTIL @i =p1 END REPEAT; END") or (die mysql_error()); 
$result=mysql_query("CALL dorepeat(20)") or (die mysql_error()); 

編輯:也許這是不使用CREATE PROCEDURE更好。

for ($i=1;$i<=20;$i++){ 
    ${'chk'."$i"}=$_POST["chk"."$i"]; 
    $exp.=${'chk'."$i"}.','; 
} 
$exp=substr($exp,0,-1); 
$exp='('.$exp.')'; 

$query=mysql_query("UPDATE userAccount SET Accept = 1 WHERE ID IN '$exp') or (die mysql_error()); 
+0

謝謝你的回覆,埃米爾! – StealthRT 2013-04-30 14:32:02