PHP проблема с выпадающим списком - PullRequest
0 голосов
/ 29 марта 2012

Я создал заполненный выпадающий список в HTML.Когда два раскрывающихся списка выбраны, форма отправляет сообщение «calc.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>

В этом одном примере «calc.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.

Ответы [ 5 ]

1 голос
/ 29 марта 2012

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

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

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

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

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

0 голосов
/ 29 марта 2012

Если ваш код не будет более сложным, чем то, что я вижу сейчас, я бы просто изменил:

...
 <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;

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

0 голосов
/ 29 марта 2012

Это будет работать, но может быть сложным.Я бы предложил вместо этого перейти на оператор switch.

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

Та же структура переключателя будет для $ pref1 или сетевой переменной.

0 голосов
/ 29 марта 2012

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 голосов
/ 29 марта 2012
<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'];
?>

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

...