개발 Q&A

제목 multi select 박스 저장관련 문의
글쓴이 freeseamew 작성시각 2014/07/14 16:04:51
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 14519   RSS
이런 형태의 멀티 샐랙트 박스의 값들중 예를 들어 1,3,5 가 선택 되었으면

<select id="mlt_select" name="mlt_report_relation[]">
      <option value="1">1번</option>
      <option value="2">2번</option>
      <option value="3">3번</option>
      <option value="4">4번</option>
      <option value="5">5번</option> 
</select>


특정 테이블에 선택된 값을 배열로 담아서

특정 테이블에 루프를 돌면서 입력되게 하고 싶은게 목적입니다. 

일단 저는 

model은 아래와 같이 만들었고

    function create_report_relation($chk) {

        $data = array(
            'report_pre_seq' => $this->input->post('report_seq', true),
            'user_pre_seq' => $this->$chk
        );

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


controllers 는 아래와 같이 구성했습니다. 

$data_array = array();
$data_array = $this->input->post('mlt_select', true);

$i = 0;

foreach ($data_array as $dt) {
                         
      $this->report_m->create_report_relation($dt[$i]);
      $i = $i + 1;

 }

하지만 역시 에러가 ㅠㅠ

도움 부탁 드리겠습니다. 








 
 다음글 jquery mobile 사용하지 않고 디바이스 방향전... (1)
 이전글 자바 스크립트에서 날짜 데이터 처리 하면 nan 이 ... (4)

댓글

kaido / 2014/07/14 17:11:28 / 추천 0
  function create_report_relation($chk) {

        $data = array(
            'report_pre_seq' => $this->input->post('report_seq', true),
            'user_pre_seq' =>$chk
        );

        $this->db->insert('report_relation', $data);
    }
kaido / 2014/07/14 17:13:41 / 추천 0
그리고
'report_pre_seq' => $this->input->post('report_seq', true),

이 부분은 컨트롤러에서 받아 오셔서 모델로 넘겨주시는게 좋습니다.
function create_report_relation($chk,$report_seq) {

}
이렇게요
letsgolee / 2014/07/14 17:36:03 / 추천 0
1. multi select를 하려면 name은 mlt_report_relation[]이렇게 잡았다고 해서 멀티 선택이 되는 것이 아니라 multiple이 선언되어야 해요. 즉 <select id="mlt_select" name="mlt_report_relation[]" multiple> 이런식으로 되어야 하구요...
2. id가 전송되는 것이 아니라 name이 전송되는 겁니다. 위의 select를 받으려면 php에서 $this->input->post('mlt_report_relation')이렇게 되구요.
3. 위의 $this->input->post('mlt_report_relation')을 $data_array로 받으면 일반 배열형태로 옵니다. 즉 $data_array[0], $data_array[1]이런 값들이 오는거구요. 따라서 $this->report_m->create_report_relation($dt[$i]); 의 $dt[$i]는 말도 안되는 값이 들어가는 겁니다. 예를 들어 1번, 3번을 선택하면 $data_array의 첫번째 값은 '1'이 되고 여기에서 $dt[$i}값은 0번째 스트링이 되어 '1'이 들어가지만 두번째에서는 '3'번 값이 들어가고 여기서 $i는 1이 되었으므로 널값이 되는거구요(이거 이해되나요?). 원하는 건  $this->report_m->create_report_relation($dt);이렇게 적으면 되고 $i값을 이터레이트하는 건 의미 없으니까 삭제...
3. function create_report_relation()에서  $this->$chk 이게 뭔가요??? 만일 $chk값이 1이면 $this->1이렇게 되는데 이건 php 문법 오류입니다... 왜냐면 1값이 변수의 자리에 있는데 변수의 이름은 반드시 영문이나 언더바로 써야하기 때문입니다. 아마도 $this->$chk가 아니라 그냥 $chk 써야 원하는대로 될 것 같네요.

솔직히 전체적으로 답이 안나옵니다... 기분은 나쁘시겠지만 php 문법과 html 문법을 조금 더 공부하고 codeigniter를 쓰심이 어떨지 권해드립니다.
freeseamew / 2014/07/16 00:22:13 / 추천 0
움 제가 설명을 좀 잘 못 한거 같네요 ㅠㅠ 

여튼 자답 하겠습니다. 

일단 view에는 

<select id="mlt_select" name="relations[]" multiple="multiple"   >

<?php 
foreach ($list as $lt) {
?>
<option value="<?php echo $lt->user_seq; ?>"><?php echo $lt->user_business_name; ?></option>
<?php
}
?>
</select>


이런 식으로 했고, 여기에 사용한 jquery.multiple.select.js 라는 것을 사용 했습니다. 
나름 유용하더라구요. 단지 여기서 제가 위 소스에는 나와 있지 않지만 어떤 라디오 값을 선택해야만 활성화 되게 해볼려고 했는데 거기에서 오류가 있었습니다. select 자체에  disable을 걸면 값을 받아오질 못하더라구요 

그래서 아래와 같이 처리 하고 
    $(document).ready(function(){
        // select 에 기본으로 disable로 해두면 값을 넘겨 받지 못함
        $("select#mlt_select").multipleSelect("disable");
    });

특정 라디오가 체크되면 아래와 같이 enable로 변경하는 형태로 하니 값을 잘 받게 되었습니다. 

    $("input[name='report_rule']").change(function(){
        var radioValue = $(this).val();

        if(radioValue == 3){
            $("select#mlt_select").multipleSelect("enable");
        }
        else {
            $("select#mlt_select").multipleSelect("disable");
        }
    });


다음으로 controller는 아래와 같이 하여 선택된 값을 루프돌면서 저장하도록 했습니다. 

                        $relation =  $this->input->post('relations', true);
                        //$relation =  $_POST['relations'];

                        if(isset($relation)){
                              
                              $count_relation = count($relation); 
                              for($i=0; $i<$count_relation; $i++){
                                    
                                    $this->report_m->create_report_relation($relation[$i]);
                              }
                                      
                        }                       

model은 특별할 것이 없습니다. 

    function delete_report_relation(){

        $report_seq = $this->input->post('report_seq', true);

        $this->db->where('report_pre_seq', $report_seq);
        $this->db->delete('report_relation');
    }


.net 하다 요즘 ci로 작업을 하다보니 사실 서툰게 많습니다. 혼란을 드려 죄송합니다. ^^

혹시 저처럼 select 문 등으로 루프돌면서 저장할 때 위와 같은 방법도 쓸만한 거 같습니다. 

이상입니다.