PHP表单插入具有动态输入的数据数组

时间:2018-08-17 08:56:37

标签: php jquery mysql arrays forms

使用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地址输入,我需要在数据库中创建一个新的唯一记录。如果添加了两个动态mac地址,则数据库表应如下所示;

+----+-------+---------+--------------+
| id | make  | model   | mac          |
+----+-------+---------+--------------+
| 1  | Apple | Macbook | 112233445566 |
+----+-------+---------+--------------+
| 2  | Apple | Macbook | 998877665544 |
+----+-------+---------+--------------+
| 3  | Apple | Macbook | 887766225533 |
+----+-------+---------+--------------+

我采用正确的方法吗?

2 个答案:

答案 0 :(得分:1)

关于大容量插入:您需要构建sql语句,例如 INSERT INTO table(make, model, mac) VALUES("Apple", "Macbook", 123456),("Apple", "Macbook", 245678),("Apple", "Macbook", 345678); 您可以从下面的代码块中获得构建语句的想法。 注意:还请确保清理$ make,$ model,$ mac变量Might help

$make = $_POST['make'];
$model = $_POST['model'];
$mac = $_POST['mac'];


$length = count($mac);
$values = [];
for ($i = 0; $i < $length; $i++) {
    $values[] = '("' . $make . '","' . $model . '",' . $mac[$i] .')';
}

$query = "INSERT INTO table(make, model, mac) VALUES". implode(",", $values);

答案 1 :(得分:0)

我为您提供解决方案。请使用Ajax和FormData。

首先,将类型更改为“提交到”按钮,然后将id设置到该按钮。

第二

window.close()