<form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <select name="test[]" multiple="multiple"> <option value="one">one</option> <option value="two">two</option> <option value="three">three</option> <option value="four">four</option> <option value="five">five</option> </select> <input type="submit" value="Send" /> </form> <?php $test=$_POST['test']; if ($test){ foreach ($test as $t){echo 'You selected ',$t,'<br />';} } if($t=='one') $price1=12; if($t=='two') $price2=2; $total = $price1 + $price2; echo $total;
Когда один и два выбраны, мне хотелось бы, чтобы результат был 14. Каков наилучший способ сделать дополнение для получения 14 в результате?
Вы должны поместить if, t = один и т. Д. Внутри цикла
Вы должны сделать одну переменную, которая будет содержать результат, вместо того, чтобы делать price1, price2 и т. Д.
Например:
<form action="<?=$_SERVER['PHP_SELF']?>" method="post"> <select name="test[]" multiple="multiple"> <option value="one">one</option> <option value="two">two</option> <option value="three">three</option> <option value="four">four</option> <option value="five">five</option> </select> <input type="submit" value="Send" /> </form> <?php $test = isset($_POST['test']) ? $_POST['test'] : null; // we also want to check if it's set else we'll get an notice $total = 0; if ($test) { foreach ($test as $t) { echo 'You selected ',$t,'<br />'; switch ($t) { case "one" : $total += 2; break; case "two" : $total += 12; break; } } } echo 'Total: ' .$total;
поместите этот IF в цикл foreach
Во-первых, $ test следует назначать с использованием тернарного оператора, таким образом мы можем убедиться, что мы не вызываем PHP-предупреждения.
$test = isset($_POST['test']) ? $_POST['test'] : false; if($test): //good endif;
Во-вторых, зачем даже использовать интерпретацию строк целого?
<option value="1">one</option> //note the values <option value="2">two</option>
Давайте сделаем массив, на котором есть наши ответы.
$vals = array( 0 => 'Not an option!', 1 => 12, 2 => 2, 3 => 14, 4 => 26 );
Создайте фиктивную переменную, которую мы можем использовать для конкатенации опубликованных значений.
$val = 0; foreach($test as $t): $val += $t; endforeach;
Теперь $t
будет значением всех опубликованных элементов select.
echo $vals[$val];
И эта простая эхо-инструкция предоставит вам ваш ответ. Таким образом, вам не нужно делать несколько операторов if / else, он становится более чистым и более надежным.
и вот Codepad, иллюстрирующий это