0

PHPでは、以下を使用してデータベースに複数の行を追加できます

$sql = 'INSERT INTO 'tablename' ('column1', 'column2') VALUES
    ('data1', 'data2'),
    ('data3', 'data4'),
    ('data5', 'data6'),
    ('data7', 'data8');
';

しかし、データベースに複数の行を追加できるフォームを作成する方法を理解することはできません。

以前は、一度に1行ずつ追加したいだけで、フォームでこのようなことを行うことができました。

<input type="text" name="name" value="">

そして私のphpで以下

$_POST['name']

ただし、複数の行を挿入する場合は機能しません。誰かが私をここで正しい方向に向けてくれませんか?

4

2 に答える 2

5

あなたはphp配列を使うことができるので、あなたはそうします

<input type="text" name="name[]" value="">

名前の後に追加された角括弧に注意してください。フォームにこれの複数のインスタンスを含めることができ、phpで次のように参照できます。

$_POST['name'][$i]

ここで、$ iは、配列内の値にインデックスを付ける変数です。

于 2012-07-02T22:18:01.497 に答える
2

@HexAndBugsの答えは、クエリ内のテーブル名と列を誤って引用していることです。バックティックは、これらの一重引用符を置き換える必要があります。とはいえ、構文が修正されたとしても、クエリは依然として安全ではなく不安定です。のようなエントリをSeamus O'Brien使用すると、スクリプトが失敗します。もちろん、クエリはより不吉なインジェクション攻撃に対して脆弱です。その答えは、いかなる理由であれ、だれにも使用されるべきではありません。

フォームに名前フィールドのみが含まれていると仮定した場合の完全なソリューションは次のとおりです。

<input type="text" name="name[]">
<input type="text" name="name[]">
...repeat as many times as you like inside the form

送信はデータベースにデータを書き込むことを目的としているため、POSTが適切な方法です。(GETは、データベースからデータをフェッチ/読み取ることを目的としている場合にのみ使用してください。)

送信受信スクリプトで、次のスニペットを使用して次のことを行います。

  1. nameデータを含む提出物があったことを確認してください。
  2. 安定性/セキュリティのために、バインドされたパラメータと反復実行を含むプリペアドステートメントを使用します。要件がわからないため、サニタイズの手順は含めませんが、データベースデータをクリーンな状態に保つために、サニタイズの手順を含めることをお勧めします。

コード:

if (!empty($_POST['name'])) {
    $conn = new mysqli("localhost", "root", "", "yourDB");  //apply your credentials
    $stmt = $conn->prepare("INSERT INTO `tableName` (`name`) VALUES (?)");
    $stmt->bind_param('s', $name);
    foreach ($_POST['name'] as $name) {
        // to sanitize the name string, perform that action here
        // to disqualify an entry, perform a conditional continue to avoid the execute call
        $stmt->execute();
    }
}
于 2020-02-11T22:52:00.237 に答える