안녕하세요 아침부터 배열 다중체크박스 관련해서 질문했던사람인데 도와주세요ㅠ
본문
write.skin.php 에 이렇게 배열로 체츠박스를 만들구
<input type="checkbox" name="wr_10[]" value="1" id="wr_10"> ㄱㄱ
<input type="checkbox" name="wr_10[]" value="2" id="wr_10"> ㄴㄴ
<input type="checkbox" name="wr_10[]" value="3" id="wr_10">ㄷㄷ
<input type="checkbox" name="wr_10[]" value="4" id="wr_10"> ㄹㄹ
write_update.skin.php 에
$wr_10 = implode('|',$_POST['wr_10']);
$sql = "UPDATE {$write_table} SET wr_10 = '{$wr_10}' WHERE wr_id = '{$wr_id}'";
이렇게 넣어줬는데 체크박스를 을 선택하고 작성완료를 하면 phpmyadmin 에서 확인한 결과 array 로 찍힙니다..
원래 array로 찍히는게 정상인가요? 아니면 선택한 value값이 찍히는게 정상인가요?
만약 array 로 나오는게 맞다면 list.skin.php 에 선택한 항목에 대한 값이있으면 "O" 로 어떻게 표현을할까요??
또한 array가 아닌 선택한 value값 ( 1,2,3,4 ) 가 찍히는게 맞다면 위에서 뭐가 문제일까요?
!-->!-->
답변 4
php에서, 같은 name을 가지는 체크박스 값은 배열로 인지하기 때문에 array로 나옵니다.
체크박스 내용이 많지 않다면, name 값을 달리 하는게 훨씬 간단할 수 있습니다.
이렇게 해보면 어떨까요..??
write.skin.php
<?php
$wr_chk = explode("|", $write[wr_10]);
$chk1 = $wr_chk[0];
$chk2 = $wr_chk[1];
$chk3 = $wr_chk[2];
$chk4 = $wr_chk[3];
?>
<input type="checkbox" name="chk1" value="1" <?=($chk1=="1")? 'checked':'';?>> ㄱㄱ
<input type="checkbox" name="chk2" value="2" <?=($chk2=="2")? 'checked':'';?>> ㄴㄴ
<input type="checkbox" name="chk3" value="3" <?=($chk3=="3")? 'checked':'';?>> ㄷㄷ
<input type="checkbox" name="chk4" value="4" <?=($chk4=="4")? 'checked':'';?>> ㄹㄹ
write_update.skin.php
$wr_10 = $chk1."|".$chk2."|".$chk3."|".$chk4;
$sql = "UPDATE $write_table SET wr_10 = '$wr_10' WHERE wr_id = '$wr_id'";
list.skin.php
if($list[$i][wr_10] <> "" || $list[$i][wr_10] <> "|||" ) echo "O";
이것이 안되면 소스를 보내주셔도 됩니다.
!-->!-->!-->아까 제가 답을 달아드렸었는데요
님의 마음이 급한건 알겠는데 소스도 부족하고 님이 배열을 잘모르니 곤란합니다
일단 db에 array 로 들어간 자체가 잘못된겁니다
다른 분들도 이걸 설명드리지만 이해를 못하시니 저도 답답하네요 ㅜㅠ
지금의 코드대로라면,
1|2|3|4 식으로 DB 저장되어야 합니다.
implode('|',$_POST['wr_10']); 은 배열값을 | 로 합친다는 의미입니다.
쉼표로 하려면, implode(',',$_POST['wr_10']); 입니다.
저장이 1|2|3|4 또는 1,2,4 식으로 저장이 되는 것이 첫번째 입니다.
write_update.skin.php 에서 저장이 그렇게 되지 않은 원인을 먼저 찾아야 할 듯 합니다.
혹 $sql = "~"; 은 문자열 저장만 있기 때문에..
sql_query($sql); 부분이 없다면, 이부분 코드를 추가해주어야 실제로 db 에 저장이 됩니다.
그렇게 저장이 되었다면 explode로 db 값을 다시 배열로 만든다음, in_array 로 체크하는 것이 가능합니다.
<?php $array = explode(' | ', $write['wr_10']); ?>
....
<input type="checkbox" name="wr_10[]" value="4" id="wr_10" <?php if(in_array('4', $array)) echo 'checked'; ?>>
write_update.skin.php 코드는 전혀 문제가 되는 곳이 없습니다
wr_10[] <---이렇게 name을 주는 것도 전혀 문제가 될 것이 없습니다
앞의 질문을 보니 혹시 코드 시작 부분 끝 부분에 php 시작과 끝 부분을 넣지않은 것 아닌가요?
<?php
~
~
?>