2012-07-08 59 views
-2

我有一個網站,我需要使用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

其實,如果你真的縮進你的[原始問題](http://stackoverflow.com/revisions/ef5a78af-47fa-468e-b919-16884eb9363e/view-source),那麼我可以告訴你爲什麼你會得到困惑... – kay 2012-07-08 03:05:01

+0

因爲5個縮進的格式而顯示其代碼 – ryno 2012-07-08 03:15:15

+1

,但你看到了什麼會在預覽中發佈,並沒有想到有必要修復縮進?最後,如果範圍內的所有代碼都是用一個製表符縮進的...... – kay 2012-07-08 03:19:00

回答

6

首先,你可能需要改變:

$passlevel == '1'; 

$passlevel = '1'; 

首先是一個比較平等相待,不分配平等的。其次,如果$color不是#800080,那麼循環不會終止,因此循環會永久重複,因爲循環中沒有內容導致值發生變化。

我並不完全確定這個循環的重點。它應該在沒有循環的情況下工作得很好,但是你已經聲明你的代碼是一個更加複雜的簡化版本,確實需要一個循環。也許你可以詳細說明。

+0

就像我的帖子所說,網站的其他部分在這裏需要使用while語句,因此有幾個變量是動態的,因此會有稍後會有不同的聲明。 – ryno 2012-07-08 03:05:44

+0

當我刪除額外=,沒有什麼回聲 – ryno 2012-07-08 03:07:34

+0

@ryno - 我明白這一點。我試圖澄清發生了什麼事情,同時承認你有這個循環的某些原因,但我不完全明白。 – 2012-07-08 03:08:01

1

在「聯繫站長」的情況下,您需要break跳出循環,或者使用break表達式或將$ passlevel設置爲除零以外的任何值。 @Mike Christensen的回答揭示了一個更嚴重的實際問題,儘管

1

如果沒有設置$_GET['box_1_color'],變量$passlevel將不會被更改。

4

你沒有提供任何出路。如果$_GET['box_1_color']在循環中第一次不是紫色,那麼它在循環中第二次不可能變成其他東西,所以它每次都會保持錯誤的顏色。

我不確定你打算如何實現這個循環。如果您試圖讓用戶每次都輸入一個新值,那麼您將無法通過PHP中的循環來完成此操作。您必須重新生成整個頁面(推測可能會顯示錯誤消息),並要求訪問者再次提交表單。

-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循環。另外,不要在整數週圍放置任何引號。

+0

誰應該使用'$ _GET'的內容更改? – kay 2012-07-08 03:06:05

+0

固定。我沒有真正理解你的遊戲的概念。 – Jaxkr 2012-07-08 03:08:20

+0

我在你的答案中加了一些縮進。如果用戶選擇另一種顏色而不是紫色,他仍然會卡在循環中。 – kay 2012-07-08 03:11:14