我在下面有一个显示数量框的循环,其中包含一个包含产品名称的隐藏字段。
我希望将它们捆绑在一起,这样如果100个输入中的用户改变了输入数量90,那么就希望隐藏的字段输入90与它相关联。
然后,这为我提供了大于零的项目的数量和产品名称。
<?php if(get_field('sizes')) {
while(the_repeater_field('sizes')) { ?>
<input type="text" name="quantity[]" value="0"> <?php the_title(); ?>
<input type="hidden" name="product[]" value="<?php the_title(); ?>">
<?php } } ?>
我想将这两者结合在一起,以便回应以下内容:
如果数量大于零,我该如何输出数量和产品名称?
这是使用的实际代码:
<?php if(get_field('sizes')) { ?>
<?php while(the_repeater_field('sizes')) { ?>
<tr>
<td width="150"><p><?php echo the_sub_field('size'); ?></p></td>
<td width="30" align="right">
<p>
<input type="text" class="quantity" name="quantity[]" style="width:15px;text-align:center!IMPORTANT;margin-left:10px;" value="0">
<input type="hidden" class="productinput" name="product[]" value="<?php echo the_title(); ?> - <?php echo the_sub_field('size'); ?>"></td>
</p>
</td>
</tr>
<?php } ?>
<?php } else { ?>
<tr>
<td width="150"><p>Quantity</p></td>
<td width="30" align="right">
<p>
<input type="text" class="quantity" name="quantity[]" style="width:15px;text-align:center!IMPORTANT;margin-left:10px;" value="0"><?php echo the_sub_field('size'); ?>
<input type="hidden" class="productinput" name="product[]" value="<?php echo the_title(); ?>">
</p>
</td>
</tr>
<?php } ?>
然后创建准备好在电子邮件中输出的代码:
$quantities = array_combine($_POST['product'], $_POST['quantity']);
foreach ($quantities as $product => $quantity) {
if ($quantity > 0) {
$productresults = "$quantity x $product";
}
}
This是我正在处理的页面。如果单击“获取报价”,则第二步是上面的代码。
@ Sn0opy
foreach($_POST['quantity'] as $check) {
if($check > 0) {
$quantityresults .= $check."\n";
}
}
echo $quantityresults;
答案 0 :(得分:2)
您显然需要串联迭代这两个数组,以便您可以查看产品的数量是否为非零,以便决定是否应该显示它。
一般来说foreach
对于这项工作来说是一个尴尬的工具,走的方法是使用for
循环并使用相同的计数器索引到两个数组中。但是,在这种特定情况下,您可以轻松地将两个数组转换为键,其中键是产品名称,数量是使用array_combine
的值:
$quantities = array_combine($_POST['product'], $_POST['quantity']);
然后,您可以使用foreach
轻松迭代:
foreach ($quantities as $product => $quantity) {
if ($quantity > 0) {
echo "$quantity x $product<br>";
}
}
答案 1 :(得分:2)
我建议在数量数组中使用产品ID,如下所示:
<input type="text" name="quantity[<?php the_title(); ?>][]" value="0">
Ofc,这不是您正在寻找的答案,而是一个应该也可以使用的备用版本。
答案 2 :(得分:1)
通过发布独立的quantities[]
和products[]
,您依赖于彼此保形的两个序列 - 即。两者都按DOM顺序序列化 - 因此$_POST['quantity']
和$_POST['product']
的索引逐个元素对应。对我来说,这不是一个完全安全的假设 - 请参阅选定的答案here。
每个产品有一个<input>
字段,以product-id表示和表示数量的值命名,这样会更安全,更常规。因此,产品ID及其值保证一致。
需要相应地审查客户端和服务器端代码。