제목 | multi select 박스 저장관련 문의 | ||
---|---|---|---|
글쓴이 | freeseamew | 작성시각 | 2014/07/14 16:04:51 |
|
|||
이런 형태의 멀티 샐랙트 박스의 값들중 예를 들어 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
|
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 문 등으로 루프돌면서 저장할 때 위와 같은 방법도 쓸만한 거 같습니다. 이상입니다. |