1

私が使用している PHP スクリプトには、コードが次のケースに自動的に実行されるのを防ぐために、switch ステートメントと break が含まれています。

if (!isset($a)) $a = '';
switch($a)
{
case 1:
default:
// some code
break;
case 2:
// some code
break;
case 3:
// some code
break;
}

ユーザーが URL に "$a" として PHP の switch ステートメントに存在しない数字を書き込まないようにするにはどうすればよいですか? たとえば、上記の例で、誰かが URL indes.php?a=5 として書き込むと、リンクが正しくないというメッセージが表示されます。それを行う最善の方法は何ですか?

私が興味を持っているもう1つのことは、1つのページで使用するのが賢明なswitchステートメントの数に制限がありますか、それともページのサイズが大きすぎる場合に問題を引き起こす可能性がありますか?

4

5 に答える 5

4

これを の末尾に追加しswitchます。

default:
   echo 'not correct';
break;
于 2012-05-03T10:57:47.273 に答える
3

PHPドキュメントから:

特殊なケースがデフォルトのケースです。このケースは、他のケースで一致しなかったものすべてに一致します。例えば:

<?php
switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
    default:
       echo "i is not equal to 0, 1 or 2";
}
?>

http://php.net/manual/en/control-structures.switch.php

于 2012-05-03T10:57:50.607 に答える
1

デフォルトのケースを追加します。

default:
   echo 'Invalid Option';
break;

そして、casesinに制限はありませんswitch

アップデート:

ページのサイズに関係なく。しかし、確かにそれはケース内に書かれたスクリプトまたはコードに依存します。それが効果を発揮するよりも時間がかかります。

于 2012-05-03T10:59:11.153 に答える
0

デフォルトのタグの配置が問題を引き起こしている可能性がありますが、これについて100%確信はありません。

    if (!isset($a)) $a = '';

    switch($a)
    {
    case 1:
    default:
    // some code
    break;
    case 2:
    // some code
    break;
    case 3:
    // some code
    break;
    }

個々のcaseステートメントは、$aと一致する場合は常に実行されます。たとえば、ユーザーが3を送信した場合(つまり$ a == 3)、ケース3が実行されます。break;ステートメントがヒットするまで実行を続けます。このdefaultブロックは、$aに含まれる値に一致するcaseステートメントがない場合にのみ実行されます。

たとえば、ユーザーが5を送信した場合(つまり$ a == 5)、何も送信されないcase 5:ため、デフォルトのブロックが実行されます。したがって、通常は、default:次のようにswitchステートメントの最後にブロックを配置して、条件に一致するcaseステートメントがない場合は、最後に実行されることを示します。

    if (!isset($a)){
        $a = '';
    }

    switch($a)
    {
        case 1:
            //some code
            break;
        case 2:
            // some code
            break;
        case 3:
            // some code
            break;
        default:
            //code displayed when $a does not match any case statements
    }

お役に立てば幸いです。また、switchステートメントは非常に高速に実行され、基本的にネストされたifステートメントに似ています。したがって、実際には制限はありませんが、コードの最適化は常に努力すべきものです。

于 2012-05-03T23:51:10.393 に答える
0

スイッチの間違った構造を使用しているため、switchステートメントが壊れます。ここで完全なswitchステートメントの参照を確認してください

<?php

$i = 1;

switch ($i) {

    case 0:

        echo "i equals 0";

        break;

    case 1:

        echo "i equals 1";

        break;

    case 2:

        echo "i equals 2";

        break;

    default:

         echo 'no case match';

         break;

}

?>
于 2015-11-27T08:09:23.627 に答える