当前位置: 首页 > 知识库问答 >
问题:

PHP/MySQL“问答”游戏-表单输入值

阳福
2023-03-14

好吧,我已经在这方面工作了两天了--我的代码有点草率和混乱,但我已经翻阅了数百个问题,网站等等,寻找一个答案,或者只是一个我理解的解释;不幸的是,我的尝试仍然没有成功。

我正在PHP/HTML中构建一个“问答”游戏--该网站引用了一个数据库,特别是一个标有“答案”的列表,其中包含以下信息:

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

现在,对于站点的一点信息--一旦用户登录,他/她就可以“玩”游戏;游戏只是一个HTML表单,上面显示一个随机的“答案表”问题。该表单有4个用户输入,但只需要两个。让我进入代码的细节,然后我会问我的问题:

我的index.php页面(包含游戏表单)当前为:

<?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");
 }
 ?>

那么我的gameSubmit.php页面(表单动作)看起来是这样的--我只会给出一个快照,而不是全部:

 <?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");
 }
 ?>

请注意,gameSubmit.php页面也有相同的消息和if...elseif...player3Answer和Player4Answer的语句。

所以我的问题是...

如果用户登录并打开index.php页面,会提示他/她“echo$row[”question“]”(这是一个使用$query=“select*from answers ORDER BY RAND()LIMIT 1”从MySQL数据库中提取的问题;-然后用户继续在每个玩家各自的文本输入中输入一个答案。一旦用户单击submit按钮,表单重定向到gameSubmit.php-一旦加载,If(isset($_post['submited'])){启动并交叉检查每个用户的答案并显示各自的消息。

目前,我的表单重定向到gameSubmit.php,但是,它没有引用前面的问题来获得正确答案--因此,在“评分”答案时出现相同的答案完全是它的运气。

为了在表单操作页上实现输入验证,我需要做什么/需要更正什么?

再一次,我只是想随机检索一个问题,并在提交时用正确的答案检查输入的答案--我也希望我的代码能够检索正确的答案,而不是我必须键入每个答案,这样,如果添加了一个记录,我就不必更新代码。

感谢您的时间和帮助,非常感谢!(今天是决赛周,我的压力太大了。)

  • Rockmandew

共有1个答案

岳毅
2023-03-14

只需将一个POST元素从索引页传递给带有问题ID的gameSubmit.php。

在索引页中添加隐藏元素,如..

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

因此,您可以使用$_post['questionid']在pageSubmit.php中获取问题id

 类似资料:
  • 有人能帮我优化这个代码吗?如果我有更多的问题,比如10或20个,它会把一切都搞砸。也许我需要使用循环,但是怎么做呢?以及如何制作,如果用户连续回答错误3次,那么游戏应该停止并提示“游戏结束!”。

  • 分数页面的逻辑是什么: > 所有玩家中的当前用户顺序(如#115):MySql为所有用户选择按分数排序,然后检查当前用户在哪里? 更好的两个分数:获取当前用户,然后选择Limit2,其中score>“$CurrentUserScore”? 减两分:获取当前用户,然后选择LIMIT 2,其中得分<“$CurrentUserScore”? 我觉得这很难缠,还有别的办法吗?

  • 问题内容: 我正在用Java编写游戏,现在是Swing + JOGL-一个带有GLCanvas的JFrame。 我使用etc.事件()处理输入,但似乎无法正常工作: 当我同时按下3个以上的键时,它们无法正确注册 -显然这是键盘的错误,我必须找到替代的控制方案。 窗口丢失后,重新获得焦点,输入完全停止工作… 我究竟做错了什么? 有没有更好的方法来处理Java中的键盘输入? (除非我别无选择,否则我不

  • 所以我正在用Pygame制作一个游戏,我需要一个菜单,让玩家在不同的游戏类型之间进行选择。我试着让它在显示指令时,玩家可以使用键盘选择类型;然而,当我这样做的时候,游戏就会出错。指示将保留在屏幕上(有时会绘制平面精灵)。当按下时,我添加了一行代码来打印shell中的某些内容,但没有打印任何内容。 注释掉的部分是启动游戏的原始代码。

  • 问题内容: 我从终端创建了一个表,然后尝试创建简单的任务:从表单中插入值。这是我的 这是我的。 按下我的保存按钮后,什么也没有发生,数据库仍然为空。我尝试了查询,它按照预期的方式从表单中获取所有值。在尝试从终端检查是否可以正常工作后,我登录到尝试从users表返回所有数据的操作,但得到了空集。 问题答案: 以下代码仅声明了一个包含MySQL查询的字符串变量: 它不执行查询。为此,您需要使用一些功能