제목 | 일주일동안 헤메다 체크박스 선택 수정하기 관련 글 올립니다. | |||
---|---|---|---|---|
글쓴이 | rhe | 작성시각 | 2015/07/31 07:11:45 | |
|
||||
|
||||
다음글 | DB 접속 오류 입니다 (1) | |||
이전글 | 파일 업로드 질문입니다. (2) | |||
ci개밟자
/
2015/07/31 09:37:11 /
추천
0
for 부분 코드가 이상한데요?
|
kaido
/
2015/07/31 09:48:17 /
추천
0
저는 이렇게 만듭니다.
checkbox name="chk[]" value="{id}" hidden name="data_{id}" ※ {} 표현은 변한 다는 의미로 넣은 것입니다. 뷰에서는 이렇게 쌍이 되는 배열을 넣습니다. 가령 10개가 있다고 합시다. [0 부터 9까지] 이걸 전송 하면 체크 박스는 체크 된것만 전송 됩니다. data 는 10개 전부 전송 됩니다. 가령 2번 5번 7번이 체크 되었다고 생각 합니다. 그럼 체크 박스에 들어있는 값들을 뽑아보면 2, 5, 7 번째 애들의 value 값 [2,5,7]를 가져올수 있습니다. $data_{id} 형태로 가변 변수를 사용 하면 해당 값의 데이터 값들만 찾을 수 있습니다. 요약 하면... 체크박스는 체크된것만 가져옵니다. 데이터 값은 전부 전송 됩니다. 체크박스와 데이터는 매치가 되어서 전송 되지 않습니다. 요 3가지만 인지 하시면 금방 푸실거라 생각 됩니다. 가변이 싫으면 그냥 배열 data[] 로 해서 key 값만 가져오셔도 됩니다. [전 가변을 사랑 하는 사람이라서... 가변처리 하면 스크립트에서도 처리 하기 편하고 말이죠.] |
letsgolee
/
2015/07/31 18:00:48 /
추천
0
$chks = $this->input->post('chk');
$idxes = $this->input->post('idx'); $names = $this->input->post('name'); for ($i=0; count($chks); $i++) { $no = $chks[$i]; // 체크박스 번호 $idx = $idxes[$i]; $name = $names[$i]; echo "$i ====$no[$i]======= $idx[$i] ------$name[$i]"; } 중요한 거는 name="name[]"식으로 된다면 php에서는 $this->input->('name')은 array가 된다는 점. |
rhe
/
2015/08/01 10:23:28 /
추천
0
답변감사합니다
kaido님과 letsgolee님의 말씀이 힌트가 되었습니다. 1. 체크박스는 체크된것만 가져옵니다. 데이터 값은 전부 전송 됩니다. 체크박스와 데이터는 매치가 되어서 전송 되지 않습니다. 2. 중요한 거는 name="name[]"식으로 된다면 php에서는 $this->input->('name')은 array가 된다는 점. 그래서 폼 검증을 하는 점을 고려하여 데이터를 포문으로 배열을 돌리고 이프문으로 데이터 비교를 하였습니다 |
rhe
/
2015/08/01 10:27:08 /
추천
0
$cnt = $this->input->post('cnt'); // 총 리스트 갯수 - 데이터는 총 갯수로 넘어온다. for ($i=0; $i<$cnt; $i++) { $idx = $this->input->post('idx'); $name = $this->input->post('name'); for($k=0; $k < count($this->input->post('chk')); $k++) { $no = $this->input->post('chk'); // 체크박스 번호 $chk_no = $no[$k] - 1; if($i == $chk_no){ echo "$chk_no =======$idx[$i]"; } } } 맨 위의 소스를 보시면 체크박스는 값이 1부터 시작이고 데이터 배열은 0부터 시작이라 $chk_no = $no[$k] - 1; 해서 비교했습니다. $k= $k+1; 이부분을 $i--; 이부분 근처에 두면 체크박스도 0부터 시작이라 $chk_no = $no[$k]; 이렇게 해도 됩니다. |