MrEnder
MrEnder

Reputation: 275

Simple POST random number issue in PHP

Ok I am trying to make something to ask you random multiplication questions. Now it asks the questions fine. Generates the random questions fine. But when it reloads the page the random numbers are different...

how can I fix this?

<?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>

Upvotes: 1

Views: 2989

Answers (4)

Adrian A.
Adrian A.

Reputation: 172

Something like this should work.

<?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>

Upvotes: 0

Jason Cohen
Jason Cohen

Reputation: 83051

Include the generated random numbers in hidden form fields so they're submitted to the server.

For example, just inside <form>:

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

Then in PHP, when you're processing the form, use $_POST['rand1'] and $_POST['rand2'] to retreive the original numbers, multiply, then compare with the user's given answer.

Upvotes: 1

Ben Torell
Ben Torell

Reputation: 2093

When you reload the page, $rndnum1 and $rndnum2 are set to new random numbers via the rand() function. That's why they are not staying the same. Try passing the original random numbers along with the POST, and calculate the numbers from $_POST before checking if the answer's correct.

To do this, make sure you include the following line for both random variables in your submission form:

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

Then, on the next load of the page after the answer form is submitted, get the numbers with $_POST['rndnum1'], etc.

Upvotes: 3

SteelBytes
SteelBytes

Reputation: 6965

add srand(0) to top of your code.

actually to you may want to use a cookie that is randomly initialised, and then pass that to srand()

Upvotes: 0

Related Questions