我正在构建一个小订单页面(基于JS和PHP),而且在处理表单数据时我有点困惑。在表单中,用户应该能够订购一个或多个产品,每个产品都有单选按钮形式的一些设置。为了使每个输入字段唯一,我添加了一个小的JS片段,使每个输入名称值不同(添加新产品时),如此 -
newUnit = newUnit.replace(/name="unitPrice/g, 'name="unitPrice' + i);
newUnit = newUnit.replace(/name="body/g, 'name="body' + i);
newUnit = newUnit.replace(/name="details/g, 'name="details' + i);
newUnit = newUnit.replace(/name="topShelf/g, 'name="topShelf' + i);
<div class="unit">
<input type="hidden" class="unitPrice" name="unitPrice" value="0" data-price="6900">
<div class="row">
<div class="col-sm-3">
<fieldset class="form-group options-body">
<legend>Body</legend>
<div class="form-check">
<label class="form-check-label">
<input type="radio" class="form-check-input" data-price="0" name="body" value="White Ash" checked>
White Ash
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input type="radio" class="form-check-input" data-price="0" name="body" value="Black Ash">
Black Ash
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input type="radio" class="form-check-input" data-price="800" name="body" value="Walnut">
Walnut (+800)
</label>
</div>
</fieldset>
</div>
</div>
</div>
<div class="unit">
<input type="hidden" class="unitPrice" name="unitPrice" value="0" data-price="6900">
<div class="row">
<div class="col-sm-3">
<fieldset class="form-group options-body">
<legend>Body</legend>
<div class="form-check">
<label class="form-check-label">
<input type="radio" class="form-check-input" data-price="0" name="body2" value="White Ash" checked>
White Ash
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input type="radio" class="form-check-input" data-price="0" name="body2" value="Black Ash">
Black Ash
</label>
</div>
<div class="form-check">
<label class="form-check-label">
<input type="radio" class="form-check-input" data-price="800" name="body2" value="Walnut">
Walnut (+800)
</label>
</div>
</fieldset>
</div>
</div>
</div>
(如果用户再添加1个产品,则运行JS的部分样本标记)
这非常适合在整个订单步骤中更新价格和设置,但是当我提交数据时,我不确定如何处理不同的产品,因为我不能循环它们,因为它们有不同的名称。 我打赌有更好的方法,任何想法/方向?
表单数据的示例
unitPrice=6900&unitPrice=6900&body%5B%5D=White%20Ash&details%5B%5D=Stainless%20steel&topShelf%5B%5D=Wood&firstName=&lastName=&email=&phone=&address=&city=&zip=&country=&firstName2=&lastName2=&email2=&phone2=&address2=&city2=&zip2=&country2=&totalPrice=13800
答案 0 :(得分:1)
我不打算提供完整的代码来解释如何做到,但解释已经足够了。您要做的是在提交之前修改发送到服务器的数据。您可以为每个字段创建4个数组,并在客户端使用相应的数据初始化它们(注意:也包括空值以维护顺序。)。然后将所有这些数组作为POST字段发送。这可以使用AJAX查询来处理帖子。在服务器端,您现在可以分别遍历每个阵列。这只是可以减少POST变量数量的答案之一,如果在服务器中设置了限制(可能是64并且用户CAN超出了!)。
希望这会有所帮助。如果你想要一个代码版本的评论,我会花更多的时间在它上面。
答案 1 :(得分:1)
您应该使用数组作为表单字段名称,例如unitPrice []而不是&#34;&#39; unitPrice&#39; +我&#34;你现在在做什么然后,您可以在php中迭代表单字段作为数组,例如$unitPrice = $_POST['unitPrice']
将为您提供一个单位价格数组,然后您可以使用foreach
进行迭代。这有意义吗?
答案 2 :(得分:0)
1)使用PHP创建字段而不是JavaScript可能更容易。
2)只需通过循环查看名称并存储它,例如到一个数组:
unitPrice = []; //create array
for($i = 0; $i < 10; $i++)
{
array_push(unitPrice,$_GET['unitPrice'.$i]); //push value into array
}