2017-09-03 72 views
0

我正在使用codeigniter框架,並且我試圖從表單保存數據時遇到了一些問題。從包含數組的foreach中插入數據

如何爲每個包含其他信息的user_answer插入一個新行?

謝謝!

這是在控制我的foreach循環和調用模型

foreach($_POST as $key => $val) 
     { 
      $data[$key] = $this->input->post($key); 
     } 
$this->quiz_model->save_answers($data); 

這是模型

function save_answers($data) 
    { 
      foreach ($data['user_answer'] as $key) { 
        $this->db->insert('answer', $data); 
      }  
    } 

表被設置爲

  • answer_id(自動遞增)
  • quiz_id
  • question_id
  • USER_ID
  • user_answer

瓦爾轉儲

data => array(3) { ["user_id"]=> string(9) "anonymous" ["quiz_id"]=> string(2) "24" ["question_id"]=> string(2) "18" ["user_answer"]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } } 

data['user_answers'] => array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } 

錯誤

Error Number: 1054 

Unknown column 'Array' in 'field list' 

INSERT INTO `answer` (`user_id`, `quiz_id`, `question_id`, `user_answer`) VALUES ('anonymous', '24', Array) 
+0

首先,我會使用prepared語句,codeigniter沒有的東西。我會建議你在你的模型中使用mysqli。你很容易sql注入。 –

+0

@Robert Rocha只要他使用db->插入他的「所有值都會自動轉義,產生更安全的查詢。」另外,您可以使用PDO和mysqli查詢。根據codeigniter docuentation – Brad

回答

2

您應該創建新組每user_answer數據。試試這個:

function save_answers($data) 
{ 
     foreach ($data['user_answer'] as $key) { 
       $new_data = array('user_id' => $data['user_id'], 'quiz_id' => $data['quiz_id'], 'question_id' => $data['question_id'], 'user_answer' => $key) 
       $this->db->insert('answer', $new_data); 
     }  
} 
+0

這正是醫生的命令! – JonYork

0

你有問題foreach循環。您save_answers方法更改爲:

function save_answers($data) 
{ 
     foreach ($data['user_answer'] as $key=>$value) { //<------------change here 
       $data_insert = array('user_id'=>$data['user_id'],'quiz_id'=>$date['quiz_id'],'question_id'=>$data['question_id'],'user_answer'=>$value); //create new array 
       $this->db->insert('answer', $data_insert);//<------------change here 
     }  
}