[英]Problems with PHP and MYSQL in designing this game
***我對 PHP 非常陌生,並且盡我所能學習,我們只學習了兩周的語言。 請耐心等待我。 這是在本地主機上的 Xampp 上運行的文件。****
我正在設計一個問答游戲,用戶有一個下拉框到 select 年級,然后另一個下拉框到 select 他們想要選擇的類別,然后他們單擊提交。 我有一個包含 3 個表(年級、類別和包含 100 個問題列表的問題表)的數據庫。 如果 grade = 1 且 category = 1,它將返回 5 個一年級語言問題。
我的問題是我希望能夠在同一個頁面上完成所有這些處理,但我不確定這是否可能。 我的代碼也很長,因為我們學習 PHP 的時間並不長。 該頁面會很好地返回問題,但我無法驗證用戶對與從數據庫中提取的正確答案相對應的 5 個答案框的輸入。 正確/不正確循環的 output 也會在用戶輸入答案並點擊提交之前顯示。 我也有一個分數統計來跟上輸贏。 是否可以在單個 PHP 頁面上完成所有這些操作? 我有兩個 forms 去,一個用於有問題的東西,另一個用於涉及答案的東西。
我可以分段粘貼我的一些代碼,但不是全部,因為它真的很長。 同樣,我很擅長 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 來縮短代碼
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.