虽然声明无限重复

时间:2012-07-08 02:55:10

标签: php html if-statement while-loop

我有一个网站,我需要使用while语句,但是当我使用它时,它无限地重复回声。虽然看起来我可以在没有的情况下使其工作,但事实并非如此,这是最终产品的简化版本,需要同时使用。

<?php 
$passlevel = '0';
while ($passlevel == '0')
{
    if(isset($_GET['box_1_color']))
    {
        $color=$_GET['box_1_color'];
        if($color == "#800080")
        {
            echo "you have passed step one.";
            $passlevel == '1';      
        }
        else 
        {
            echo "you didn't select purple.";
        }   
    }
    else echo "contact webmaster";
}
?>

为什么它会回应联系网站管理员,或者你没有选择紫色无数次?

5 个答案:

答案 0 :(得分:6)

首先,您可能需要更改:

$passlevel == '1';

$passlevel = '1';

第一个是比较等于,而不是赋值等于。

其次,如果$color不是#800080,那么循环不会终止,因此循环不会重复,因为循环中的任何内容都不会导致值发生变化。

我首先并不完全确定这个循环的重点。它应该在没有循环的情况下完美地工作,但是你已经说明你的代码是一个更复杂的东西的简化版本,确实需要一个循环。也许你可以详细说明。

答案 1 :(得分:4)

你没有提供任何出路。如果第一次通过循环时$_GET['box_1_color']不是紫色,那么第二次循环时它不可能成为任何其他东西,所以它每次都会保持错误的颜色。

我不确定你想要完成这个循环的目的。如果您尝试让用户每次都输入一个新值,那么您将无法使用PHP中的循环执行此操作。您将不得不重新生成整个页面(可能会显示错误消息)并要求访问者再次提交表单。

答案 2 :(得分:1)

对于“联系网站站长”,您需要break离开循环,使用break表达式或将$ passlevel设置为零以外的任何值。 @Mike Christensen的回答揭示了一个更严重的真实问题,但

答案 3 :(得分:1)

如果未设置$_GET['box_1_color'],则永远不会更改变量$passlevel

答案 4 :(得分:-1)

<?php 
$passlevel = 0;
while ($passlevel == 0 || $passlevel == 2)
{
    if(isset($_GET['box_1_color']))
    {
        $color=$_GET['box_1_color'];
        if($color == "#800080")
        {
            echo "you have passed step one.";
            $passlevel = 1;      
        }
        else 
        {
            echo "you didn't select purple.".'try again.';
        }   
    }
    else
    {
        echo "contact webmaster";
        $passlevel = 2;
    }
}
?>

您需要为失败定义另一个passlevel,以停止while循环。另外,不要在整数周围加上任何引号。