【发布时间】:2019-01-24 06:47:40
【问题描述】:
我正在使用 PHP 构建一个 web 表单,它允许人们提交注册到他们的网络设备的详细信息,这些详细信息保存在 mysql 数据库中。我想允许用户在同一个表单上提交多个设备。
我需要收集的详细信息是;
- 制作
- 型号
- mac地址
用户可能需要注册 20 个相同的设备,即相同的品牌和型号,唯一会改变的字段是 mac 地址。而不是要求用户提交 20 个单独的表单,我有一个按钮“添加类似设备”,使用 JQuery 这会创建一个 new mac 地址输入(数组类型)。
一切都按预期工作,但我不确定我是否以“正确的方式”做这件事,所以我希望得到一些建议 - 我的代码如下;
HTML
<form id="myForm" method="POST" action="">
<input id="make" name="make" type="text">
<input id="model" name="model" type="text">
<input id="mac[]" name="mac[]" type="text">
<!-- example of two dynamically added mac inputs
<input id="mac[]" name="mac[]" type="text">
<input id="mac[]" name="mac[]" type="text">
-->
<input id="submit" name="submit" type="submit">
</form>
<button class="add-similar" id="add-similar" type="button"></button>
JQuery
<script>
$(document).ready(function() {
var maxField = 10;
var addButton = $('.add-similar');
var html = '<input id="mac[]" name="mac[]" type="text">';
var x = 1;
$(addButton).on('click', function(e) {
if (x < maxField) {
x++;
$(wrapper).append(html);
}
});
});
</script>
PHP
if(isset($_REQUEST["submit"])){
$make = $_POST['make'];
$model = $_POST['model'];
$mac = $_POST['mac'];
for ($i = 0; $i < count($mac); $i++) {
// insert data into db
}
}
对于动态添加的每个额外的 mac 地址输入,我需要在 db 中创建一个新的、唯一的记录。如果添加两个动态mac地址,db表应该是这样的;
+----+-------+---------+--------------+
| id | make | model | mac |
+----+-------+---------+--------------+
| 1 | Apple | Macbook | 112233445566 |
+----+-------+---------+--------------+
| 2 | Apple | Macbook | 998877665544 |
+----+-------+---------+--------------+
| 3 | Apple | Macbook | 887766225533 |
+----+-------+---------+--------------+
我的方法正确吗?
【问题讨论】:
-
您应该删除 id:
id="mac[]",因为 id 必须是唯一的,并且自动依赖 id 的任何功能都会被破坏。 -
使用批量插入,向数据库发送一个请求而不是 N 个请求是一种很好的做法。您可以使用循环来构建批量插入查询。 Bulk Insert
-
如果一个设备有多个 MAC 怎么办?
-
在下面查看我的答案,您可以从中得到一个想法。 @TheOrdinaryGeek
标签: php jquery mysql arrays forms