多选PHP

时间:2013-06-02 19:05:06

标签: php input multi-select

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

当一个&amp;两个都被选中我想结果是14.结果获得14的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

你应该制作一个包含结果的变量,而不是制作价格1,价格2等。例如:

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

答案 1 :(得分:2)

将IF放入foreach循环

答案 2 :(得分:0)

您必须将if $ t = 1等放在循环

答案 3 :(得分:0)

首先,应该使用三元运算符分配$ 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将是所有已过帐选择项的值。

echo $vals[$val];

这个简单的echo语句将为您提供答案。这样你就不必做多个if / else语句,让它更干净,更健壮。

and here's a Codepad illustrating this