2012-03-20 8 views
0

私はこのようなフォームを持っています。すべての_Post変数をループして数値を追加する

<form action="index.php" method="post"> 
<select name="dropdownOption"> 
    <option value="First Choice +200">First Choice</option> 
    <option value="Second Choice +300">Second Choice</option> 
</select> 
<p><input type="checkbox" value="Rocket +100"> Rocket</p> 

私は何をしたい_POSTに送られ、その後、index.phpファイル内の変数に「+」記号の後にすべての数を合計するすべての値をループです。

は、したがって、たとえば、彼らは「第二の選択」を選択し、それは400(300 + 100)まで追加すべき「ロケット」のチェックボックスをチェックさ場合。

この例では2つだけ異なるオプションがありますが、最終的なアプリケーションでループが必要である理由である変えることができ、20〜30の異なるものがあるでしょう。

また、隠されていない要素をすべてループバックすることができます(非表示のフォーム要素を除外する)。

+0

値の最初の部分が必要ですか、数値のみの値ですか? – tonymarschall

+0

数値のみがOKです。データの残りの部分を出力する方法を知っています – Talon

答えて

1
foreach ($_POST as $post) { 
    $num = explode('+', $post); 
    if (is_numeric((int) end($num)) { 
     $sum += end($num); 
    } 
} 

あなたが負の値が必要な場合は、ちょうどこのようなあなたのoption見えるようにすることができます:

<option value="Second Choice +-300">Second Choice</option> 
+1

最後の項目を 'end()'で配列に入れて、もう1つの単語がないことを確認してください。 – s3v3n

+0

これは当てはまりますが、私は実際に提供されたコードに取り組んでいました。 –

+1

レコードとしては、 'end($ num)'をint型にして型変換しない限り、 'is_numeric'チェックは文字列になるので失敗します。 –

0

なぜ値にテキストをドロップし、数値データのみを保持していないでしょうか? 値はとにかく表示されませんが、コードでは数値をテキストに簡単にマップできます。 言い換えれば、あなたはこのような何か持つことができます。

$choices = array(
    '1' => array('value' => '100', 'text' => 'First choice'), 
    '2' => array('value' => '150', 'text' => 'Second choice'), 
    '3' => array('value' => '250', 'text' => 'Third choice'), 
); 

をそして、このようなデータを表示する(あるいは他の方法ではなく、値フィールドに選択肢のIDを持つ):

<form action="index.php" method="post"> 
<select name="dropdownOption"> 
    <?php foreach($choices as $id => $choice): ?> 
     <option value="<?php echo $id ?>"><?php echo $choice['text']; ?></option> 
    <?php endforeach; ?> 
</select> 
</form> 

あまりにもユーザーへ

$sum = 0; 
foreach($selected as $id){ 
    $sum += $choices[$id]['value']; 
} 

と表示データ:そして、最初の配列を持つことは、あなたは簡単にすべてのデータをまとめることができ

を3210
<?php foreach($selected as $id): ?> 
    <p>You chose <?php echo $choices[$id]['text']; ?></p> 
<?php endforeach; ?> 

これはあなたに多くの柔軟性を与えるような方法より良いアプローチです。

+0

値は後で使用されますが、計算に使用されていないユーザーにのみ表示されます。 – Talon

+0

答えを編集しました。 – s3v3n

1

_POSTを使用して送信された値を配列に格納することを検討しています。

$total = 0; 

foreach($selections as $sel){ 
    $sep = $explode('+', $sel); 
    $value = (int)$sep[1]; 
    $total += $value; 
} 
関連する問題