테스트 사이트 - 개발 중인 베타 버전입니다

안녕하세요 아침부터 배열 다중체크박스 관련해서 질문했던사람인데 도와주세요ㅠ 채택완료

aaab 7년 전 조회 3,587

write.skin.php 에 이렇게 배열로 체츠박스를 만들구

</p>

<p><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"> ㄹㄹ</p>

<p>

write_update.skin.php 에

</p>

<p>$wr_10 = implode('|',$_POST['wr_10']);

$sql = "UPDATE {$write_table} SET wr_10 = '{$wr_10}' WHERE wr_id = '{$wr_id}'";</p>

<p>

이렇게 넣어줬는데   체크박스를  을 선택하고 작성완료를 하면   phpmyadmin 에서 확인한 결과 array 로 찍힙니다..

원래 array로 찍히는게 정상인가요? 아니면 선택한 value값이 찍히는게 정상인가요?

 

만약 array 로 나오는게 맞다면 list.skin.php 에 선택한 항목에 대한 값이있으면 "O" 로 어떻게 표현을할까요??

 

 

또한 array가 아닌 선택한 value값 ( 1,2,3,4 ) 가 찍히는게 맞다면 위에서 뭐가 문제일까요?

 

댓글을 작성하려면 로그인이 필요합니다.

답변 4개

채택된 답변
+20 포인트
7년 전

php에서, 같은 name을 가지는 체크박스 값은 배열로 인지하기 때문에 array로 나옵니다.

 

체크박스 내용이 많지 않다면, name 값을 달리 하는게 훨씬 간단할 수 있습니다.

 

이렇게 해보면 어떨까요..??

 

write.skin.php

</p>

<p><?php</p>

<p>$wr_chk = explode("|", $write[wr_10]);</p>

<p>$chk1 = $wr_chk[0];</p>

<p>$chk2 = $wr_chk[1];</p>

<p>$chk3 = $wr_chk[2];</p>

<p>$chk4 = $wr_chk[3];</p>

<p>?></p>

<p><input type="checkbox" name="chk1" value="1" <?=($chk1=="1")? 'checked':'';?>> ㄱㄱ</p>

<p><input type="checkbox" name="chk2" value="2" <?=($chk2=="2")? 'checked':'';?>> ㄴㄴ</p>

<p><input type="checkbox" name="chk3" value="3" <?=($chk3=="3")? 'checked':'';?>> ㄷㄷ</p>

<p><input type="checkbox" name="chk4" value="4" <?=($chk4=="4")? 'checked':'';?>> ㄹㄹ</p>

<p>

 

write_update.skin.php

</p>

<p>$wr_10 = $chk1."|".$chk2."|".$chk3."|".$chk4;</p>

<p>$sql = "UPDATE $write_table SET wr_10 = '$wr_10' WHERE wr_id = '$wr_id'";</p>

<p>

 

list.skin.php

</p>

<p>if($list[$i][wr_10] <> "" || $list[$i][wr_10] <> "|||" ) echo "O";</p>

<p>

 

이것이 안되면 소스를 보내주셔도 됩니다.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

a
aaab
7년 전
그렇다면 이게 안된다면 제가 짠 소스에서 name=wr_10[] 부분을

name=wr_10_1[]
name = wr_10_2[] 이런식으로 주면 문제없나요?
그레이
7년 전
name=wr_10_1[] --> name=wr_10_1


[]을 넣는 이유가 ..??
a
aaab
7년 전
내일 소스를 보내드려도 괜찮을까요?
그레이
7년 전
아무때나 상관없습니다만,
바쁜거 아닌가요..??
a
aaab
7년 전
알려주신대로 write, write_update 소스를 줘서 제대로 들어가는데요

list 에서 그레이님이 소스를 알려주신대로 하면 write 에서 체크를 안해도 전부 o 표시로되서요ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

7년 전

write_update.skin.php  코드는 전혀 문제가 되는 곳이 없습니다

wr_10[] <---이렇게 name을 주는 것도 전혀 문제가 될 것이 없습니다

앞의 질문을 보니 혹시 코드 시작 부분 끝 부분에 php 시작과 끝 부분을 넣지않은 것 아닌가요?

~

~

?>

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

7년 전

아까 제가 답을 달아드렸었는데요

님의 마음이 급한건 알겠는데 소스도 부족하고 님이 배열을 잘모르니 곤란합니다

일단 db에 array 로 들어간 자체가 잘못된겁니다

다른 분들도 이걸 설명드리지만 이해를 못하시니 저도 답답하네요 ㅜㅠ

로그인 후 평가할 수 있습니다

답변에 대한 댓글 5개

a
aaab
7년 전
저도 제가 본다고 보는데 이해가 잘 안되서요ㅠㅠ제가 짠 소스대로라면
1번 2번 체크박스 두개 선택시 wr_10 값에 1|2 가 찍혀야된단말씀이신거죠..?저기있는 소스가 전부인데ㅠ
나시
7년 전
그니까요 ㅠㅠ
일단 wr_10 이름을 바꾸세요
중복되니까 이상하네요
그리고 중간에 값을 echo 로 단계별로 확인해야죠
a
aaab
7년 전
안녕하세요 윗댓글에 그레이님이 해준대로하니까 체크한 항목의 밸류값으로 wr_10에 들어가는데요 제가 구현하고싶은건 ,,
ㄱㄱ ㄴㄴ ㄷㄷ ㄹㄹ 칸이있으면 1만 체크했을시 ㄱㄱ에만 o 표시를하고싶은데 어떻게 구현해야할까요 ㅠㅠㅠ
나시
7년 전
일단 다른 질문으로 올리세요 ^^
a
aaab
7년 전
덕분에 많이 공부해서 해결했습니다 ㅠㅠㅠ

<?if(strstr($list[$i]['wr_10'], '1')!=""){?>O<?}?> 이렇게 소스를 줘서 해결했어요 !

근데 또다른 문제가 생겼네요ㅠㅠ

댓글을 작성하려면 로그인이 필요합니다.

7년 전

지금의 코드대로라면,

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 로 체크하는 것이 가능합니다.

  ....

>  

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

a
aaab
7년 전
그렇게 해서 값이 1,2 번째 체크박스 선택시 wr_10에 1,2 로 입력되야맞는거죠?


list.skin.php엔 어떻게 넣어줘야 선택한 1,2, 번 에 o 표시를 할수있을까요?ㅠ
트샷
7년 전
implode(',',$_POST['wr_10']); 로 해야 1,2 식으로 저장이 됩니다.

list 에서도 비슷하게 처리하면 됩니다.

for ($i=0; $i<count($list); $i++) {
$wr_10 = $list[$i]['wr_10'];
$array = explode('|', $wr_10); // db 에 저장된 구분자로..

~ if (in_array('4', $array)) ~

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인