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 中写入一些在 php switch 语句中不存在的数字“$a”?例如,在上面的这个例子中,如果有人写成一个 url indes.php?a=5 应该得到一个链接不正确的消息。最好的方法是什么?

我感兴趣的另一件事是,在一个页面上使用的 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;

cases并且in没有限制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;
    }

只要与 $a 匹配,就会执行各个 case 语句。例如,如果用户提交了 3(因此 $a==3),那么案例 3 将执行。它将继续执行,直到break;语句被命中。default仅当没有 case 语句与 $a 中包含的值匹配时,才会执行该块。

例如,如果用户提交了 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 结构,请在此处查看完整的 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 回答