循环使用相同名称的输入数组

时间:2014-11-19 09:18:51

标签: php arrays

我正在制作一个待办事项列表,除了这一件事,我已经完成了所有工作。我需要循环通过表单提交的输入,这些输入具有相同的名称,因此我所做的是将它们存储为数组。现在我需要遍历它们,以便我可以逐个将它们发送到数据库中。这是我试过的:

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,输入标有红色:

inputs

但它似乎没有用,它没有给我任何错误,所以我没有什么可继续的。我在哪里错了?

4 个答案:

答案 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)来验证你正在使用的是什么。