@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は、データベースからデータをフェッチ/読み取ることを目的としている場合にのみ使用してください。)
送信受信スクリプトで、次のスニペットを使用して次のことを行います。
name
データを含む提出物があったことを確認してください。
- 安定性/セキュリティのために、バインドされたパラメータと反復実行を含むプリペアドステートメントを使用します。要件がわからないため、サニタイズの手順は含めませんが、データベースデータをクリーンな状態に保つために、サニタイズの手順を含めることをお勧めします。
コード:
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();
}
}