-2

while ステートメントを使用する必要がある Web サイトがありますが、それを使用するとエコーが無限に繰り返されます。時間がなくても動作するように見えますが、そうではありません。これは、時間が必要な最終製品の簡易版です。

<?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";
}
?>

ウェブマスターに連絡するか、紫色を無限に選択しなかったかのいずれかがエコーされるのはなぜですか?

4

5 に答える 5

6

まず、おそらく次のように変更する必要があります。

$passlevel == '1';

$passlevel = '1';

1 つ目は、割り当てが等しいのではなく、比較が等しいです。

次に、$colorが でない場合#800080、ループは終了せず、ループ内の何も値を変更しないため、永遠に繰り返されます。

そもそもこのループのポイントが完全にはわかりません。ループがなくても完全に正常に動作するはずですが、コードは実際にループが必要なより複雑なものの単純化されたバージョンであると述べました。おそらくあなたは詳しく説明することができます。

于 2012-07-08T02:58:38.013 に答える
4

ループから抜け出す方法を提供していません。1 回目のループで紫になら$_GET['box_1_color']ない場合、2 回目のループで他の色になることはあり得ないため、毎回間違った色になり続けます。

このループで何を達成するつもりだったのかわかりません。ユーザーに毎回新しい値を入力させようとしている場合、PHP のループではそれを行うことができません。ページ全体を再生成し (おそらくエラー メッセージが表示されます)、訪問者にフォームを再度送信するように依頼する必要があります。

于 2012-07-08T03:01:34.417 に答える
1

「ウェブマスターに連絡」の場合は、式を使用するか、$passlevel をゼロ以外に設定breakして、ループから抜け出す必要があります。break@Mike Christensenの回答では、より深刻な実際の問題が明らかにされていますが、

于 2012-07-08T02:59:11.830 に答える
1

が設定されていない場合$_GET['box_1_color']、変数$passlevelは変更されません。

于 2012-07-08T02:59:34.200 に答える
-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;
    }
}
?>

whileループを停止するには、失敗に対して別のパスレベルを定義する必要があります。また、整数を引用符で囲まないでください。

于 2012-07-08T03:03:10.203 に答える