创建具有可重复字段的 HTML 表单,并将表单提交作为多行插入数据库

问题描述 投票:0回答:2

我可以使用下面的方法将多行添加到我的数据库中

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

但是我不知道如何创建一个允许我向数据库添加多行的表单。

过去,当我只想一次添加一行时,我可以在表单中执行类似的操作。

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

以及我的 PHP 中的以下内容

$_POST['name']

但是当你想插入多行时这不起作用。有人可以在这里指出正确的方向吗?

php loops mysqli sql-insert submission
2个回答
5
投票

你可以使用 php 数组,所以你就这么做了

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

注意名称后面添加的方括号。您可以在表单中拥有多个实例,然后在 php 中将其引用为:

$_POST['name'][$i]

其中 $i 是一个变量,索引数组中的值。


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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.