1

数量ボックスを表示し、製品名を含む非表示フィールドを含むループが下にあります。

これらを結び付けて、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 } } ?>

これら2つを結び付けて、次のようにエコーしたいと思います。

  • 1x製品1
  • 10x製品3
  • 20x製品8

数量がゼロより大きい場合にのみ、数量と製品名を出力するにはどうすればよいですか?


これは実際に使用されるコードです。

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

これは私が取り組んでいるページです。「見積もりを取得」をクリックすると、2番目のステップは上記のコードです。


@ Sn0opy

foreach($_POST['quantity'] as $check) {
    if($check > 0) {
        $quantityresults .= $check."\n";
    }
}

echo $quantityresults;
4

3 に答える 3

2

表示するかどうかを決定するために、製品の数量がゼロ以外であるかどうかを確認できるように、両方の配列をタンデムで反復する必要があることは明らかです。

一般foreachに、このジョブには厄介なツールであり、forループを使用して、同じカウンターを使用して両方の配列にインデックスを付ける方法があります。ただし、この特定のケースでは、2つの配列を1つに簡単に変換できます。ここで、キーは製品名であり、数量は次を使用して値ですarray_combine

$quantities = array_combine($_POST['product'], $_POST['quantity']);

その後、次のように簡単に繰り返すことができますforeach

foreach ($quantities as $product => $quantity) {
    if ($quantity > 0) {
        echo "$quantity x $product<br>";
    }
}
于 2013-02-14T10:09:48.887 に答える
2

次のように、数量配列で製品IDを使用することをお勧めします。

<input type="text" name="quantity[<?php the_title(); ?>][]" value="0"> 

多くの場合、これはあなたが探していた答えではありませんが、同様に機能するはずの代替バージョンです。

于 2013-02-14T10:10:37.777 に答える
1

ロブ、あなたには良い答えがあると思いますが、あなたは重大な問題に気づきたいと思うかもしれません。

quantities[]独立して投稿することによりproducts[]、2つのシリアル化が互いにコンフォーマルであることに依存しています。両方ともDOMの順序でシリアル化されているため、およびのインデックスは$_POST['quantity']要素ごとに$_POST['product']対応しています。私にとって、これは完全に安全な仮定ではありません-ここで選択された答えを参照してください

<input>product-idの表現と数量を表す値で名前が付けられた、製品ごとに1つのフィールドを持つ方がはるかに安全で、より一般的です。したがって、製品IDとその値は対応することが保証されています。

クライアント側とサーバー側のコードは、それに応じて確認する必要があります。

于 2013-02-16T03:22:08.480 に答える