Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter][MySQL]Quiz, przekazanie danych z widoku do kontrolera
Forum PHP.pl > Forum > PHP > Object-oriented programming
konrad9ok
Witam,

od jakiegoś czasu robię projekt egzaminatora online, quizu. Wszystko szło dobrze, dopóki nie chciałem zapisać wybranych przez użytkownika odpowiedzi do bazy danych. Sam egzamin wyświetlam w formie formularza, pobieram ilość pytań a następnie wyświetlam je jako radiobuttony w formularzu. Problemem jest wychwycenie wybranych odpowiedzi i zapisanie je w bazie. Męczę się już trochę z tym i już mi brakuje pomysłów, wiem, że problem jest z moimi zmiennymi, prawdopodobnie źle je przekazuję i źle próbuje odczytać. Oto mój kod:

Kontroler

  1. public function begin_test($id_test){
  2.  
  3. $this->form_validation->set_rules('username', 'Username', 'min_length[1]|max_length[30]');
  4. $i=0;
  5. $data['max'] = $this->Students_model->amount_of_questions($id_test);
  6. $data['questions_test'] = $this->Students_model->get_questions_for_exam($id_test);
  7. $data['test_name'] = $this->Students_model->get_test_name_by_id($id_test);
  8. $data['subject_name'] = $this->Workers_model->get_subject_name_by_id_test($id_test);
  9.  
  10.  
  11. if($this->form_validation->run() == FALSE){
  12.  
  13. $data['main_content'] = 'students/exam_view';
  14. $this->load->view('layouts/main',$data);
  15.  
  16.  
  17. }
  18.  
  19. else {
  20.  
  21.  
  22.  
  23. $this->Students_model->add_result_to_database($id_test,$results);
  24.  
  25.  
  26. $this->session->set_flashdata('test_finished','Test został wysłany. Wyniki będą dostępne w sekcji Moje Testy');
  27.  
  28. redirect('students_site/show_students_tests');
  29.  
  30.  
  31.  
  32. }
  33.  
  34. }
  35. }


Widok

  1. <h3>Test: <?php echo $test_name->name_test ?>
  2. Przedmiot: <?php echo $subject_name->name_subject ?> <br>
  3. Pozostały czas Y <br>
  4. Ilość pytań: <?php echo $max->amount ?> </h3>
  5. <link rel="stylesheet" href="assets/css/bootstrap.min.css">
  6.  
  7. <?php echo form_open('students_site/begin_test/'.$test_name->id_test); ?>
  8.  
  9. <?php $i=1; ?>
  10. <?php foreach($questions_test as $question_test) : ?>
  11.  
  12.  
  13.  
  14. <?php echo $i ?>.<?php echo $question_test->question ?><br>
  15.  
  16. <?php
  17. $data['results'] = array(
  18. 'name' => 'answer'.$question_test->id_test_item,
  19. 'id' => $question_test->id_test_item,
  20. 'value' => $question_test->answerA,
  21. 'checked' => false,
  22. 'style' => 'margin:10px',
  23. ); ?>
  24.  
  25. <?php echo form_radio( $data['results']); ?> <?php echo $question_test->answerA ?><br>
  26.  
  27. <?php
  28. $data['results'] = array(
  29. 'name' => 'answer'.$question_test->id_test_item,
  30. 'id' => $question_test->id_test_item,
  31. 'value' => $question_test->answerB,
  32. 'checked' => false,
  33. 'style' => 'margin:10px',
  34. ); ?>
  35.  
  36. <?php echo form_radio( $data['results']); ?> <?php echo $question_test->answerB ?><br>
  37.  
  38. <?php
  39. $data['results'] = array(
  40. 'name' => 'answer'.$question_test->id_test_item,
  41. 'id' => $question_test->id_test_item,
  42. 'value' => $question_test->answerC,
  43. 'checked' => false,
  44. 'style' => 'margin:10px',
  45. ); ?>
  46.  
  47. <?php echo form_radio( $data['results']); ?> <?php echo $question_test->answerC ?><br>
  48.  
  49. <?php
  50. $data['results'] = array(
  51. 'name' => 'answer'.$question_test->id_test_item,
  52. 'id' => $question_test->id_test_item,
  53. 'value' => $question_test->answerD,
  54. 'checked' => false,
  55. 'style' => 'margin:10px',
  56. ); ?>
  57.  
  58. <?php echo form_radio( $data['results']); ?> <?php echo $question_test->answerD ?><br><br>
  59. <?php $i=$i+1; ?>
  60.  
  61.  
  62. <?php endforeach; ?>
  63.  
  64. <br><br>
  65.  
  66. <?php
  67. $data['results'] = array("value" => "Wyślij odpowiedzi",
  68. "name" => "submit",
  69. "class" => "btn btn-primary"); ?>
  70. <p>
  71. <?php echo form_submit($data['results']); ?>
  72. </p>
  73.  
  74. <?php echo form_hidden('username', 'johndoe'); ?>
  75. <?php echo form_close(); ?>
  76.  
  77.  


Model:

  1. public function add_result_to_database($id_test,$quess){
  2.  
  3. foreach ($quess as $ques){
  4.  
  5. if($this->input->post('answer'.$ques->id)->checked == true){
  6.  
  7. $datass = array(
  8.  
  9. 'id_question' => $this->input->post('answer'.$ques->id),
  10. 'id_student_answer' => $this->input->post('answer').$ques->value,
  11. 'id_user' => $this->session->userdata('user_id'),
  12. 'id_test' => $id_test
  13.  
  14. );
  15.  
  16. $insert = $this->db->insert('students_answer', $datass);
  17. }
  18.  
  19. }
  20. return true;
  21. }
markonix
Nie widzę, aby zmienna $results została uzupełniona w ogóle w jakieś dane z POST. W magiczny sposób to się nie zrobi.
konrad9ok
problem już rozwiązany, zmieniłem nazwy radiobuttonów doklejając im numer pytania, a nie jego ID, temat do zamknięcia.
Rysh
Trochę z innej beczki, ale w modelu nie powinieneś używać zmiennej $this->input->post() - model ma za zadanie odebrać dane i wykonać co trzeba, a nie sprawdzać czy coś istnieje - od tego jest kontroler.

//jeśli się mylę proszę o poprawienie mnie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.