Multi select PHP

<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, иллюстрирующий это