dongsuikai8286 2013-12-12 12:25 采纳率: 100%
浏览 34
已采纳

PHP / MySQL“测验”游戏 - 表单输入值

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
  • 写回答

1条回答 默认 最新

  • dongyushen9063 2013-12-12 12:40
    关注

    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']

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面