Я сделал тест с использованием CodeIgniter и хочу знать, как сохранить результаты теста с помощью phpmyadmin - PullRequest
0 голосов
/ 15 марта 2019

Я хотел бы создать таблицу результатов на phpmyadmin со следующими полями: имя пользователя, оценка, тема и рейтинг.У меня уже есть таблица пользователей и викторин, таблица пользователей, содержащая имя пользователя, и таблица викторин, содержащая тему.Когда тест отправляется, он отображает оценку, просматривая выбранные пользователями ответы, а затем проверяет в таблице тестов, выбрал ли пользователь правильный ответ из 4 возможных вариантов (поля: choice1, choice2, choice3 и answer, но он рандомизированкогда выводится).Мне бы хотелось, чтобы по завершении теста пользователь сохранял результаты, включая имя пользователя, тему, оценку и рейтинг (например, 10/10 = A, 5/10 = D).Пожалуйста, помогите!

Отображение результатов:

<div id="container">
    <h1>Play the Computing Quiz!</h1>

    <?php $score =0; ?>

      <?php $array1= array(); ?>
      <?php $array2= array(); ?>    
      <?php $array3= array(); ?>
      <?php $array4= array(); ?>
      <?php $array5= array(); ?>
      <?php $array6= array(); ?>
      <?php $array7= array(); ?>
      <?php $array8= array(); ?>

         <?php foreach($checks as $checkans) { ?>
               <?php array_push($array1, $checkans); } ?>


        <?php foreach($results as $res) { ?>
               <?php array_push($array2, $res->answer); 
                     array_push($array3, $res->quizID); 
                     array_push($array4, $res->question); 
                     array_push($array5, $res->choice1); 
                     array_push($array6, $res->choice2); 
                     array_push($array7, $res->choice3); 
                     array_push($array8, $res->answer); 
               } ?>


           <?php 
               for ($x=0; $x <10; $x++) { ?>

    <form method="post" action="<?php echo base_url();?>index.php/welcome/index">  


    <p><?=$array4[$x]?></p>


      <?php if ($array2[$x]!=$array1[$x]) { ?>

           <p><span style="background-color: #FF9C9E"><?=$array1[$x]?></span></p>
           <p><span style="background-color: #ADFFB4"><?=$array2[$x]?></span></p>

      <?php } else { ?>

           <p><span style="background-color: #ADFFB4"><?=$array1[$x]?></span></p>

           <?php $score = $score + 1; ?>

    <?php } } ?>

    <br><br>

    <p><b>Your Score: </b></p>
      <p><b><?=$score?>/10</b></p>

    <input type="submit" value="Play Again!">

    </form>

</div>

</body>
</html>

Контроллер:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Questions extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->database();
    }

    public function quizdisplay()
    {

        $this->load->model('quizmodel');
        $this->data['questions'] = $this->quizmodel->getQuestions();
        $this->load->view('play_quiz', $this->data);

    }

        public function resultdisplay()
    {
        $this->data['checks'] = array(
             'ques1' => $this->input->post('quizid1'),
             'ques2' => $this->input->post('quizid2'),
             'ques3' => $this->input->post('quizid3'),
             'ques4' => $this->input->post('quizid4'),
             'ques5' => $this->input->post('quizid5'),
             'ques6' => $this->input->post('quizid6'),
             'ques7' => $this->input->post('quizid7'),
             'ques8' => $this->input->post('quizid8'),
             'ques9' => $this->input->post('quizid9'),
             'ques10' => $this->input->post('quizid10'),
        );

        $this->load->model('quizmodel');
        $this->data['results'] = $this->quizmodel->getQuestions();
        $this->load->view('result_display', $this->data);
    }
}

Модель:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class quizmodel extends CI_Model {

    public function getQuestions()
    {
        $this->db->select("quizID, question, choice1, choice2, choice3, answer, subject");
        $this->db->from("quiz");
        $this->db->where("subject",'computing');


        $query = $this->db->get();

        return $query->result();

        $num_data_returned = $query->num_rows;

        if ($num_data_returned < 1) {
          echo "There is no data in the database";
          exit();   
        }
    }
}

1 Ответ

0 голосов
/ 15 марта 2019

Ваша оценка неверна. Что я получаю от вашего вопроса, когда пользователь играет в викторине и отправляет свой ответ, вы получите массив ответов, например,

Шаг 1:

    $quiz=array(
          'answer_1' => 4,
          'answer_2' => 2,
          'answer_3' => 1,
          'answer_4' => 3,
          .....
          .....
          'answer_10' =>2,

)

Шаг2:

Полагаю, в вашей "таблице тестов" хранятся данные для правильного ответа (вы не очень хорошо это описали)

Надеюсь, в вашей таблице тестов хранятся такие данные, как,

ans_col   - marks_col
answer_1  -  1
answer_2  -  4
answer_3  -  4
answer_4  -  3
answer_5  -  2
answer_6  -  2
answer_7  -  1
answer_8  -  4
answer_9  -  3
answer_10  - 1

Выполнить запрос:

SELECT question_number,marks 
FROM Quiz

Это вернет вам массив, скажем, $ answer. (Проверьте, имеет ли массив $ answer ту же структуру, что и у массива $ quiz, если нет, то сделайте структуру $ answer такой же, как и у массива $ quiz.)

Теперь, Шаг: 3

$result = array_diff_assoc($quiz,$answer);
$wrong_ans = count($result);
$marks_scored = 10 - $wrong_answer;
if($marks_scored >= 8){
    $grade = 'A';
}
elseif($marks_scored > 5 && $marks_scored < 8)
{
    $grade = 'B';
}
elseif($marks_scored > 2 && $marks_scored < 5)
{
    $grade = 'c';
}
else
{
    $grade = 'd';
}

шаг: 4 Для ваших требований

$username = fetch it from user table using user_id;
$subject = fetch it from user table using subject_id;
$score = $marks_scored;
$ranking = $grade;

Шаг: 5

Теперь создайте массив с именем $ output, создайте ключи, такие как имя пользователя, тема, оценка, ранжирование, с соответствующим значением и передайте этот массив '$ output' в файл представления. *

Примечание. Проверьте наличие структур массива.

Надеюсь, это очистит ваши сомнения.

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