Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Foreach值来自表单的POST_Php_Post_While Loop - Fatal编程技术网

Php Foreach值来自表单的POST

Php Foreach值来自表单的POST,php,post,while-loop,Php,Post,While Loop,我将一些数据从一个表单发布到另一个页面。这是一个购物车,根据购物车中的商品数量,提交的表单在页面上生成。例如,如果只有1个项目,那么我们只有字段名'item_name_1',它应该存储一个值,如“贴纸”和'item_price_1',它存储该项目的价格。但是如果有人有5个项目,我们需要'item_name_2'、'item_name_3'等来获取每个项目直到第五个项目的值 通过循环这些项来获取值的最佳方法是什么 这是我的东西,显然不起作用 extract($_POST); $x = 1; //

我将一些数据从一个表单发布到另一个页面。这是一个购物车,根据购物车中的商品数量,提交的表单在页面上生成。例如,如果只有1个项目,那么我们只有字段名'item_name_1',它应该存储一个值,如“贴纸”和'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++;

}
我对这种用法还比较陌生,所以我不完全清楚如何处理它

谢谢。

使用类似数组的字段:

<input name="name_for_the_items[]"/>

我不会这样做的

我会在表单元素中使用名称数组

所以我会得到布局

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

然后,您可以先执行数组切片以获取所需的数量,请不要使用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
}

如果必须解析post键,并且这些键是包含数据的序列,则可以尝试以下操作:

Post数据示例:Storeitem | 14=data14

foreach($_POST as $key => $value){
    $key=Filterdata($key); $value=Filterdata($value);
    echo($key."=".$value."<br>");
}
foreach($\u发布为$key=>$value){
$key=Filterdata($key);$value=Filterdata($value);
echo($key.=“$value.”
”); }

然后,您可以使用strpos来隔离密钥的结尾,将数字与密钥分隔开来。

这与问题无关,但您不应该在$\u POST上使用extract,正如PHP手册中强调的那样:这对我有用。非常感谢。使用$item变量,我如何在同一个循环中获得item_price的值?我希望能够打印每个项目的项目名称、项目价格和项目数量。@scatterbomb:使用诸如
项目[1][name]
项目[1][price]
项目[2][name]
项目[2][price]
等名称<代码>变量转储($\u POST)查看结果。@Dr.Molle:如果我有多个表单,但要提交不同表单的值,post只返回最后一个表单,该怎么办value@logan:您不能在一个请求中提交多个表单。您需要在提交表单之前合并表单(可以通过javascript在客户端完成)@Dr.Molle:我提出了一个关于处理多个表单POST值的查询。请你在这里回答好吗?谢谢我倾向于莫勒博士的例子,但我很欣赏大家对extract()的了解。我已经从代码中删除了它。我也更喜欢POST数组。@阿尔普:如果我有多个表单&想要提交不同表单的值,POST只返回最后一个表单,该怎么办value@logan:不可能同时提交多个表格。但是您可以使用Javascript收集所有数据,并向服务器发送自定义ajax请求。或者将所有内容放在一个表单中。@Alp:我提出了一个关于处理多个表单POST值的查询。请你在这里回答好吗?
foreach($_POST as $key => $value){
    $key=Filterdata($key); $value=Filterdata($value);
    echo($key."=".$value."<br>");
}