2016-03-14 58 views
0

嗨我清除我的基本知識的PHP,我有點卡住實施這個猜謎遊戲。我的問題是,我希望$ num_tries作爲計數器工作,並且每當用戶錯誤地回答時,它每次都會增加1。爲什麼num_tries計數器不工作?

<?php 
$target=58; 
$message=""; 
$num_tries=0; 
if(isset($_POST["num_tries"])) { 
    print "set"; 
    ++$num_tries; 
} else { 
    print "not set"; 
    $num_tries=0; 
} 

if (!isset($_POST["guess"])) { 
    $message="Welcome to the game of Guess!!!!!!"; 
} elseif($_POST["guess"]> $target) { 
    $message= "Try a smaller Number"; 
} elseif($_POST["guess"] < $target) { 
    $message= "Try a larger Number"; 
} else { 
    $message= "congrats....You got it."; 
} 
?> 
<HTML> 
<HEAD><TITLE>Guess Game</TITLE> 
</HEAD> 
<BODY> 
<H1><?php print $message ?></H1> 
Guess Number:<?php print $num_tries ?> 

<FORM action="<?php print $_SERVER['PHP_SELF'];?>" method="POST"> 
    <INPUT type="text" name="guess"> 
    <INPUT type="hidden" name="num_tries" value="<?php $num_tries?>"> 
</FORM> 
</BODY> 
</HTML> 
+1

嗯,你做的第一件事是'$ num_tries = 0' ... –

+1

*「我希望$ num_tries作爲一個計數器,並且每次增加1」* - 在每個腳本調用初始化它'0',那麼'++ $ num_tries'會根據需要增加它。它完美的作品。 – axiac

+1

你可能想要的是在執行之間傳遞它的值(這就是爲什麼你在一個隱藏的'input'中添加它的原因)。但在下一次執行中,您完全忽略了該值。你應該做'if(isset($ _ POST [「num_tries」])){print「set」; $ num_tries =(int)$ _ POST ['num_tries']; ++ $ num_tries; } else {...}' – axiac

回答

2

您可以在第一線解決問題:

$target=58; 
$message=""; 
$num_tries = (!empty($_POST['num_tries']) ? $_POST['num_tries'] : 0); 

這意味着如果窗體未提交之前,$num_tries將是零,否則,該值將是最後一次提交的值。

然後你需要隱藏的元素

<INPUT type="hidden" name="num_tries" value="<?php echo $num_tries?>"> 
---------------------------------------------------^^^^ 
1
$message=""; 
$num_tries=0; 

改變上述聲明$num_tries=isset($_POST["num_tries"]) ? $_POST["num_tries"] : 0;這意味着如果後VAR值設置,然後分配後的VAR值,否則賦予0打印。

接下來需要改變的是在隱藏元素下打印值。您可以使用或print_recho

<INPUT type="hidden" name="num_tries" value="<?php echo $num_tries; ?>"> 
0

您正在使用<?php $num_tries ?>,它實際上什麼都不做。

您需要使用<?php echo $num_tries ?>print也可以,但對於您的用例,echo更有效),以便實際將值放入表單中。

此外,$num_tries = 0;不會讀取現有值。您可以使用$num_tries = $_POST['num_tries'] | 0;,雖然它會在未設置字段時生成PHP通知,如果您關心此問題,請使用帶有三元運算符或if/else的isset