我有一个网站,我需要使用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";
}
?>
为什么它会回应联系网站管理员,或者你没有选择紫色无数次?
答案 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循环。另外,不要在整数周围加上任何引号。