【发布时间】:2019-01-14 09:03:19
【问题描述】:
我有一个允许用户将设备添加到数据库的 html 表单。一个用户可以添加多个设备,有时设备之间唯一不同的字段是库存编号和MAC地址。
例如,他们可能想要添加 10 台具有相同硬件的戴尔 PC。他们可以动态添加 Inventory Number 和 MAC Address 字段,而不是让他们提交 10 个表单。
表单输入如下所示;
<form method="POST" action="">
<input type="text" name="make">
<input type="text" name="model">
<input type="text" name="inv[]">
<input type="text" name="mac[]">
<input type="submit" name="submit">
</form>
我可以提交表单,print_r($_POST) 的输出是;
Array
(
[make] => Dell
[model] => Optiplex
[inv] => Array
(
[0] => 1544778
[1] => 3344558
[2] => 1644758
[3] => 9844558
)
[mac] => Array
(
[0] => 8877445
[1] => 3311554
[2] => 7788445
[3] => 3214857
)
)
在上面的示例中,我需要在 mysql 数据库中创建 四个 单独的记录。
考虑到我需要遍历这些值并单独插入它们,我有以下 PHP;
$arr_inv = $_POST['inv'];
$arr_mac = $_POST['mac'];
for ($i = 0; $i < count($arr_inv); $i++) {
$sql = "INSERT INTO table (make, model, inv, mac)
VALUES ('" . $make . "', '" . $model . "', '" . $arr_inv[$i] . "','" . $arr_mac[$i];
$stmt = DB::exec($sql);
}
虽然这确实有效,并将 4 条单独的记录插入到数据库中,但这是最好的方法吗/如何提高效率?
请忽略代码中的任何安全漏洞,仍在处理中。任何建议表示赞赏。
【问题讨论】:
-
您可以使用
json_encode将其添加到数据库中。对于显示,您可以使用json_decode。 -
您应该始终使用安全查询,这一点不容忽视,因为您可能会忘记在发送到生产服务器之前进行准备。除此之外,您的代码还可以,但我认为应该发布在Code Review
-
如果您需要在 DB 中添加特定数据作为特定列,那么您可以使用 [PDO exec() 和 commit ][1] 。如果您不需要特定数据的特定列,您可以尝试 was hardik solanki 解释的。 [1]:w3schools.com/php/php_mysql_insert_multiple.asp
标签: php html mysql arrays forms