CI 묻고 답하기

제목 [html]select -> null 값을 mongodb에 저장하려 합니다
글쓴이 루아루아루 작성시각 2014/09/23 11:45:50
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 14611   RSS
국가 이름들이  checkbox 에 있고 checkbox를 클릭하면 value="y"로 줍니다. 체크 안하면 당연히 null

그래서 model파일에 다음과 같이

$row['nation'] = array(    "inter"            => $post["inter"],
                                "korea"            => $post["korea"],
                                "france"        => $post["france"],
                                "germany"        => $post["germany"], 
                                          --- 후략 ----

$result = $this->collection->insert( $row, array('safe'=>true) );


작성하였습니다.

작성완료를 하면 각 checkbox 마다 undefined index 메시지를 띄웁니다.

몽고db에는 제대로 null값이 들어가고 list page에도 글 작성이 제대로 된걸로 뜨는데 왜이러는걸까요;;
 
 다음글 다국어 작업중 궁금증이.. JS파일에 박혀있는 문장은 ... (2)
 이전글 파일 업로드 관련 질문입니다. (2)

댓글

darkninja / 2014/09/23 12:57:24 / 추천 0
좀더 자세한 소스코드를 올려 주실수 없으신가요?

왜 이런 문제만 보면 호기심이 폭발하는지 ㅠㅠ
루아루아루 / 2014/09/23 14:25:44 / 추천 0
으 결국 해결했습니다

컨트롤러 파일에서 일일히 if(empty($post['나라이름']) { $post['나라이름'] = null} 로 일일히 변환해줬는데

너무 비효율적인거 같네요;;

좀더 자세한 소스를 올리자면...

[view 단] - checkbox의 name이름은 일부러 다르게 주었습니다.
<form action="option/create" method="post">
   <input type="checkbox" name="inter" value="y"> inter <br />
   <input type="checkbox" name="korea" value="y"> korea <br />
   <input type="checkbox" name="france" value="y"> france <br />
     ........... 후략 ..........
</form>


[controller 단]
$post = $this -> input -> post(NULL, TRUE);
function create(){

// 이 부분에 if(empty($post['나라이름'])){ $post['나라이름']=null;] 을 삽입

        $this -> option_m -> create($post);
        $referer = "/option/lists";
        redirect($referer);
}


[model 단]
function create($post){

$row['nation'] = array ( "inter"            => $post["inter"],
                                "korea"            => $post["korea"],
                                "france"        => $post["france"],
                            ........후략 ..........
 $result = $this->collection->insert( $row, array('safe'=>true) );
}


원래 소스의 대략적인 부분만 발췌했습니다.
 
들국화 / 2014/09/23 14:29:13 / 추천 0
checkbox는 체크하지 않으면 아무것도 안넘어 갑니다.
한대승(불의회상) / 2014/09/23 14:40:29 / 추천 0
이런 비슷한 질문 하셨던 분이 계셨던거 같은데... ^^
저는 이런식으로..
 
$column_info = array(
    'brand_delivery_price_id', // primary_key
    'brand_make_info_id', // 업체회워 id
    'brand_delivery_id', // 배송정보 id
    'shipping_type', // 배송방법
    'charging_time', // 과금시점
    'deliveryfee', // 배송비
    'delivery_extracost', // 추가배송비
    'amount_policy', // 수량정책
    'price_policy', // 금액정책
    'amount_each_policy' // 수량별도정책
);

$post = $chk_column($this->input->post(), $column_info);
함수..
function chk_column($pdata, $column_info) {
 $data = array();

 foreach($column_name_info as $key) {
  isset($pdata[$key]) && $data[$key] = $pdata[$key];
 }

 return $data;
}
루아루아루 / 2014/09/23 15:40:35 / 추천 0
감사합니다 덕분에 코드가 간결해졌네요 ㅎㅎ
darkninja / 2014/09/23 15:50:37 / 추천 0
체크박스를 이렇게 처리하면 여러개를 한칼럼에 묶을수 있겠네요.
감사합니다.

모든 값을 넘기지 않아도 된다면 아래와 같이 할수도  있겠네요.
  $tm_nation = array();
  $input_nation = $this->input->post('nation');
  if ($input_nation) {
    foreach ($input_nation as $nation) {
      $tm_nation[$nation] = 'y';
    }
  }
    echo "";
    var_dump($tm_nation);
    echo "";
  exit;      

function create($tm_nation){
  $row['nation'] = $tm_nation;
 
  $result = $this->collection->insert( $row, array('safe'=>true) );
}
  <input type="checkbox" name="nation[]" value="inter"> inter <br />
  <input type="checkbox" name="nation[]" value="korea"> korea <br />
  <input type="checkbox" name="nation[]" value="france"> france <br />