PHP如何在多个项目上获取Form变量?

时间:2012-02-19 18:01:05

标签: php forms multidimensional-array for-loop

我需要收集购物车的表单元素。这些项目是倍数。我希望收集它们作为会话或易于使用的数组 - 我认为数组会是最好的吗?

如何在process.php中收集此信息?

我希望我已经说清楚了。

每个项目的代码都是这样的:

<div class="product" id="pId_'.$id.'">

<input type="hidden" name="productID" value="'.$id.'" />
<input type="hidden" name="productURL" value="'.$url.'" />
<input type="hidden" name="productQty" value="'.$qty.'" />
<input type="hidden" name="productPrice" value="'.$price.'" />

</div>

因此使用购物车可以:

<div class="product" id="pId_2">
<input type="hidden" name="productID" value="2" />
<input type="hidden" name="productURL" value="site.com" />
<input type="hidden" name="productQty" value="1" />
<input type="hidden" name="productPrice" value="750" />
</div>
<div class="product" id="pId_45">
<input type="hidden" name="productID" value="45" />
<input type="hidden" name="productURL" value="example.co.uk" />
<input type="hidden" name="productQty" value="2" />
<input type="hidden" name="productPrice" value="100" />
</div>

这些详细信息会提交给表单..但是,当productID被调用两次或更多时,我如何收集?

6 个答案:

答案 0 :(得分:1)

如果您只是需要收集项目以便稍后处理,另一种方法是循环遍历所有POST变量。 PHP将收集提交到保留变量$ _POST。

的所有信息

从那里你可以使用foreach来循环收集如下的信息;

foreach ($_POST as $key => $value)
{
    echo "$key = $value";
}

其中$ key将是您的someitem_,$ value将包含提交的实际值。

如果您的表单中除了购物车项目之外没有任何其他输入,这将更容易工作,如果不是,您将不得不做一些逻辑来确定哪些是与您的购物车项目相关联的记录

另一方面,如果可以将3个相关的输入值合并为1,并将值与您定义的字符(可能类似<item>|<name>|<url>)分开,则可能会让您的生活更轻松试图获得与id相关的所有3个值。

在这种情况下,您的代码只会获取特定ID的字符串值,并在“|”上执行split()把它分解成3个值。

答案 1 :(得分:0)

我相信你的process.php形式,你可以在拉入帖子数据时将它们存储在一个数组中。您需要将$ id的最大值作为值传递,这样您就可以遍历适当数量的项目。

process.php的顶部可能看起来像

  <?php

    $processArray = array();
    $id = $_POST["id"];
    $i = 0;

    while ($i <= $id) {

    $processArray = ('item' => $_POST["someitem"_.$i], 'name' => $_POST["somename"_.$i], 'url' => $_POST["someurl"_.$i]):

    //Now you can do what you want with each value. Display it somewhere, store it somewhere, etc.

$i++;

    }

我做到了这一点,但是当我看到你的问题时,这就是我想到的。

答案 2 :(得分:0)

如果在输入名称中添加方括号

<input type="hidden" name="productID[]" value="' . $id . '" />
<input type="hidden" name="productURL[]" value="' . $url . '" />
<input type="hidden" name="productQty[]" value="' . $qty . '" />
<input type="hidden" name="productPrice[]" value="' . $price . '" />

然后,您可以通过将以下PHP代码添加到 process.php 文件来收集和使用所有表单数据

foreach ($_POST['productID'] as $key => $getid) {
    $getqty   = $_POST['productQty'][$key];
    $getprice = $_POST['productPrice'][$key];
    $geturl   = $_POST['productURL'][$key];

    // Example MySQL Query
    mysql_query("INSERT INTO orders (id, url, quantity, price) VALUES ('" . $getid . "', '" . $geturl . "', '" . $getqty . "', '" . $getprice . "')");
}

这样做会自动为表单数据创建数组,这样您就可以使用上面的PHP代码通过$key变量使用索引号从每行收集正确的数据。

答案 3 :(得分:-1)

我不完全确定你在问什么。但是,如果字段名称附加了[],则可以从array检索$_POST

<input name="myArray[1]" value="foo" />
<input name="myArray[37]" value="bar" />

会给你

array(
    1 => 'foo',
    37 => 'bar'
)

答案 4 :(得分:-2)

<form action="process.php" method="post">
These elements are looped pending on cart items
<input type="hidden" name="someitem['.$id.']" value="1" size="1" maxlength="1" />
<input type="hidden" name="somename['.$id.']" value="1" size="1" maxlength="1" />
<input type="hidden" name="someurl['.$id.']" value="1" size="1" maxlength="1" />
</form>

答案 5 :(得分:-2)

使用:

<input type="hidden" name="someitem[]" value="1" size="1" maxlength="1" />

然后在PHP $_GET["someitem"]中将是一个数组

编辑:使用$_POST["someitem"]。由于问题的标题,我原以为你需要GET。