2013-11-09 2 views
0

여러 개의 드롭 다운 상자에서 여러 값을 보유하고있는 여러 선택된 배열에서 많은 시간을 보냈습니다. 원하는 값을 표에 삽입하는 것이 좋습니다. 나는 (> 입력 -> 포스트 ('카테고리') $ this-)`에서 print_r 때Codeigniter 데이터베이스에 선택된 여러 값을 삽입하십시오.

하자가 나는, 그 테이블로 때 삽입 그러나

Array ([0] => 1 [1] => 2 [2] => 2) 

을 표시, 드롭 다운 상자에서 1,2,3 선택되었습니다 말의 3 개의 값 모두 대신 마지막 값만 삽입됩니다. 나는이 유효 검증, :에 삽입 할

$this->form_validation->set_rules('category[]', 'Category', 'required'); 

if($this->form_validation->run()) { // validation ok 

    if(!is_null($data = $this->db_model->save_listing(   
     $this->form_validation->set_value('category[]') 
    ))) { // success 

    //some message to acknowledge success created. 

    } 
} 

모델 검증과 경우에 값을 전달

$category = array(
    'name' => 'category', 
    'id' => 'category' 
); 

<select name="category[]" id="<?php echo $category['id'] ?>" multiple="multiple"> 
        <?php 
        foreach($catOpts as $catOpt) 
        { 
         $selected = ($this->input->post('category')==$catOpt->category_name) ? 'selected' : ''; 
         echo '<option value="'.$catOpt->category_id.'" '.$selected.'>'.$catOpt->category_name.'</option>'; 
        } 
        ?> 
       </select> 

컨트롤러에서 :

여기에 몇 가지 값을 선택 보기입니다 표 :

function save_listing($category) 
{ 

    $data = array(
     'category_id' => $category 
    ); 

    $this->db->insert('listing', $data); 

    return TRUE; 

} 

모든 값 (배열)을 컨트롤러 $this->form_validation->set_value('category[]')에 전달한 다음 모델 기능 save_listing()을 수행하고 모든 값을 데이터베이스의 해당 열에 저장하는 방법을 모르겠습니다.

제 문제를 해결하는 데 도움을주십시오. 많은 포럼을 통해 찾아 보았지만 해결 방법은 없습니다.

감사합니다. 당신의 분야가 배열 인 경우

답변

0

는, 당신은에 :

$data= array(); 

while($v = $this->form_validation->set_value("field[]")) 
{ 
    $data[] = $v; 
} 

당신이 그것을 마지막 값을 반환하지 않는 경우.

또한 $this->input->post('fields')에 의해 값을 가져올 수 있지만 htmlspecialchars와 같은 값에는 정상 성 규칙이 적용되지 않습니다. 물론

, 그 다른 것들처럼 문서에 지정된 아니에요 ..

소스 /system/libraries/Form_validation.php :

/** 
* Get the value from a form 
* 
* Permits you to repopulate a form field with the value it was submitted 
* with, or, if that value doesn't exist, with the default 
* 
* @access public 
* @param string the field name 
* @param string 
* @return void 
*/ 
public function set_value($field = '', $default = '') 
{ 
    if (! isset($this->_field_data[$field])) 
    { 
     return $default; 
    } 

    // If the data is an array output them one at a time. 
    //  E.g: form_input('name[]', set_value('name[]'); 
    if (is_array($this->_field_data[$field]['postdata'])) 
    { 
     return array_shift($this->_field_data[$field]['postdata']); 
    } 

    return $this->_field_data[$field]['postdata']; 
} 
관련 문제