Alright, so I've been working on this for two days now - my code is somewhat sloppy & jumbled but I've gone over hundreds of questions, websites, etc. etc. looking for an answer or simply an explanation I understood; unfortunately, I still have been unsuccessful in my attempts.

I am build a "Quiz" Game in PHP/HTML - the website references a database, specifically, a tabled labeled "answers" which holds the following information:

 - ID: Auto-Increment
 - Question: Varchar
 - Answer: Varchar
 - Comment: Varchar

Now, for a little information on the site - Once a user logs in, he/she can "play" the game; the game is simply an HTML form, which above it displays a random "answers table" question. The form has 4 user inputs but only requires two. Let me get into the code details and then I will ask my question:

My index.php page (which contains the game form) is currently:

<?php # index.php
 session_start();
   //check session first
   if (!isset($_SESSION['email'])){
     include ('../includes/header.php');
   }else
         {
   session_start();
      include ('../includes/header.php');
      require_once ('../../mysql_connect.php');
      $query = "SELECT * FROM answers ORDER BY RAND() LIMIT 1"; 
      $result = @mysql_query ($query);
      $num = mysql_num_rows($result);
         if ($num > 0) { // If it ran OK, display all the records.
            while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {        
 ?>

 <div class="newGame">
    <h2>Are you a Question Master?<hr /></h2>
    <h3 style="color:#000">Find Out Now!</h3>
 </div>
 <br />

 <div class="newGameContain">
    <form action="gameSubmit.php" method="post" autocomplete="off">
       <h2><? echo $row["Question"]."<hr />"; ?></h2>
       <h3>Enter Player Answers</h3>
           <p><input type="text" placeholder="Player 1" name="player1" value="<? echo $_POST['player1']; ?>" /> <input type="text" placeholder="Player 2" name="player2" value="<? echo $_POST['player2']; ?>" /></p>
           <p><input type="text" placeholder="Player 3" name="player3" value="<? echo $_POST['player3']; ?>" /> <input type="text" placeholder="Player 4" name="player4" value="<? echo $_POST['player4']; ?>" /></p>
           <p><input type="submit" class="submitButton" /> <input type="reset" class="resetButton" value="Reset" /> </p>
           <input type="hidden" name="ID" value="<?php echo $row["ID"]; ?>" />
           <input type="hidden" name"Answer" value="<?php echo $row['Answer']; ?>" />
           <input type="hidden" name="submitted" value="TRUE" />
    </form>
    <p></p>
  </div>
  <br />


 <?php
    } //end while statement
} //end if statement
mysql_close();
//include the footer
include ("../includes/footer.php");
 }
 ?>

Then my gameSubmit.php page (form action) looks like this - I will only give a snapshot, not the whole thing:

 <?php # index.php
 session_start();
 //check session first
 if (!isset($_SESSION['email'])){
    include ('../includes/header.php');
 }else
     {
 session_start();
 include ('../includes/header.php');
 require_once ('../../mysql_connect.php');
$query = "SELECT * FROM answers ORDER BY RAND() LIMIT 1"; 
$result = @mysql_query ($query);
$num = mysql_num_rows($result);
if ($num > 0) { // If it ran OK, display all the records.
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {        
 ?>

 <? if (isset($_POST['submitted'])){

      $correct1Msg = "<div class='correct1Msg'><p style='color:#000;font-family:Arial, Helvetica, sans-serif;'>Player 1 entered the <span id='answerUnder'>correct answer</span>.</p></div><p></p>";
      $correct2Msg = "<div class='correct2Msg'><p style='color:#000;font-family:Arial, Helvetica, sans-serif;'>Player 2 entered the <span id='answerUnder'>correct answer</span>.</p></div><p></p>";

      $incorrect1Msg = "<div class='incorrect1Msg'><p style='color:#F00;font-family:Arial, Helvetica, sans-serif;'>Player 1 entered the <span id='answerUnder'>incorrect answer</span>.</p></div><p></p>";
      $incorrect2Msg = "<div class='incorrect2Msg'><p style='color:#F00;font-family:Arial, Helvetica, sans-serif;'>Player 2 entered the <span id='answerUnder'>incorrect answer</span>.</p></div><p></p>";

          $player1Answer = $_POST['player1'];
          $player2Answer = $_POST['player2'];
          $player3Answer = $_POST['player3'];
          $player4Answer = $_POST['player4'];

          $questionID = $row['ID'];

    if ($questionID == "1" && $player1Answer != "Red"){
        echo $incorrect1Msg;
    }elseif ($questionID == "2" && $player1Answer != "4"){
        echo $incorrect1Msg;
    }else {
        echo $correct1Msg;
    }

    if ($questionID == "1" && $player2Answer == "Red"){
        echo $correct2Msg;
    }elseif ($questionID == "2" && $player2Answer == "4"){
        echo $correct2Msg;
    }else{
        echo $incorrect2Msg;
    }
 }
 ?>

 <?php
           } //end while statement
      } //end if statement
      mysql_close();
      //include the footer
      include ("../includes/footer.php");
 }
 ?>

As a note, the gameSubmit.php page also has identical message and if...elseif... statements for player3Answer & player4Answer.

So my question is...

If a user is logged in and opens the index.php page, he/she is prompted with the "echo $row ["Question"]" (which is a question pulled from the MySQL database using $query = "SELECT * FROM answers ORDER BY RAND() LIMIT 1"; - The user then proceeds to enter an answer in each player's respective text input. Once the user clicks the submit button, the form redirects to gameSubmit.php - once loaded, if(isset($_POST['submitted'])){ launches and cross checks each users answer and displays the respective message.

Currently, my form redirects to gameSubmit.php, however, it doesn't reference the previous question for the correct answer - thus its sheer luck the identical answer appears when "grading" the answers.

What do I need to do/what needs to be corrected in order to achieve input validation on the form action page?

Once again, I simply want to retrieve a question at random and on submit check the inputted answers with the correct answer - I would also like my code to be able to retrieve the correct answer rather than me having to type out each answer, so that way, if a record gets added, I dont have to update the code.

Thank for your time and the help, it is much appreciated! (It's finals week and I couldn't be more stressed)

  • Rockmandew
share|improve this question
    
Also, to see a working example - kethcart.uwmsois.com/qm/htdocs/Home/index.php - Feel free to register an account and head on over to the logged in homepage. – rockmandew Dec 12 '13 at 21:53
up vote 4 down vote accepted

Just pass a POST element from index page to gameSubmit.php with the question id.

Add a hidden element in index page like..

<input type="hidden" name="questionId" value="<?php echo $row['id']; ?>">

So, You can get the question id in pageSubmit.php using $_POST['questionId']

share|improve this answer
    
Isn't that sort of already what I have? Also, I tested this method and it doesn't seem to work, it is always giving me an incorrect answer. Any thoughts? – rockmandew Dec 12 '13 at 21:50
    
sriraman - I figured it out! Turns out, I was missing an '=' sign after the hidden value name so it wasn't passing the answer to the action page. Thanks for your help! – rockmandew Dec 12 '13 at 22:43

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.