2015-08-28 110 views
0

我有多個輸入字段具有相同的名稱,ID和其他領域與其他的名字,如更新在一個循環中的SQL多行

<input name="id[]" value="1" /> <input name="st[]" value="4" /> 

<input name="id[]" value="5" /> <input name="st[]" value="57" /> 

<input name="id[]" value="79" /> <input name="st[]" value="43" /> 
          . 
          .  
          . 

在我的SQL表我想改變...也許id-> 3和id-> 87或其他10個用右側輸入字段的值更新列「st」的值。 id和st的關鍵值是相同的。 我知道一行的update-sql-syntax。但是,如果我想更多的行,我不知道該怎麼辦

我的理由是這樣做的jQuery的Ajax或PHP內爆類似

$id = implode(',', $_POST['id']); 
$st = implode(',', $_POST['st']); 
$sql = "UPDATE table SET st=('$st') WHERE id=('$id')"; 

後來我發現這個從用戶peterm

UPDATE table 
    SET st = CASE id 
         WHEN 'id_x' THEN 'st_x' 
         WHEN 'id_y' THEN 'st_y' 
         ... 
         ELSE st 
         END 
WHERE id IN('id_x', 'id_y', ...); 

我如何得到它自發地從我的網站用戶在一個循環(foreach?)

+0

什麼是代碼中的** st **? – aldrin27

+0

最好做在PHP中的foreach,而不是在mysql中。在執行注射更新語句之前,請不要忘記檢查您的數據。 – Daniel

+0

** st **只是一個像id列一樣的列名。 – kuki

回答

2

我希望它c解決你的問題。您可以使用如下代碼:

if(!isset($_POST['id'] || count($_POST['id']) == 0){ 
    return; 
} 

foreach($_POST['id'] as $key => $id)){ 
    $sql = "UPDATE table SET st='{$_POST['st'][$key]}' WHERE id='{$id}'"; 
} 
+0

這工作完美!非常感謝 – kuki

0
$SizeOfID=sizeof($id); 

for($i=0;$i<$SizeOfID;$i++) 
{ 
    $IDvalue=$id[$i]; 
    $STvalue=$st[$i]; 

    mysql_query("UPDATE table SET st='$STvalue' WHERE id='$IDvalue'"); 
} 
+0

你能解釋一下你的解決方案嗎? – Reeno