2012-10-01 55 views
0

可能重複:
Variable always resetting計數器變量

所以我不是太熟悉HTML或PHP,但我一直在努力像策劃一個遊戲,我一直在用我的代碼一直存在的問題是變量$嘗試似乎總是重置,所以它的值始終是1.是否有解決此問題的方法?我的大部分代碼是在這裏了下來:

<?php 
$showtable = false; 
$showform = false; 
$showstart= true; 
$process = false; 
$black = 0; 
$white = 0; 
$answer = array(1,2,3,4); 
$tries = array(); 
$attempts = 0; 

if (isset($_POST['started'])) 
{ 
    $showform = true; 
    $showstart = false; 
} 

if (isset($_POST['guessed'])) 
{ 
    $process = true; 
} 

if ($showstart == true) 
{ 
    echo" 
    <form action='' method='post'> 
    <input type='submit' value='Start' name='start' /> 
    <input type='hidden' value='started' name='started'/> 
    </form><Br /><br /> 
    "; 
} 

if ($showform == true) 
{ 
    echo" 
    <h3>Your guess:</h3> 
    <form action='gogo.php' method='post'> 
    <input type='text' placeholder='Your guess' maxlength='4' value='' name='guess' /> 
    <input type='submit' value='guess' name='submitt' /> 
    <input type='hidden' value='started' name='started' /> 
    <input type='hidden' value='guessed' name='guessed' /> 
    </form><Br /><br /> 
    "; 
} 

if ($process == true) 
{ 
    $attempts += 1; 
    $guess = str_split($_POST['guess']); 
    if ($guess == $answer) 
    { 
     $black = 4; 
    } else 
    { 
     for ($i=0;$i<4;$i++) 
     { 
      if ($guess[$i] == $answer[$i]) 
      { 
       $black += 1; 
       $white -= 1; 
      } 
     } 
     $result = array(); 
     foreach ($guess as $val) 
     { 
      if (($key = array_search($val, $answer))!==false) 
      { 
       $result[] = $val; 
       unset($answer[$key]); 
      } 
     } 
     $count = count($result); 
     $white = $white + $count; 
    } 
} 
$chance = implode(" ",$guess); 
$try = $attempts.".".$chance.".".$white.".".$black; 
array_push($tries, $try); 
$showtable = true; 

if ($showtable == true) 
{ 
    echo" 
    <table border='2' cellpadding='10'> 
    <Tr><Td>Attempt:</td><td>Number guessed:</td><td>White:</td><Td>Black:</td></tr> 
    "; 
    for ($i=0;$i<$attempts;$i++) 
    { 
     $split = explode(".",$tries[$i]); 
     echo" 
     <tr><td>".$split[0]."</td><td>".$split[1]."</td><td>".$split[2]."</td> <td>".$split[3]."</td></tr> 
     "; 
    } 
    echo" 
    </table> 
    "; 
} 
?> 
+0

如果你將'$ attempts'設置爲'0',你爲什麼期望它有什麼不同?使用cookies或會話。 –

+0

真的嗎?它在哪裏,我該如何解決它? –

+0

@WaleedKhan對不起,但我應該如何執行它?我在這方面比較新穎 –

回答

2

在你的代碼的開始你初始化變量爲零,所以每次代碼運行時間(即一招是由每次)變量是「復位」 。

您應該以某種方式保存變量,無論是使用數據庫還是使用$_SESSION變量。但請注意,您必須添加檢查以確保$_POST中發送的內容與您在此時遊戲中期望的內容一致。

+0

對不起,我如何使用會話變量? –

+0

@AnthonyWu http://us2.php.net/manual/en/features.sessions.php –

0

這是因爲每次你打你的網頁的時候,你在年初設定$attempts0,而你只有通過不斷增加1.它作爲你沒有提交(再利用)的$attempts值在一個表單中(隱藏字段或其他),您沒有任何方法可以將請求中的值保存起來。請記住,每次訪問頁面時,腳本都會從頭開始重新開始。除非您將內容存儲在會話或數據庫中,或者使用表單或查詢字符串參數來保存數據的狀態,否則每次都要重新開始。