2012-03-20 35 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)。

在這個例子中只有兩個不同的選項,但在最終的應用程序中會有20-30個不同的東西可以改變,這就是爲什麼循環是必要的。

另外我怎樣才能循環每一個沒有隱藏的元素(所以排除隱藏的表單元素)。

+0

你需要價值的第一部分還是隻有數字值? – tonymarschall 2012-03-20 00:05:25

+0

只有數字值是可以的,我知道如何輸出其餘的數據 – Talon 2012-03-20 00:08:28

回答

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()'來獲取數組中的最後一項,以確保該值不再有一個單詞。 – s3v3n 2012-03-20 00:15:27

+0

這是真的,但我正在處理實際提供的代碼。我做了修改,因爲你的觀點是有效的 – 2012-03-20 00:20:29

+1

爲了記錄,除非你將'end($ num)'作爲int類型轉換,'is_numeric'檢查將失敗,因爲它將是一個字符串。 – 2012-03-20 00:27:25

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']; 
} 

和顯示數據發送到用戶太:

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

這是一種更好的方法,因爲它給你很大的靈活性。

+0

稍後會使用這些值,但僅向用戶顯示它們未在計算中使用。 – Talon 2012-03-20 00:28:09

+0

我編輯了答案。 – s3v3n 2012-03-20 01:00:02

1

我在考慮你在數組中存儲使用_POST發送的值。

$total = 0; 

foreach($selections as $sel){ 
    $sep = $explode('+', $sel); 
    $value = (int)$sep[1]; 
    $total += $value; 
}