0

こんにちは、私は PHP を学習している初心者です ( & スタックオーバーフローでも) - 簡単な問題を解決しようとしていますが、解決できません。他の時間を無駄にしたくなかったので、質問を投稿する前にGoogleとstackoverflowですでに検索しましたが、1週間はこの問題を解決できません。

ユーザーが数値を入力し、入力された値が 5 であるかどうかを確認する単純なプログラムを PHP で作成しています。私はこれを行うことができます

私にとってトリッキーな部分は、基本的なPHPを使用してこれを行うことができないため、彼に10回だけチャンスを与えて試してみたいということです. if、for、do while を使用してみましたが、「html をループする」ことができません。jquery などを知らず、PHP のみでこれを達成しようとしています。私はまだ学習セッションなどに進んでいません。よろしくお願いします

<html>
<body>
TRY AND GUESS THE NUMBER
<br/>
<br/>
<form method="POST" action="gullible.php">
Please enter any number :<input type="text" name="num">
<input type="hidden" name="cnt" value=<?php $cnt=0 ?>>
<input type="submit" name="go">
</body>
</html>
<?php
$i=0;
 if ($_POST['num']!=5)
 {
 $i++;
 echo $i;
 echo " Please try again";
 }
 else 
 echo "You win the game";
 ?>'
4

5 に答える 5

0

私はあなたのためにこれを作りました。あなたが何か新しいことを学ぶのに役立つことを願っています(変数名を理解しやすくするために数回編集しました。もう一度確認してください - チートも追加しました:))

<?php
    session_start(); // with this we can use the array $_SESSION to store values across page views of a user.

    mt_srand(time()); // this is to ensure mt_rand function will produce random values. just ignore it for now. it's another story :)

    $max_tries = 10; // limit of guesses

    $_SESSION['the_magic_number']=!isset($_SESSION['the_magic_number'])?mt_rand(0,100):$_SESSION['the_magic_number'];
    // the previous line is a one-liner if then else statement. one-liners works like this: 
    // $my_name_will_be=($isBoy==true)?"George":"Mary";

    if(isset($_POST['num'])) // if this pageview is from a valid POST then...
    {
        $_SESSION['current_try']=isset($_SESSION['current_try'])?$_SESSION['current_try']+1:1;
        // one-line if then else again. This increases the try user is now, or resets it to one
    }
?>  
<html>
    <body>
        TRY AND GUESS THE NUMBER
        <br/>
        <br/>
<?php   
    if ($_SESSION['current_try']<=$max_tries) // if user has more tries available
    {
         if(intval($_POST['num'])==$_SESSION['the_magic_number']) // did he found it?
         {
             echo "You found it! Gongratulations! Click <a href=''>here</a> to try again!";

             // oh and do not forget to reset the variables (you found this bug, well done!)
             $_SESSION['current_try']=1;
             $_SESSION['the_magic_number']=NULL;
         }
         else
         {
             // if he didn't found it, display the status of tries left, and the form to try again
             echo "This is your try ".($_SESSION['current_try'])." of ".$max_tries." Good Luck!";
?>
        <form method="POST" action="mygame.php">
            Please enter any number :
            <input type="text" name="num"/>
            <input type="hidden" name="tries" value="<?php echo (isset($_POST['tries']))?$_POST['tries']-1:$max_tries; ?>"/>
            <input type="submit" name="go"/>
        </form>
        <span style="color:white;background-color:white;"><?php echo "You bloody cheater! The magic number is ".$_SESSION['the_magic_number'];?></span>
<?php
         }
    }
    else
    { 
        // here we are if no tries left! An empty href to reload the page, and we resetting our variables.
        // the_magic_number gets NULL so at the start of script it will be "not set" and will get a mt_rand(0,100) value again
        echo "You lost! Sorry! Click <a href=''>here</a> to try again!";
        $_SESSION['current_try']=1;
        $_SESSION['the_magic_number']=NULL;
    }
?>
    </body>
</html>

最後のスパンはチートです;) ctrl + aを押して使用してください!!!

于 2013-06-27T13:34:58.190 に答える
0

変数が持続するように、何らかの方法で変数を保存する必要があります。スクリプトでは、実行するたびに設定$iしています。0さらに、非表示の入力で値を間違って設定しています。

これを行う 1 つの方法は、次のようなセッション変数を使用することです。$_SESSION['cnt']

私の PHP は少しさびていますが、セッション変数を使用した例を次に示します。

$max_guesses = 10;

if( !isset($_SESSION['cnt']) ){
  $_SESSION['cnt'] = 0;
}

if( $_SESSION['cnt']++ > $_max_guesses ){
  echo "Maximum tries exceeded";
} else {
  echo "Try again";
}

セッション変数を使用したくない、または使用できない場合は、次のように非表示の入力フィールドを使用できます。

<?php
    if( !isset($_POST['cnt']) ){
      $cnt = 0;
    } else {
      $cnt = $_POST['cnt'];
    }

    if( $cnt++ > $_max_guesses ){
      echo "Maximum tries exceeded";
    } else {
      echo "Try again";
    }
?>

<input type='hidden' name='cnt' value='<?php echo $cnt ?>' />

(フォームが代わりに GET を使用している場合は、単に置き換える$_POSTか、わからない場合$_GETは使用できますが、おそらく使用しない方がよいことに注意してください。$_REQUEST

于 2013-06-27T12:06:09.020 に答える
0

ユーザーのログインに成功したら、チャンス変数を次のように 10 に設定します。

$_SESSION['nofchances']=10;

成功した認証ページでこのフラグを設定した後。PLAIN html コードにリダイレクトします。

編集済み:

question.html

<html>
<body>
TRY AND GUESS THE NUMBER
<br/>
<br/>
<form method="POST" action="gullible.php">
Please enter any number :<input type="text" name="num">
<input type="submit" name="go">
</body>
</html>

だまされやすい.php

<?php
 if($_SESSION['nofchances']!=0)
 {
 if ($_POST['num']!=5)
 {
 $_SESSION['nofchances'] = $_SESSION['nofchances'] - 1;
 echo "You have ".$_SESSION['nofchances']." no of chances to try";
 echo "<br>Please try again";
 header("location:question.html");
 }
 else
 {
 echo "You won the game";
 $_SESSION['nofchances']=10; // resetting back
 }
 }
 else
 {
 echo "Your chances expired";
 }
 ?>
于 2013-06-27T12:11:05.337 に答える