Я пытаюсь сделать онлайн-опрос с помощью codeigniter, где есть динамическая викторина с каким-то предметом. Пользователь может добавить вопрос и ответ с множественным выбором в каждом вопросе. Как я могу получить значение каждого ответа в каждом ответе на множественный выбор по каждому вопросу?
<?php echo form_open_multipart('c_kuis/addKuisAnswer'); ?> <?php foreach($soalKuis as $row){?> <?php $jawab_array = array($row->pil_a,$row->pil_b,$row->pil_c,$row->pil_d); ?> <p><?=$row->soal?></p> <input type="radio" name="jawaban<?=$row->id_soal?>" value="A">A.<?=$jawab_array[0]?></input><br> <input type="radio" name="jawaban<?=$row->id_soal?>" value="B">B.<?=$jawab_array[1]?></input><br> <input type="radio" name="jawaban<?=$row->id_soal?>" value="C">C.<?=$jawab_array[2]?></input><br> <input type="radio" name="jawaban<?=$row->id_soal?>" value="D">D.<?=$jawab_array[3]?></input><br> <input type="hidden" name="id_soal_kuis" value="<?=$row->id_soal?>"></input> <br><br> <?php } ?> <button class="btn btn-primary" type="submit">Submit</button> <?php form_close(); ?>
и это код выглядит, когда я пытаюсь проверить:
<input type="radio" name="jawaban1" value="A">A.Hamster</input><br> <input type="radio" name="jawaban1" value="B">B.Tiger</input><br> <input type="radio" name="jawaban1" value="C">C.Shark</input><br> <input type="radio" name="jawaban1" value="D">D.Lion</input><br> <br><br> <input type="radio" name="jawaban2" value="A">A.was</input><br> <input type="radio" name="jawaban2" value="B">B.have</input><br> <input type="radio" name="jawaban2" value="C">C.am</input><br> <input type="radio" name="jawaban2" value="D">D.is</input><br> <br><br> <button class="btn btn-primary" type="submit">Submit</button>
Вот мой контроллер выглядит так:
public function addKuisAnswer(){ if($this->session->userdata('data_user')->level != 1){ redirect('/c_user/login'); } $id_soal_kuis = $_POST['id_soal_kuis']; $id_user = $this->session->userdata('data_user')->id_user; $answer = $_POST['jawaban']; //The Problem's here... I should put jawaban with id_soal. Because the answer named 'jawaban1','jawaban2' etc it will follow the id_soal. How can i insert it? $this->load->model('m_kuis'); $this->m_kuis->createAnswerKuis($id_soal_kuis, $id_user, $answer); echo " <script> alert('Jawaban Tugas Tersimpan!'); history.go(-2); </script>"; }
Вот моя модель:
public function createAnswerKuis($id_soal_kuis, $id_user, $answer){ $data = array( 'id_soal_kuis'=>$id_soal_kuis, 'id_user' => $id_user, 'jawaban_kuis' => $answer ); $this->db->set('tgl_jawab', 'NOW()', FALSE); $this->db->insert('jawab_kuis', $data); }
Я хочу, чтобы таблица выглядела так: Это изображение таблицы базы данных, которую я сделал. Я хочу вставить данные следующим образом.
Проблема в контроллере. Как мой контроллер может name="jawaban<?=$row->id_soal?>"
значение имени радиокнопки name="jawaban<?=$row->id_soal?>"
В базе данных?
я надеюсь, что это небольшое изменение поможет вам
public function addKuisAnswer(){ if($this->session->userdata('data_user')->level != 1){ redirect('/c_user/login'); } $id_soal_kuis = $_POST['id_soal_kuis']; $id_user = $this->session->userdata('data_user')->id_user; $this->load->model('m_kuis'); $i=1; while(isset($_POST['jawaban'.$i])) { $answer = $_POST['jawaban'.$i]; // var_dump($answer); $this->m_kuis->createAnswerKuis($id_soal_kuis, $id_user, $answer); $i++; } echo " <script> alert('Jawaban Tugas Tersimpan!'); history.go(-2); </script>"; }
вpublic function addKuisAnswer(){ if($this->session->userdata('data_user')->level != 1){ redirect('/c_user/login'); } $id_soal_kuis = $_POST['id_soal_kuis']; $id_user = $this->session->userdata('data_user')->id_user; $this->load->model('m_kuis'); $i=1; while(isset($_POST['jawaban'.$i])) { $answer = $_POST['jawaban'.$i]; // var_dump($answer); $this->m_kuis->createAnswerKuis($id_soal_kuis, $id_user, $answer); $i++; } echo " <script> alert('Jawaban Tugas Tersimpan!'); history.go(-2); </script>"; }
вы можете изменить имя радиокнопки в последовательном порядке (потому что нет необходимости добавлять id в переключатель)
<?php $i=1; foreach($soalKuis as $row){?> <?php $jawab_array = array($row->pil_a,$row->pil_b,$row->pil_c,$row->pil_d); ?> <p><?=$row->soal?> <input type="hidden" value=<?php echo $row->id_soal?> name='id_soal'<?= $i ?>/></p> <input type="radio" name="jawaban<?=$i?>" value="A">A.<?=$jawab_array[0]?></input><br> <input type="radio" name="jawaban<?=$i?>" value="B">B.<?=$jawab_array[1]?></input><br> <input type="radio" name="jawaban<?=$i?>" value="C">C.<?=$jawab_array[2]?></input><br> <input type="radio" name="jawaban<?=$i?>" value="D">D.<?=$jawab_array[3]?></input><br> <input type="hidden" name="id_soal_kuis" value="<?=$row->id_soal?>"></input> <br><br> <?php $i++;} ?>
Это вопрос, который вы имели в виду:
Как я могу вставить в базу данных значение имени радиокнопки = "jawabanid_soal?>"?
или, как прочитать значение выбранного переключателя, а затем вставить его в БД?
Я отвечу на обоих. Чтобы прочитать значение ответов, вы можете использовать цикл foreach
:
<?php $egabat= array(); foreach($soalKuis as $row){ $egabat[$row->id_soal]= $_POST["jawaban".$row->id_soal]; } ?>
Чтобы вставить значение в БД, если это MySql, я рекомендую это очень полезное руководство.
function insert($postdata) //modelfunction for insert { $array( $tablevalues= 'filed1'=>$_POST["jawaban".$row->id_soal], // consider field1 as ur table field ); $this->db->insert('table_name',$tablevalues); }
Вы можете поместить значение $ row-> id_soal в скрытое поле имени массива при отправке формы, затем получить значения переключателя с динамическими идентификаторами, которые поступают из скрытого поля.
<?php $egabat= array(); foreach($_POST['hiddenfield'] as $idsoal){ $egabat[$idsoal]= $_POST["jawaban".$idsoal]; } ?>
Вот как это сделать:
<?php echo form_open_multipart('c_kuis/addKuisAnswer'); ?> <?php foreach($soalKuis as $row){?> <?php $jawab_array = array($row->pil_a,$row->pil_b,$row->pil_c,$row->pil_d); ?> <p><?=$row->soal?></p> <input type="radio" name="jawaban[<?=$row->id_soal?>]" value="A">A.<?=$jawab_array[0]?></input><br> <input type="radio" name="jawaban[<?=$row->id_soal?>]" value="B">B.<?=$jawab_array[1]?></input><br> <input type="radio" name="jawaban[<?=$row->id_soal?>]" value="C">C.<?=$jawab_array[2]?></input><br> <input type="radio" name="jawaban[<?=$row->id_soal?>]" value="D">D.<?=$jawab_array[3]?></input><br> <input type="hidden" name="id_soal_kuis" value="<?=$row->id_soal?>"></input> <br><br> <?php } ?> <button class="btn btn-primary" type="submit">Submit</button> <?php form_close(); ?>
и в контроллере вы будете иметь эти значения в массиве, который можно получить следующим образом:
<?php foreach($this->input->post('jawaban') as $radio){ echo $radio; }