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;

1 と 2 の両方が選択されている場合、結果を 14 にしたいのですが、結果として 14 を取得するための足し算を行う最良の方法は何ですか?

4

4 に答える 4

4

price1、price2 などを作成する代わりに、結果を含む 1 つの変数を作成する必要があります。

例えば:

<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;
于 2013-06-02T19:13:39.927 に答える
2

その IF を foreach ループに入れる

于 2013-06-02T19:08:57.953 に答える
0

if $t = one などをループ内に配置する必要があります

于 2013-06-02T19:09:10.597 に答える
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];

そして、その単純なエコーステートメントが答えを提供します。このようにして、複数の if/else ステートメントを実行する必要がなくなり、よりクリーンで堅牢な imo を維持できます。

そしてこれがこれを説明するコードパッドです

于 2013-06-02T19:15:03.683 に答える