PHP和MYSQL在设计这个游戏时的问题



***我对PHP非常非常陌生,我正在尽我所能学习,我们只学习了两周的语言。请耐心等待。这是一个在本地主机Xampp上运行的文件。***

我正在设计一个智力竞赛游戏,用户有一个下拉框来选择等级,然后有另一个下拉方框来选择他们想要选择的类别,然后他们点击提交。我有一个数据库,里面有3个表(等级、类别和一个包含100个问题的问题表(。如果等级=1,类别=1,它将返回5个一年级语言问题。

我的问题是,我希望能够在同一页上完成所有这些处理,但我不确定这是否可能。我的代码也很长,因为我们学习PHP的时间不长。页面会很好地返回问题,但我很难让它验证用户对5个答案框的输入,这些答案框对应于从数据库中提取的正确答案。在用户输入答案并点击提交之前,还会显示正确/不正确循环的输出。我也有一个分数记录,以跟上胜利或失败。有可能在一个PHP页面上完成所有这些吗?我有两份表格,一份是关于问题的,另一份是涉及答案的。

我可以将一些代码分段粘贴,但不能全部粘贴,因为它非常长。再说一次,我非常擅长C++,但还没有学到很多关于PHP的知识。

<!-- Previous form above for the questions that also has a form action of #. -->
<form action ="#" method = "post">
Your Answers:<br>
1) <input type="text" name="input1"><br><br>
2) <input type="text" name="input2"><br><br>
3) <input type="text" name="input3"><br><br>
4) <input type="text" name="input4"><br><br>
5) <input type="text" name="input5"><br><br>
<input type="submit" value="Check" id="check_answ"><br>
Correct Answers:<br>
<?php
//check the answer box 
$input1 = filter_input(INPUT_POST, 'input1', FILTER_SANITIZE_STRING);
$input2 = filter_input(INPUT_POST, 'input2', FILTER_SANITIZE_STRING);
$input3 = filter_input(INPUT_POST, 'input3', FILTER_SANITIZE_STRING);
$input4 = filter_input(INPUT_POST, 'input4', FILTER_SANITIZE_STRING);
$input5 = filter_input(INPUT_POST, 'input5', FILTER_SANITIZE_STRING);
//function to store the answer query
function storeQueryAns($category, $grade, $quesID)
{
	   $query_answer = "select answer from questions where catID = '$category' and gradeID = '$grade' and quesID = '$quesID'";
	   return $query_answer;
}
$query_answer1 = storeQueryAns($category, $grade, $quesID1);
$answer1 = mysqli_query($con, $query_answer1);

$query_answer2 = storeQueryAns($category, $grade, $quesID2);
$answer2 = mysqli_query($con, $query_answer2);

$query_answer3 = storeQueryAns($category, $grade, $quesID3);
$answer3 = mysqli_query($con, $query_answer3);

$query_answer4 = storeQueryAns($category, $grade, $quesID4);
$answer4 = mysqli_query($con, $query_answer4);

$query_answer5 = storeQueryAns($category, $grade, $quesID5);
$answer5 = mysqli_query($con, $query_answer5);

//function to store the correct answers in a string variable
function storeAnswer($answerID)
{
	   while($row = $answerID->fetch_assoc()) 
	 {
return (string)$row['answer']."<br>";
}
}
	 
//storing the correct answers in the variables 
$CorrAnswer1 = storeAnswer($answer1);
$CorrAnswer2 = storeAnswer($answer2);
$CorrAnswer3 = storeAnswer($answer3);
$CorrAnswer4 = storeAnswer($answer4);
$CorrAnswer5 = storeAnswer($answer5);?>

<!-- Printing out the correct answers -->
<p>1) <?php echo $CorrAnswer1;?> </p>
	
	  <p>2) <?php echo $CorrAnswer2;?> </p>
	  
	  <p>3) <?php echo $CorrAnswer3;?></p>
	  
	  <p>4) <?php echo $CorrAnswer4;?></p>
	  
	  <p>5) <?php echo $CorrAnswer5;?></p>

<?php
//function to check the answers 
function checkAnswers($input, $CorrAnswer, &$total_win, &$total_loss)
{
	  if($input == $CorrAnswer)
	  {
		  echo nl2br("Correct!n");
		  $total_win++;
	  }
	  
	  else if($input == NULL)
	  {
		  echo "Answer cannot be left blank.";
	  }
	  
	  else 
	  {
		  echo nl2br("Incorrect!n");
		  $total_loss++;
	  }
}

checkAnswers($input1, $CorrAnswer1, $total_win, $total_loss);
checkAnswers($input2, $CorrAnswer2, $total_win, $total_loss);
checkAnswers($input3, $CorrAnswer3, $total_win, $total_loss);
checkAnswers($input4, $CorrAnswer4, $total_win, $total_loss);
checkAnswers($input5, $CorrAnswer5, $total_win, $total_loss);

	  ?>
	  
</form>

如果我理解正确,首先需要收集输入,然后显示正确的答案。一个可能的代码可能是这个

<?php
$numInputs = 5;
$i =1;
$inputs= array();
$valid=true;
while($i <= $numInputs && $valid == true){
$str = "input".$i;
if(isset($_POST[$str]) && !preg_match("/^s+$/", $_POST[$str])) $inputs[] = $_POST[$str];
else $valid = false;
$i++;
}
if($valid === true && sizeof($inputs) > 0){
$answer1 = getQueryAns($category, $grade, $quesID1);
checkAnswers($inputs[0], $answer1, $total_win, $total_loss);
$answer2 = getQueryAns($category, $grade, $quesID2);
checkAnswers($inputs[1], $answer2, $total_win, $total_loss);
$answer3 = getQueryAns($category, $grade, $quesID3);
checkAnswers($inputs[2], $answer3, $total_win, $total_loss);
$answer4 = getQueryAns($category, $grade, $quesID4);
checkAnswers($inputs[3], $answer4, $total_win, $total_loss);
$answer5 = getQueryAns($category, $grade, $quesID5);
checkAnswers($inputs[4], $answer5, $total_win, $total_loss); ?>
Correct Answers:<br>
<p>1) <?=$answer1;?> </p>
<p>2) <?=$answer2;?> </p>
<p>3) <?=$answer3;?></p>
<p>4) <?=$answer4;?></p>
<p>5) <?=$answer5;?></p>
<?php }else{ ?>
<form method = "post">
Your Answers:<br>
1) <input type="text" name="input1"><br><br>
2) <input type="text" name="input2"><br><br>
3) <input type="text" name="input3"><br><br>
4) <input type="text" name="input4"><br><br>
5) <input type="text" name="input5"><br><br>
<input type="submit" value="Check" id="check_answ"><br>
</form>       
<?php  } 
function checkAnswers($input, $CorrAnswer, &$total_win, &$total_loss){
if($input == $CorrAnswer){
echo nl2br("Correct!n");
$total_win++;
}
else{
echo nl2br("Incorrect!n");
$total_loss++;
}
}
function getQueryAns($category, $grade, $quesID){
return $con->query("select answer from questions where catID = '$category' and gradeID = '$grade' and quesID = '$quesID'")->fetch_assoc()["answer"];
}
?>

如果没有一个输入为空,这将显示答案。如果不是,则显示形式。此外,如果你收集了一个数组中的所有任务,你可以做一个for,使代码更短

最新更新