2013-06-02 5 views
0
<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 в результате?Мульти выберите PHP

ответ

0

Вы должны поместить, если $ т = один, и т.д. внутри цикла

2

положить, что ИФ в петлю Еогеасп

4

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

Во-первых, $ тест должен быть назначен с использованием троичной оператора, таким образом, мы можем убедиться, что мы не наносила 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 будет значение всех посланных выбора элементов.

echo $vals[$val]; 

И эта простая эхо-заявка предоставит вам ваш ответ. Таким образом, вам не нужно делать несколько операторов if/else, он становится более чистым и более надежным.

and here's a Codepad illustrating this

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