来自表单的POST的Foreach值

时间:2011-03-29 23:09:07

标签: php post while-loop

我将一些数据发布到表单中的另一个页面。这是一个购物车,并且根据购物车中的商品数量,在页面上生成正在提交的表单。例如,如果只有1个项目,那么我们只有字段名称“item_name_1”,它应该存储“Sticker”和“item_price_1”之类的值,用于存储该项目的价格。但如果有人有5个项目,我们需要'item_name_2','item_name_3'等来获取每个项目的值,直到第五项。

循环使用这些项来获取值的最佳方法是什么?

这就是我所拥有的,显然不起作用。

extract($_POST);

$x = 1; // Assuming there's always one item we're on this page, we set the variable to get into the loop

while(${'item_name_' .$x} != '') {

echo ${'item_name' .$x};

$x++;

}

我对这种用法还是比较新的,所以我并不完全是最好的处理方式。

感谢。

4 个答案:

答案 0 :(得分:46)

首先,请不要使用extract(),这可能是一个安全问题,因为它很容易操作POST参数

此外,您不必使用变量变量名称(听起来很奇怪),而是:

foreach($_POST as $key => $value) {
  echo "POST parameter '$key' has '$value'";
}

为了确保您只有以'item_name'开头的参数,您可以这样检查:

$param_name = 'item_name';
if(substr($key, 0, strlen($param_name)) == $param_name) {
  // do something
}

答案 1 :(得分:22)

使用类似数组的字段:

<input name="name_for_the_items[]"/>

您可以遍历字段:

foreach($_POST['name_for_the_items'] as $item)
{
  //do something with $item
}

答案 2 :(得分:1)

如果必须分析您的帖子键,并且键是包含数据的序列,则可以尝试以下操作:

发布数据示例:Storeitem | 14 = data14

foreach($_POST as $key => $value){
    $key=Filterdata($key); $value=Filterdata($value);
    echo($key."=".$value."<br>");
}

然后您可以使用strpos隔离键的末尾,将数字与键分开。

答案 3 :(得分:0)

我不会这样做

我在表单元素

中使用名称数组

所以我得到了布局

$_POST['field'][0]['name'] = 'value';
$_POST['field'][0]['price'] = 'value';
$_POST['field'][1]['name'] = 'value';
$_POST['field'][1]['price'] = 'value';

然后你可以做一个数组切片来获得你需要的数量