2012-03-29 3 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»

Цель этого примера состоит в конечном счете создать простую систему телефона пакета, с этим набором кода, добавляющий стоимость телефона, стоимость сети, и другие переменные вместе для окончательного итогов того, сколько это будет стоить, когда пользователь отправит его.

Проблема заключается в том, что я хочу добавить каждую переменную из соответствующих выпадающих списков (например, «Телефоны» и «Сеть») друг против друга. Является ли мой пример слишком сложным для такого простого сценария? Есть ли более совершенный метод для получения результатов, которые я хочу?

Thanks,

JB.

+0

Я не думаю, что использование операторов if для каждой возможной комбинации будет легким в обслуживании. Возможно, лучшим способом может быть сохранение значений в массиве или даже в базе данных, извлечение значений и выполнение вашего добавления на лету. – F21

ответ

0

Это будет работать, но может быть сложным. Вместо этого я предлагаю перейти на инструкцию switch.

$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

+0

Да, поэтому я прямо добавил, что это зависит от конкретной ситуации, но если это для системы обработки платежей, она выводит идентификаторы из базы данных, а не в пользовательские заголовки, и совпадение с этими идентификаторами должно было бы происходить на стороне сервера. –

1

Вы должны определить массивы для каждого выбора, содержащего все цены.

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

И тогда вы coud просто сделать что-то вроде

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

Но это не очень безопасно, убедитесь, что $ прив и $ pref1 являются существующие индексы в их соответствующем массиве.

0

G'day мат.

Вы могли бы для одного, создать массив отображения из 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; 

Таким образом, вы можете изменить количество выпадающих списков

Смежные вопросы