2017-04-04 2 views
1

CodeIgniter에서 값을 내파하고 삽입하는 방법은 무엇입니까?
나는 CodeIgniter 프레임 워크를 사용하여 객관식 퀴즈 스크립트를 만들었습니다.codeigniter에서 db에 값을 삽입하고 삽입하는 방법은 무엇입니까?

내 컨트롤러에서
id userid q_id  answer_id time_taken 
1 1  1,2,3,4,5 2,3,4,5,3 4,5,7,6,7 

:

public function insert_result() 
     { 
    $this->load->model('quiz_models'); 
    $user_id=$this->input->post('user_id'); 
    $qq_id=$this->input->post('questionid'); 
    $answer_id=$this->input->post('AnswerID'); 
    $time_taken=$this->input->post('timetaken'); 
    $question_no=$this->input->post('question_no'); 
    $bd = "$question_no"; 
    switch ($bd) { 
    case"1": 
    $data=array('user_id'=>$user_id, 
       'q_id'=>$qq_id, 
       'answer_id'=>$answer_id, 
       'time_taken'=>$time_taken); 
    $this->quiz_models->insert_result($data);  

    break; 
    case"2": 
    quiz_test(); 
    break; 
    case"3": 
    quiz_test(); 
    break; 
    case"4": 
    quiz_test(); 
    break; 
    case"5": 
    quiz_test(); 
$this->session->unset_userdata('lastids'); 
break; 
default: 
     echo "something is wrong"; 
} 
} 
public function quiz_test() 
    { 
$this->load->model('quiz_models'); 
$quiz=$this->quiz_models->quiz_test(); 
foreach($quiz as $row){ 
$qid=$row->q_id; 
$ans=$row->answer_id; 
$time=$row->time_taken; 
$a = array("$qq_id","$qid"); 
$b = array("$answer_id","$ans"); 
$c = array("$time_taken","$time"); 
$comma = implode(",",$a); 
$comma1 = implode(",",$b); 
$comma2 = implode(",",$c); 
$data=array('q_id'=>$comma, 
      'answer_id'=>$comma1, 
      'time_taken'=>$comma2); 
$this->quiz_model->update_result($data);  
} 
} 
} 

및 모델 :이 같은 사용자 결과를 저장할

function insert_result($data) 
    { 
    $this->dbb->insert('results',$data); 
$sectio=$this->db->insert_id(); 
$this->session->set_userdata('lastids',$sectio); 
    } 
function quiz_test() 
    { 
$ses_id = $this->session->userdata('lastids'); 
      $sql = "SELECT q_id, answer_id, time_taken FROM results WHERE id='$ses_id'"; 
      $query = $this->dbb->query($sql); 
      $result = $query->result(); 
      return $result; 
    } 
function update_result($data){ 
$ses_id = $this->session->userdata('lastids'); 
$this->db->where('id',$ses_id); 
$this->db->update('results',$data); 
} 

나는 아무것도 할 어떤 오류가 표시되지, 일어나지 실행할 때 내가 실수 한거야?
PLS 내가 모든 잘못

+0

보기 파일보기. 당신은 배열로 게시물 값을 가져 가야 –

답변

0

먼저 뭐하는 거지 도와 - 나는 당신이 당신의 데이터를 정상화하여 DB 구조

에 큰 문제를했다고 생각

당신은 저장하는 것을 방지한다

그런 식으로 테이블에 귀하의 정보. 데이터를 올바르게 정상화 할 수 있어야합니다. 당신이 몰라요 경우 방법은 다음 링크가 재미있을 수 있다는 것을해야 할 일 :

Normalization in MYSQL

그러나 가능한 솔루션은 데이터를 구조화하는 것 : 그렇게하기 위해서는

을 - 만들 갱신 및 삽입 사이에 분할 모델의 방법을 저장 -이 모델은 (당신이 컬렉션 개체가 필요 첨가로

class Quiz_Models 
{ 

    private $arrPostData; 

    public function save($arrPostData = false) 
    { 
     $this->arrPostData = (!$arrPostData) ? $this->input->post() : $arrPostData; 

     $id = $this->session->userdata("lastids"); 

     if ($id) 
     { 
      $query = $this->db 
       ->select("*") 
       ->from("results") 
       ->where("id",$id) 
       ->get(); 

      if ($query->num_rows() == 1) 
      { 
       $this->update($query->row(0)); 
      } 
      else return false; 
     } 
     else 
     { 
      $this->insert(); 
     } 

     if ($this->arrPostData['question_no'] == 10) $this->session->unset_userdata("lastids"); 
    } 

    private function update($objData) 
    { 
     $objCollection = new Quiz_Collection(); 
     $objCollection->userId = $objData->userid; 
     $objCollection->id = $objData->id; 


     $arrData = explode($objData->q_id); 
     foreach($arrData AS $key => $quizId) 
     { 

      $objQuiz = new stdClass(); 
      $objQuiz->q_id = $quizId; 
      $objQuiz->answer_id = explode($objData->answer_id)[$key]; 
      $objQuiz->time_taken = explode($objData->answer_id)[$key]; 

      $objCollection->append($objQuiz); 
     } 


     $objQuizFromPost = new stdClass(); 
     $objQuizFromPost->q_id = $this->arrPostData["questionid"]; 
     $objQuizFromPost->answer_id = $this->arrPostData['AnswerID']; 
     $objQuizFromPost->time_taken = $this->arrPostData['timetaken']; 

     $objCollection->addQuizFromPost($objQuizFromPost); 

     $this->db 
      ->where("id",$objCollection->id) 
      ->update("results",$objCollection->getDbData()); 
    } 

    private function insert() 
    { 
     $objCollection = new Quiz_Collection(); 
     $objCollection->userId = $this->arrPostData['user_id']; 

     $objQuizFromPost = new stdClass(); 
     $objQuizFromPost->q_id = $this->arrPostData["questionid"]; 
     $objQuizFromPost->answer_id = $this->arrPostData['AnswerID']; 
     $objQuizFromPost->time_taken = $this->arrPostData['timetaken']; 

     $objCollection->addQuizFromPost($objQuizFromPost); 

     $this->db->insert("results",$objCollection->getDbData()); 

     $this->session->set_userdata("lastids", $this->db->insert_id()); 

    } 

} 

처럼 보일 수 있습니다) 모델 아래에이를 넣어

class Quiz_Collection extends Array_Object 
{ 
    public $userId = 0; 
    public $id = 0; 

    public function addQuizFromPost($objQuiz) 
    { 
     if (intval($objQuiz->q_id) > 0) 
     { 
      foreach($this AS $key => $obj) 
      { 
       if ($obj->q_id == $objQuiz->q_id) 
       { 
        $this->offsetSet($key, $objQuiz); 
        return true; 
       } 
      } 

      $this->append($objQuiz); 
      return true; 
     } 
     return false; 
    } 

    public function sortQuizData($objA, $objB) 
    { 
     if ($objA->q_id == $objB->q_id) return 0; 
     return ($objA->q_id < $objB->q_id) ? -1 : 1; 
    } 

    public function getDbData() 
    { 
     $this->uasort(array($this,"sortQuizData")); 
     $arrData = $this->getArrayCopy(); 

     $arrDbData = [ 
      "userid" => $this->userId, 
      "q_id" => implode(array_map(function($obj){ return $obj->q_id;},$arrData),","), 
      "answer_id" => implode(array_map(function($obj){ return $obj->answer_id;},$arrData),","), 
      "time_taken" => implode(array_map(function($obj){ return $obj->time_taken;},$arrData),","), 
     ]; 

     return $arrDbData; 
    } 
} 

추신 : 이것은 당신이 적절한 방법으로 그렇게 할 수있는 방법을 단지 명령이다. Pls는이 코드를 연구합니다. 계속 진행되는 것을 아직 이해하지 못하면 언제든지 물어보십시오.

+0

때마다 사용자가 10 questios 퀴즈를 취할 수 있습니다. 질문에 사용자가 없다면 10 lastids을 해제하는 방법 –

+0

꽤 간단 - 내가 게시물을 업데이 트 – sintakonte

+0

죄송합니다, 나를위한 각 줄.이 [email protected]에 –

관련 문제