2012-03-29 106 views
0

我在HTML中創建了一個填充下拉列表。當選擇了兩個下拉列表時,表單將帖子發佈到'calculate.php',php腳本從下拉菜單中回顯出選定的值。下拉列表中的PHP問題

<form action="calculate.php" method='POST'> 
<select name="Phones"> 
<option value="Lumia800">Nokia Lumia 800</option> 
<option value="iPhone">Apple iPhone 4s</option> 
<option value="GalaxyS2">Samsung Galaxy S2</option> 
<option value="Bold9900">Blackberry Bold 9900</option> 
<option value="SensationXE">HTC Sensation XE</option> 
<option value="XperiaS">Sony Ericsson Xperia S</option> 
</select> 

<select name="Network"> 
<option value="Orange">Orange</option> 
<option value="Vodafone">Vodafone</option> 
<option value="O2">O2</option> 
<option value="Three">Three</option> 
</select> 

<input type="submit" /> 
</form> 

在這個例子中,'calculate.php'回顯所選的下拉值。

<?php 
$pref=$_POST['Phones']; 
$pref1=$_POST['Network']; 

$Orange="5"; 

if ($pref1 == "Orange") 
{ 
    $total1 = $Orange; 
} 

$Lumia800="10"; 

if ($pref == "Lumia800") 
{ 
    $total = $Lumia800 + $Orange; 
} 

echo $total; 

    ?> 

此示例輸出是「15」

本實施例的目的是最終建立一個簡單的電話包系統,在該組的碼附加電話,網絡成本的價格,和其他變量一起用於最終總計當用戶提交它時花費多少錢。

我遇到的問題是我想從相應的下拉框(例如「電話」和「網絡」)中添加每個變量。對於這樣一個簡單的腳本,我的例子會過於複雜嗎?有沒有更精確的方法來獲得我想要的結果?

謝謝,

JB。

+0

我不認爲使用每個可能的組合的if語句將很容易維護跟蹤。也許更好的方法可能是將值存儲在數組或數據庫中,將值取出並在運行中執行添加。 – F21 2012-03-29 07:59:45

回答

0

它可以工作,但可能會很複雜。我建議改爲切換語句。

$total = 0 
switch ($pref) { 
    case "Orange": 
    $total += 5; 
    break; 
    case "O2": 
    $total += 8; 
    break; 
} 

相同的開關結構將用於$ pref1或網絡變量。

0
<form action="calculate.php" method='POST'> 
    <select name="Phones"> 
    <option value="123">Nokia Lumia 800</option> 
    <option value="234">Apple iPhone 4s</option> 
    <option value="12">Samsung Galaxy S2</option> 
    <option value="32">Blackberry Bold 9900</option> 
    <option value="432">HTC Sensation XE</option> 
    <option value="12">Sony Ericsson Xperia S</option> 
    </select> 

    <select name="Network"> 
    <option value="42">Orange</option> 
    <option value="34">Vodafone</option> 
    <option value="23">O2</option> 
    <option value="34">Three</option> 
    </select> 

    <input type="submit" /> 
</form> 

<?php 
echo $_POST['Network'] + $_POST['Phones']; 
?> 

可能是在這種情況下,簡單得多,但當然,這取決於你需要這樣的確切情況。

+0

這種方法的缺陷是,如果這些值被加在一起,然後發送到一些支付處理系統。在這種情況下,用戶可以輕鬆編輯他的POST變量並導致問題。 :P但是,如果它只是用於向用戶顯示價格,我不認爲應該有太多的問題:) – F21 2012-03-29 08:03:01

+0

是的,這就是爲什麼我直接補充說它取決於確切的情況,但如果是支付處理系統,它將從數據庫中輸出id而不是自定義標題,並且與這些id的匹配將不得不在服務器端發生。 – 2012-03-29 08:19:00

1

您應該爲每個包含所有價格的選擇定義數組。

$phone_prices = array("Lumia800" => 10, "iPhone" => 42); 
$network_prices = array("Orange" => 5, ...); 

然後你coud只是做類似

$price = $phone_prices[$pref] + $network_prices[$pref1]; 

但是,這是不是真的安全,確保$ PREF和$ PREF1是現有的在各自的數組索引。

0

G'day mate。

你可以爲一個,從Phones => Price創建映射的陣列和Network => Price

例如:

<?php 
$phones = array(
    'Lumia800' => 10, 
    'iPhone' => 15, 
    'GalaxyS2' => 30, 
    // rest of the phones with price 
); 

$networks = array(
    'Orange' => 10, 
    'Vodafone' => 15, 
    'Three' => 3, 
    'O2' => 8 
); 

然後驗證用戶輸入

if(!empty($phones[$pref])) && !empty($networks[$pref1])) { 
    echo $phones[$pref] + $networks[$pref1]; 
} 
0

如果您的代碼不會是更復雜的又是什麼我現在看到的 我只想改變:

... 
<option value="iPhone">Apple iPhone 4s</option> 
... 
<option value="Orange">Orange</option> 
... 

... 
<option value="5">Apple iPhone 4s</option> 
... 
<option value="10">Orange</option> 
... 

然後循環中的所有值在年底

$total = 0; 

foreach ($_POST as $key => $val) { 
    $total += $val; 
} 

echo $total; 

這樣你就可以改變下拉的數量