1

name_$i のような名前の複数のフィールドがあり、「送信時」にそれらすべてをデータベースに送信する方法を見つけようとしています。問題は、フォームがループされ、挿入がフォーム内のフィールドの数に適応できる必要があることです。これを行う方法はありますか?

<?php

$fldcnt = $_POST['fldcnt'];
$i = $_POST['i'];

for ($i = 0; $i < $fldcnt; $i++){
$NAME = $_POST['name_$i'];
$AGE = $_POST['age_$i'];
$ADDRESS = $_POST['address_$i'];
$TELEPHONE = $_POST['telephone_$i'];
$EMAIL = $_POST['email_$i'];



$q_register_new_users = "insert into registration set
        NAME = '$NAME',
        AGE = '$AGE',
        ADDRESS = '$ADDRESS',
        TELEPHONE = '$TELEPHONE',
        EMAIL = '$EMAIL'";

    mysql_query($q_new_products,$connection) or die(mysql_error());


};
?>"
4

4 に答える 4

2

HTML と PHP

field を呼び出すだけで、入力フィールドを配列に入力できますname[]。そのようです:

<input name="name[]" />

次に、PHP を使用して、次のようにフィールドをループできます。

foreach($_POST['name'] as $key=>$value){
    // Insert the value of the form field into a string or query
    // i.e. build the query
    $query .= $value;
}

// Then execute the query for each set of fields

上記の論理は実際には正しくありませんが、私の言いたいことが理解できるはずです。

MySQL

SQL 構文が正しくありません。MySQL データベースに挿入するための正しい構文は次のとおりです。

INSERT INTO `table` (`field_1`, `field_2`)
VALUES ('value_1', 'value_2')

ご注意ください

非推奨が差し迫っているため、関数の使用mysql_は非常に推奨されません。代わりに、現在ほとんどの PHP プログラマーは PDO / SQLite クラスを使用しています。これらは複雑に見えるかもしれませんが、実際には非常に単純であり、SQL ステートメントを実行するためのはるかに安全な方法を提供します。

  1. PDO
  2. SQLite
于 2012-12-11T13:45:57.763 に答える
0

これを行うには、配列を使用するのが最善の方法です。しかし、それでもカウンターを持って行きたい場合は、

for($i = 0;isset($_POST["name_{$i}"]);$i++)
{
 // name found
}

name_xxフィールドがチェックボックスから取得されている場合、このコードは最適ではない可能性があることに注意してください。ユーザーが項目を選択し、その間にいくつかをスキップしました。

PS。コメントを投稿しましたが、回答として適しています。

于 2012-12-15T19:36:16.160 に答える
0

ステートメントの構文は次のINSERTようになります。

 INSERT INTO registration (NAME , AGE , ADDRESS, TELEPHONE, EMAIL)
 VALUES ('$NAME', '$AGE', '$ADDRESS','$TELEPHONE', '$EMAIL')

ただし、上記のクエリは で脆弱ですSQL INJECTION。以下の記事を読んで、それから保護する方法を学んでください。

于 2012-12-11T13:38:05.460 に答える
0

コードの構造を維持する場合は、アポストロフィの代わりに二重引用符を使用する必要があります

$NAME = $_POST["name_$i"];

または変数を出力する

$NAME = $_POST['name_'.$i];
于 2012-12-11T13:46:37.797 に答える