Проблемы с PHP и MYSQL при разработке этой игры - PullRequest
0 голосов
/ 15 апреля 2020

*** Я очень новичок в PHP и, учась, как могу, мы изучали язык только две недели. пожалуйста, будьте терпеливы со мной. Это файл, работающий в Xampp на localhost. ****

Я разрабатываю игру-викторину, в которой у пользователя есть выпадающее окно для выбора уровня оценки, а затем еще одно выпадающее окно для выбора категории, которую он хочет выберите из, затем они нажимают кнопку «отправить». У меня есть база данных с 3 таблицами (уровень класса, категория и таблица вопросов со списком из 100 вопросов). Если оценка = 1 и категория = 1, то будут возвращены 5 вопросов, которые являются вопросами языка 1-го класса.

Моя проблема в том, что я хочу иметь возможность выполнять всю эту обработку на одной странице, но я не уверен, возможно ли это. Мой код также очень длинный, потому что мы не изучали PHP очень долго. Страница будет возвращать вопросы просто отлично, но у меня возникли проблемы при получении, чтобы проверить ввод пользователя для 5 полей ответа, которые соответствуют правильным ответам, извлеченным из базы данных. Вывод для правильного / неправильного l oop также отображается, прежде чем пользователь сможет ввести свои ответы и нажать «Отправить». У меня также есть счет, чтобы не отставать от побед или поражений. Возможно ли сделать все это на одной 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>

1 Ответ

0 голосов
/ 15 апреля 2020

Если я правильно понял, сначала вы хотите собрать данные, а затем показать правильные ответы. Возможный код может быть следующим:

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

. Он покажет ответы, если ни один из входов не пуст. если нет, то показывает форму. Также, если вы соберете все квесты в массиве, вы можете сделать код, чтобы сделать код короче

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...