我将一些数据发布到表单中的另一个页面。这是一个购物车,并且根据购物车中的商品数量,在页面上生成正在提交的表单。例如,如果只有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++;
}
我对这种用法还是比较新的,所以我并不完全是最好的处理方式。
感谢。
答案 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';
然后你可以做一个数组切片来获得你需要的数量