2011-11-14 6 views
0

私は配列を受け入れるために私のHTMLフォームを変更する必要があるこの前の投稿があります。 This postにはコードの詳細が記載されています。フォームの配列を読み取る

だから私は、次のような、それに応じてすべてのフォームを変更:

<select name="camera_type[]"> 

しかし、今私は、更新クエリを実行する方法についてこだわっています。今では、すべてを配列に格納するので、明らかにクエリをそのまま使用することはできません。ここに私が必要としているものと思われる投稿がありますが、わかりませんが、私は理解していません。Update MySQL table with an Array using Foreach

これ以上の助けになります。

+0

あなたはUPDATEクエリを実行すると、あなたはどのようなエラーを取得していますか?他の投稿にすべてのコードがあるようです。 – Homer6

答えて

1

提出された値にforeachloopを使用してください。次に、配列全体を繰り返し処理し、好きなようにクエリを構築することができます。

たとえば、ブラウザから送信された$ _POST ['camera_type']変数があります。あなたのPHPスクリプトでは、次の操作を行います。これをチェック配列をループしてUPDATEクエリを実行している理解するために

foreach($_POST['camera_type'] as $value) { 
    //do your processing. 
} 
+0

申し訳ありませんが、明確ではありませんでした。私は、提出された値にforeachループを追加しました。更新クエリを構築する方法がわからない。各ループで更新しますか?あまりにも効率が悪いと思われますか? – Tom

+0

合意したが、それは非効率的だと思われるが、それは唯一の方法だろう。 1つのUPDATEクエリを作成し、CUP引数を使用してタプルのIDフィールドに基づいてさまざまなフィードの値を設定する方法を知りたい場合を除きます。 –

+0

@TomPepernic Thoはその一般的な方法では効率が悪いかもしれません。 'POST ['camera_type']'は送信されたものだけを保持するので、重複する値はありません。したがって、より良い。 – footy

1

// first setup your MySQLi connection 
$db = new mysqli('localhost', 'user', 'pass', 'dbname'); 

if (mysqli_connect_errno()) { 
    printf("Connect failed: %s\n", mysqli_connect_error()); 
    exit; 
} 

// disable autocommit for transactions 
$db->autocommit(false); 

// **EDIT** forgot to escape input data. fixed now. note the mysqli_real_escape_string() and int type casting 
foreach ($_POST['camera_type'] as $type) { 
    // assuming 'id' is set in the POST array 
    $query = sprintf(
     'UPDATE table SET column = "%s" WHERE id = %d', 
     $db->real_escape_string($type), 
     (int) $_POST['id'] 
    ); 
    $db->query($query); 
} 

// commit transactions (or commit the updates that were run) and then close 
$db->commit(); 
$db->close(); 
+0

なぜあなたはIDをエスケープしないのですか? –

+0

hmm oopsはそれを逃した。一定。ありがとう! ...なぜこれは控除されたのですか? –

+0

のため、SQLインジェクションがまだ残っています。 idをエスケープするか、引用符で囲むのではなく、intにキャストする必要があります。 –

関連する問題