1

name='phonenumber[] という名前の複数の入力を含む 1 つのページがあります。フォームを別のページに送信していますが、新しい投稿情報でデータベースを編集できるようにしたいと考えています。たとえば、3 番目の入力を入力し、フォームを送信した後、テーブルの 3 行目のみが編集されるように、コードをどのように記述すればよいでしょうか。私はこのように試しましたが、うまくいきません:

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 から送信された情報で編集されます。私は何を間違っていますか?

4

2 に答える 2

1

これは、あなたの電話番号が個人を特定できないためです (私の推測です)。ループごとに次の値で N 行を更新し、最後にすべてのエントリに最後の値が含まれます。

通常は、すべての電話番号を削除して再度挿入する方が簡単です。

DELETE FROM phone WHERE id_user=?

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

または、電話番号に独自の ID がある場合は、 ;WHEREを実行するときにその ID をステートメントに含めます。UPDATEを必ず削除する必要がありLIMITます。

最後に、準備済みステートメント (pdo または mysqli を使用) を調べます。あなたの現在のコードは、SQL インジェクション攻撃の影響を受けやすいです!

于 2013-02-18T09:51:10.083 に答える
0

あなたの質問のように見えた後、2つの解決策を実行できます

  1. 電話番号が phone_id 列のように個別に識別できる場合は、これを介してその POST DATA と Update を送信します。

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

  2. そうでない場合は、id_user に存在するすべての電話番号を削除し、POST データによって再挿入します。

于 2013-02-18T09:55:53.143 に答える