php - 如何使用 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 表中
解决方案
当您插入 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
}
推荐阅读
- python - 两个集合不相等,但在转换为列表并转换回集合后相等
- java - 无法从 Firestore 获取数据
- c# - Task.Run vs Task.Factory.StartNew - 没有发生预期的死锁
- reactjs - 复选框更新值仅适用于 false 到 true,不适用于 true 到 false、React、mongoDB
- javascript - 从非反应类中使用反应路由器
- r - R:如何过滤列,只要它包含值的组合?
- amazon-web-services - 如何在 Appsync graphql 中为订阅者发布事件
- python - 根据对列中每个不同值具有特定条件的行计算 Pandas Dataframe 中的 perc
- postman - 如何使用 or 和 And 条件验证邮递员中的布尔值
- python - Python 如何解析 Amazon RDS 数据服务的输出