如何使用PHP脚本处理ajax表单参数

时间:2010-08-20 23:24:43

标签: php arrays forms

我一直在开发一个动态生成的表单,它将类似下面示例的多个项目传递给PHP脚本。

<div class="menu-item">
<input type="text" value="3" readonly="readonly" class="quantity" name="quantity">
<input type="text" value="Menu Item 3" readonly="readonly" class="item" name="item">
<input type="text" value="80.00" readonly="readonly" class="price" name="price">
</div>
...etc

我的问题是因为我没有为namequantityitem提供price属性作为唯一标识符我正在通过这些参数传递到服务器端:

quantity=3&item=Menu+Item+3&price=80.00&quantity=2&item=Menu+Item+2&price=50.00&quantity=1&item=Menu+Item+1&price=30.00&total=370.00&name=Alex&table=10&terms=on

我可以很容易地改变它,所以name s将是quantity1,item1,price1,quantity2,item2,price2等,但无论哪种方式,我都不确定如何最好地使用PHP循环这些参数集所以我可以确保处理与项目对应的每个quantityitemprice

谢谢, 亚历

3 个答案:

答案 0 :(得分:6)

如果您将quantity[]item[]price[]等字段命名,PHP会将它们组合成一个以每个事物命名的数组。只需确保页面上的所有数量,商品和价格都采用相同的顺序(并且没有一个跳过字段),$_POST['quantity'][0]将是第一个数量,$_POST['price'][0]第一个价格,等

答案 1 :(得分:0)

我通常做的是以下内容:

使用以下名称生成表单:quantity-x,item-x,price-x;

这是你处理它的方式:

$values = array();
foreach($_POST AS $key => $value ){
$keyPart = explode('-',$key);
$values[$keyPart[1]][$keyPart[0]] = $value
}

这将生成一个数组,其中每个元素都包含一个包含分组值的数组。因此,元素0将是[数量-1,价格-1,项目-1],1将是[数量-2,价格-2,项目-2]

这种方式的价值在于您无需跟踪元素的顺序。由于唯一标识符可以直接链接到数据库主键。在下行方面,您将不得不重复两次。

编辑:这也适用于$ _GET

答案 2 :(得分:0)

假设您只有通过GET进入的变量,这将是一种方式:

//number of fields/item
$fields = 3;
$itemCount = count($_GET) / $fields;

for ($i = 1; i <= $fields; i++) {
     $quantity = $_GET['quantity'.i];
     $item = $_GET['item'.i];
     $price = $_GET['price'.i];
     processFields($quantity, $item, $price);
}