2013-02-18 41 views
1

我有一個頁面,其中有多個名爲 - name ='phonenumber []的輸入。我正在發送一個表單到另一個頁面,我希望能夠用新的發佈信息編輯數據庫。我應該如何編寫代碼,以便例如填充第三個輸入,並在發送表單後,僅編輯表中的第三行。我tryed這樣,但它不會工作:php array keys/editing db

if ($_POST['phonenumber'] || $_POST['phonetype']) 
{ 
    foreach($_POST['phonenumber'] as $k => $phonenumber) { 
    $phonetype = $_POST['phonetype'][$k]; 
    $n = $k+1; 
mysql_query("UPDATE phone SET phone_number='$phonenumber', phone_type='$phonetype' WHERE id_user='$id' LIMIT $n"); 
    } 
} 

這樣,所有的電話號碼獲取與信息編輯從第3個輸入POST發送。我究竟做錯了什麼?

+0

你能調試$ k是什麼嗎? – ndrix 2013-02-18 09:55:57

+0

如果你想更新一行中的一列,你應該能夠選擇具有一些唯一標識符的行。如果你沒有該標識符的解決方案是最好的,刪除並再次添加。 – zamil 2013-02-18 10:06:41

回答

0

看起來像你的問題後,兩種解決方案可以做到

  1. 如果電話號碼是由像列phone_id單獨識別,然後發送POST數據,並通過此更新。

    mysql_query("UPDATE phone SET phone_number='$phonenumber', phone_type='$phonetype' WHERE id_user='$id' AND phone_id = '$phone_id' ");

  2. 如果不是,然後刪除存在id_user所有的電話號碼,然後通過POST數據重新插入。

+0

看起來像第一個解決方案是一個。謝謝。但是,如何通過URL傳遞兩個id? – echo 2013-02-18 10:09:03

+0

我認爲最好的辦法就是改變你的html字段名稱,就像']」;'然後在POSTED數據中,你可以在foreach循環中獲得phone id通過按鍵和按值更新數字。 – 2013-02-18 10:22:47

1

這是因爲您的電話號碼不能單獨識別(我的猜測);在每一個循環中,你都用下一個值更新N行,最後所有條目都會有最後一個值。

相反,刪除所有電話號碼並重新插入它們通常更容易。

DELETE FROM phone WHERE id_user=? 

// for loop 
INSERT INTO phone (phone_number, phone_type) VALUES (?, ?) WHERE id_user=? 

另外,如果您的電話號碼有自己的ID,包括在WHERE語句時您執行UPDATE;你一定要刪除LIMIT

最後,查看準備好的語句(使用pdo或mysqli);您當前的代碼容易受到sql注入攻擊!

+0

謝謝,他們有自己的ID,我忘了把它們放在WHERE子句中。 – echo 2013-02-18 13:40:04