在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']
但是当您要插入多行时,这不起作用。有人可以指点我在正确的方向吗?
答案 0 :(得分:3)
你可以使用php数组,所以你可以
<input type="text" name="name[]" value="">
请注意名称后添加的方括号。你可以在表单中有多个这样的实例,然后在php中引用它:
$_POST['name'][$i]
其中$ i是索引数组中值的变量。
因此,您可以将插入语句更改为
行$sql = 'INSERT INTO \'tablename\' (\'column1\', \'column2\') VALUES';
for ($i=0; $i<count($_POST['name']); $i++) {
$sql .= '(\'' . $_POST['name'][$i] . '\', \'' . $_POST['something'][$i] . '\')';
if ($i<count($_POST['name']) - 1) {
$sql .= ',';
}
}
假设您的表单中有第二个输入类型,称为“某事”,其定义为
<input type="text" name="something[]" value="">
答案 1 :(得分:1)
@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();
}
}