我可以使用下面的方法将多行添加到我的数据库中
$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 数组,所以你就这么做了
<input type="text" name="name[]" value="">
注意名称后面添加的方括号。您可以在表单中拥有多个实例,然后在 php 中将其引用为:
$_POST['name'][$i]
其中 $i 是一个变量,索引数组中的值。
@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();
}
}