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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
안녕하세요 아침부터 배열 다중체크박스 관련해서 질문했던사람인데 도와주세요ㅠ

QA

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

본문

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번 체크박스 두개 선택시 wr_10 값에 1|2 가 찍혀야된단말씀이신거죠..?저기있는 소스가 전부인데ㅠ

안녕하세요 윗댓글에 그레이님이 해준대로하니까 체크한 항목의 밸류값으로 wr_10에 들어가는데요 제가 구현하고싶은건 ,,
ㄱㄱ ㄴㄴ ㄷㄷ ㄹㄹ 칸이있으면  1만 체크했을시 ㄱㄱ에만 o 표시를하고싶은데 어떻게 구현해야할까요 ㅠㅠㅠ

지금의 코드대로라면,

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'; ?>>
 

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)) ~

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

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

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

<?php

~

~

?>

 

답변을 작성하시기 전에 로그인 해주세요.
전체 250
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT