将两个输入连接在一起(文本和隐藏)?

时间:2013-02-14 10:04:07

标签: php html

我在下面有一个显示数量框的循环,其中包含一个包含产品名称的隐藏字段。

我希望将它们捆绑在一起,这样如果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 } } ?>

我想将这两者结合在一起,以便回应以下内容:

  • 1 x Product One
  • 10 x产品三
  • 20 x产品八

如果数量大于零,我该如何输出数量和产品名称?


这是使用的实际代码:

    <?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;

3 个答案:

答案 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及其值保证一致。

需要相应地审查客户端和服务器端代码。