好吧,我已经为此工作了两天了 - 我的代码有点草率和困惑,但我已经浏览了数百个问题、网站等。寻找答案或简单的解释我明白了;不幸的是,我的尝试仍然没有成功。
我正在用 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 页面还具有针对player3Answer 和player4Answer 的相同消息和if...elseif... 语句。
所以我的问题是......
如果用户登录并打开index.php页面,系统会提示他/她“echo $row ["Question"]”(这是使用$query = "SELECT从MySQL数据库中提取的问题) * FROM 答案 ORDER BY RAND() LIMIT 1"; - 然后用户继续在每个玩家各自的文本输入中输入答案。用户单击提交按钮后,表单将重定向到 gameSubmit.php - 加载后,if(isset ($_POST['subscribed'])){ 启动并交叉检查每个用户的回答并显示相应的消息。
目前,我的表单重定向到 gameSubmit.php,但是,它没有引用上一个问题来获取正确答案 - 因此,在对答案进行“评分”时出现相同的答案真是太幸运了。
为了在表单操作页面上实现输入验证,我需要做什么/需要纠正什么?
再一次,我只是想随机检索一个问题,并在提交时检查输入的答案是否正确 - 我还希望我的代码能够检索正确的答案,而不是我必须键入每个答案,这样,如果添加了一条记录,我就不必更新代码。
感谢您的时间和帮助,非常感谢! (这是期末考试周,我压力太大了)
- 石曼杜
最佳答案
只需将 POST 元素与问题 ID 从索引页传递到 gameSubmit.php。
在索引页中添加隐藏元素,例如..
<input type="hidden" name="questionId" value="<?php echo $row['id']; ?>">
因此,您可以使用 $_POST['questionId']
在 pageSubmit.php 中获取问题 id
关于PHP/MySQL "Quiz"游戏 - 表单输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20543522/