PHP basit POST rastgele sayı sorunu

4 Cevap php

Tamam ben sana rastgele çarpma soru sormak için bir şeyler yapmaya çalışıyorum. Şimdi gayet sorular sorar. Rastgele soru ince oluşturur. Bu sayfayı yeniden yükler Ama rasgele numaraları farklı ...

bunu nasıl düzeltebilirim?

<?php 

$rndnum1 = rand(1, 12); 
$rndnum2 = rand(1, 12);

echo "<h3>". $rndnum1 . " x ";
echo $rndnum2 . "</h3>";

if($_SERVER["REQUEST_METHOD"] == "GET") {

 $answer=0;

}
else if($_SERVER["REQUEST_METHOD"] == "POST") {

 $answer=trim($_POST["answerInput"]);
 $check=$rndnum1*$rndnum2;

 if($answer==$check) {

  echo "Correct!";

 }
 else {

  echo "Wrong!";

 }


}

?>

<form action="<?php echo $_SERVER['PHP_SELF'];  ?>" method="post" >
 <table>
  <tr>
   <td>
    First Name:&nbsp;
   </td>
   <td>
    <input type="text" name="answerInput" value="<?php echo $answer; ?>" size="20"/>
   </td>
   <td>
    <?php echo $answerError; ?>
   </td>
  </tr>
  <tr>
   <td class="signupTd" colspan="2">
    <input type="submit" name="submit" value="Submit"/>
   </td>
  </tr>
 </table>
</form>

4 Cevap

Eğer yeniden yüklediğinizde sayfa, $ rndnum1 ve $ rndnum2 rand () fonksiyonu ile yeni rasgele numaralar için ayarlanır. Onlar aynı kalmak değil bu yüzden. POST ile birlikte orijinal rasgele sayılar geçen deneyin ve kargılık doğru olmadığını denetlemeden önce $ _POST itibaren sayıları hesaplamak.

Bunu yapmak için, emin olun size teslim şeklinde iki rasgele değişken için aşağıdaki satırı dahil olun:

<input type="hidden" name="rndnum1" value="<?php echo $rndnum1 ?>" />

Sonra, cevap form gönderildikten sonra sayfanın bir sonraki yük, $_POST['rndnum1'], vb numaralarını almak

Onlar sunucuya gönderilen konum çok gizli form alanlarında üretilen rasgele sayılar içerir.

Örneğin, sadece içeride <form>:

<input type="hidden" name="rand1" value="<?=$rndnum1?>">
<input type="hidden" name="rand2" value="<?=$rndnum2?>">

Sonra PHP formu işleme yaparken, kullanımı $_POST['rand1'] ve $_POST['rand2'] daha sonra kullanıcının verilen yanıt ile karşılaştırmak, çarpın, orjinal numaralar Getirme için.

kodunuzu üstüne (0) srand işlevlerini ekleyin.

aslında size rastgele başlatıldı bir tanımlama kullanmak istiyorum, ve sonra srand bu geçiş () olabilir

Böyle bir şey çalışması gerekir.

<?php 
@session_start();

if($_SERVER["REQUEST_METHOD"] == "GET")
{
    $answer=0;
}

if (!$_POST['submit'])
{
    $_SESSION['rndnum1'] = rand(1, 12);
    $_SESSION['rndnum2'] = rand(1, 12);
}
else
if($_SERVER["REQUEST_METHOD"] == "POST")
{
    $answer = trim($_POST["answerInput"]);
    $check = $_SESSION['rndnum1']*$_SESSION['rndnum2'];
    if( $answer == $check)
    {
        $msg = "Correct!";
    }
    else
    {
        $msg = "Wrong!";
    }
}
echo "<h3>". $_SESSION['rndnum1'] . " x " . $_SESSION['rndnum2'] . "</h3>";
if ($_POST['submit'])
{
    echo $msg;
}





?>

<form action="<?php echo $_SERVER['PHP_SELF'];  ?>" method="post" >
 <table>
  <tr>
   <td>
    First Name:&nbsp;
   </td>
   <td>
    <input type="text" name="answerInput" value="<?php echo $answer; ?>" size="20"/>
   </td>
   <td>
    <?php echo $answerError; ?>
   </td>
  </tr>
  <tr>
   <td class="signupTd" colspan="2">
    <input type="submit" name="submit" value="Submit"/>
   </td>
  </tr>
 </table>
</form>