我正在制作一个待办事项列表,除了这一件事,我已经完成了所有工作。我需要循环通过表单提交的输入,这些输入具有相同的名称,因此我所做的是将它们存储为数组。现在我需要遍历它们,以便我可以逐个将它们发送到数据库中。这是我试过的:
if (isset($_POST['submit'])) {
$labelValues = $_POST['labelValue[]'];
$i = 0;
while($i < sizeof($labelValues)) {
$stmt = $db->prepare("INSERT INTO tenta_table (text) VALUES (:text)");
$stmt->bindParam(':text', $labelValues[$i]);
$stmt->execute();
$i++;
}
}
HTML,输入标有红色:
但它似乎没有用,它没有给我任何错误,所以我没有什么可继续的。我在哪里错了?
答案 0 :(得分:3)
如果您已正确命名输入,$_POST['labelValue']
已经是数组,那么<input type="text" name="labelValue[]" />
会创建一个类似于您的POST中名为labelValue的数组。
从那里你应该能够使用你当前的代码进行一次小改动
if (isset($_POST['submit'])) {
$labelValues = $_POST['labelValue'];
$i = 0;
while($i < sizeof($labelValues)) {
$stmt = $db->prepare("INSERT INTO tenta_table (text) VALUES (:text)");
$stmt->bindParam(':text', $labelValues[$i]);
$stmt->execute();
$i++;
}
}
上面我已将$labelValues
更改为$_POST['lableValue']
而不是$_POST['labelValue[]']
答案 1 :(得分:1)
在您的情况下,只有最后一个输入元素可用。
如果您想要多个具有相同名称的输入,请使用name="foo[]"
作为输入名称属性。然后$_POST
将包含foo的数组,其中包含输入元素的所有值。
<form method="post">
<input name="a[]" value="foo"/>
<input name="a[]" value="bar"/>
<input name="a[]" value="baz"/>
<input type="submit" />
</form>
如果您不使用$_POST
,[]
仅包含最后一个值的原因是因为PHP基本上只会爆炸并覆盖原始查询字符串以填充$_POST
。当遇到已存在的名称/值对时,它将覆盖前一个名称/值对。
但是,您仍然可以像这样访问原始查询字符串:
$rawQueryString = file_get_contents('php://input'))
假设你有一个这样的表格:
<form method="post">
<input type="hidden" name="a" value="foo"/>
<input type="hidden" name="a" value="bar"/>
<input type="hidden" name="a" value="baz"/>
<input type="submit" />
</form>
$ rawQueryString
将包含a=foo&a=bar&a=baz
。
然后,您可以使用自己的逻辑将其解析为数组。一个天真的方法是
$post = array();
foreach (explode('&', file_get_contents('php://input')) as $keyValuePair) {
list($key, $value) = explode('=', $keyValuePair);
$post[$key][] = $value;
}
然后会为查询字符串中的每个名称提供一个数组数组。
或者这个
的最佳和最简单的方法<form method="post">
<input name="a[0]" value="foo"/>
<input name="a[1]" value="bar"/>
<input name="a[2]" value="baz"/>
<input type="submit" />
</form>
答案 2 :(得分:0)
你应该替换
$labelValues = $_POST['labelValue[]'];
通过
$labelValues = $_POST['labelValue'];
答案 3 :(得分:0)
不确定,但据我记得它应该是$ labelValues = $ _POST ['labelValue']。我认为你的$ labelValues为空,你甚至不进入你的循环。你应该做一个var_dump($ _POST)来验证你正在使用的是什么。