0

在 php 中,我可以使用以下命令将多行添加到我的数据库中

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

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

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

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

以及我的php中的以下内容

$_POST['name']

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

4

2 回答 2

5

你可以使用php数组,所以你这样做

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

请注意名称后添加的方括号。您可以在表单中有多个 this 实例,然后在 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 回答