0

検索しましたが、この問題の解決策を得ることができませんでした。

私は、不明な数のアイテムを生成し、ユーザーが各アイテムに対してドロップダウンから数量を選択するアプリケーションに取り組んでいます。例えば。

Item(s) | price | Select qty
Rice     23      3
Beans    22      4
Eggs     52      5

...
...
...
unknown

上記を配列に取り込み、選択したすべてのアイテムと対応する料金の合計値を計算するにはどうすればよいですか?

次の HTML コードがあります。

<form id='form1' name='form1' method='post' action='item_calc.php'>
<?php
    .....
while($t_row = mysql_fetch_assoc($get_items)) {

echo "<p><label>$t_row['$item_name']
<input type='text' READONLY name='item_price[]' value='$t_row['$item_price']' /></label>
<input type='text' READONLY name='item_fees[]' value='$t_row['$item_fee']' /> 
<select name="item_qty">
<option value="1">
<option value="2">
<option value="3">
<option value="4">
<option value="5">
</select>
</p><p>";

}

        echo "<label><input type='submit' name='submit'  value='Submit' /></label></p>
         </form>";

選択したすべてのアイテムの item_price[] + item_fees[] * item_qty を取得するにはどうすればよいですか?

これは私が試したことです:

for ($i = 0; $i < count($_POST['item_price']); $i++) {
   // Do something here with $_POST['checkbx'][$i]



   foreach ($_POST['item_fees'] as $tkey => $tvalue) {
    //echo "Key: $tkey; Value: $tvalue<br>";
   }


   foreach ($_POST['item_price'] as $pkey => $pvalue) {
    //echo "Key: $pkey; Value: $pvalue<br>";
   }

   $total = $tvalue + $pvalue;


}
echo $total;
4

4 に答える 4

2

料金と価格をフォームに入力せず、POST リクエストから読み取ることをお勧めします。html インジェクションやポスト パラメータ操作などの悪いことをする人もいます。操作された POST パラメータを使用して、独自の価格と料金でリクエストを送信できるようにします。

これを行う最も簡単な方法は、Firefox でページを開き、firebug を使用して価格 [] と料金 [] の値を操作し、送信を押すことです。入力が読み取り専用であっても!!!

私のヒント - 次のようにします。

<select name="quantity[unique-id]">
  <option value="null">choose...</option>
  ...your options...
</select>

ここで、unique-id は、データベース ID などの各製品の一意の識別子です。

そしてphpで

foreach ($_POST['quantity'] as $uniqueId => $quantity) {
  //... don't forget to check $uniqueId and $quantity for injections (like sql injections)
  //skip the products with no numeric quantity value
  if (!is_int($quantity) || $quantity < 1) {
    continue;
  }
  $fee = getFeeFor($uniqueId); // from database?
  $price = getPriceFor($uniqueId); // from database?
  //... do what you want: $price + $fee * $quantity
}

これがお役に立てば幸いです。

于 2012-05-26T22:54:50.790 に答える
1
  1. まず第一に、配列を参照しているときに二重引用符文字列に単一引用符を含めないでください。「カプセル化された文字列」エラーが発生する危険があります。
  2. "item_qty"また、エラーになる可能性が高い 二重引用符で囲まれた文字列も含めます。
  3. ベスト プラクティスとしてoptionタグを閉じます。/>
  4. LABELタグが適切に使用されていません。正しい構文は次のとおりです。<label for='html_element_id'>My pretty label</label> <input id='html_element_id ... (my form control) ... />これは、チェックボックスやラジオ以外のコントロールでは (常により意味的で構造化されていますが) まったく役に立ちません。
  5. TABLEタグの代わりに a を使用しPて、すべてを並べることを検討することもできます。CSS を使用して物事を並べることができれば、はるかに優れた方法です。
  6. 選択肢をハードコーディングすると、要件の変更を処理するのが難しくなる可能性があります。1 から 10 までの数量が必要な場合はどうでしょうか。の代わりにテキストボックスを使用することを選択した場合はどうなりますSELECTか?

    while($t_row = mysql_fetch_assoc($get_items)) 
    {
        // Generate quantity string - can change the $qty string
        // for any imput method you like
    
        $qtyName = "item_qty[]";
    
        $qty = "<select name='" . $qtyName . "'>";
        for ($i=1; $i<6; $i++)
        {
            // close the option tag as best practice!
            $qty .= "<option value='" . $i . "' />";
        }
        $qty .= "</select>";
    
        echo sprintf("<p>%s
        <input type='text' READONLY name='item_price[]' value='%s' /></label>
        <input type='text' READONLY name='item_fees[]' value='$s' /> " . $qty . "</p>",
        $t_row['item_price'],
        $t_tow['item_fee']);
    }
    

データの収集は簡単です。

$sum = 0;
$fees = $_POST['item_fee'];
$qtys = $_POST['item_qty'];
$prices = $_POST['item_price'];
$total = count($prices);

for ($i = 0; $i<total; $i++)
{
    $item_fee = $fees[$i] + 0; // trick to filter only numerical values and avoid data tampering
    $item_price = $price[$i] + 0;
    $item_quantity = $qtys[$i] + 0;

    $item_total = $item_price + $item_fee * $item_quantity; 

    $sum += $item_total;

}

私も、フォームに価格を直接表示すると、データの改ざんにつながる可能性があることに同意します。データベースと照合することを提案したユーザーは、非常に賢明なアドバイスを与えました.

于 2012-05-28T09:11:59.720 に答える
0
$total = 0;
$fee = $_POST['item_fee'];
$qty = $_POST['item_qty'];

foreach($_POST['item_price'] as $k => $price) {
    $total += $price + ($fee[$k] * $qty[$k];
}

すべてのアイテムの合計が必要なのか、各アイテムの合計が必要なのかわかりません。

各項目の合計が必要な場合は、最初の行 ( ) に変更$total += $price + ($fee[$k] * $qty[$k];$total = $price + ($fee[$k] * $qty[$k];て削除し$total = 0;ます。

<select name="item_qty">に変更<select name="item_qty[]">

于 2012-05-26T22:39:43.657 に答える
0

私は非常に簡単な解決策を持っています。

最初<select name="item_qty">の変更<select name="item_qty[]">

次に、あなたの中にitem_calc.php、これを書いてください

$itemprice = $_POST["item_price"];//tested with array(10,35,21)
$itemfees = $_POST["item_fees"];//tested with array(3,7,4)
$itemqty = $_POST["item_qty"];//tested with array(2,5,3)
$i = 0;
$total = 0;
foreach($itemprice as $price){
  $feesx = $itemfees[$i];
  $qtyx = $itemqty[$i];
  $calculated = ($price+$feesx)*$qtyx;
  $total = $total + $calculated;
  $i++;
}
echo $total;//echos 311 [{(10+3)*2}+{(37+7)*5}+{(21+4)*3}]

私はそれをテストし、完璧に動作しています。お役に立てれば:)

于 2012-06-01T15:23:24.197 に答える