首页 > 解决方案 > 如何使用 POST 处理在 php 中动态生成的多个输入字段

问题描述

这是 html/php 代码

<form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
    <div id="input">
        <label for="package">Package</label>
        <input type="text" name="package[]">
        <label for="price">Price</label>
        <input type="text" name="price[]">
        <input type="button" value="add" onClick="addInput('input');">
        <input type="submit" name="submit" value="Add Package">
    </div>
</form>

这是JS

function addInput(parentDiv) {
    let newInput = document.createElement('div');
    newInput.innerHTML = '<label for="package">Package</label> <input type="text" name="package"> <label for="price">Price</label> <input type="text" name="price"></input>';
    document.getElementById(parentDiv).appendChild(newInput);
}

允许用户添加尽可能多的输入。我想将它们捕获在一个数组中,以包为键,价格为值并保存到 sql 表中

标签: phphtml

解决方案


当您插入 HTML 时,您为所有内容赋予了相同的名称。然后提交时,Web 服务器不太确定您想要哪一个,因此它只使用这些值中的 1 个 - 在您的情况下,它似乎是最后一个。

如果您更改控件的名称以添加[]到末尾(例如<input type="text" name="package[]">),则服务器会将其视为一个数组,您可以获得所有值。

如果您随后var_dump($_POST)从您的 PHP 中执行此操作,您应该会看到一组包装和价格的值。然后,在服务器端,我们可以遍历这些。

for($i = 0; $i < count($_POST['package']); $i++){
    $package = $_POST['package'][$i];
    $price = $_POST['price'][$i];
    //do whatever you want with variables here
}

推荐阅读