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

여분필드 이용해서 체크박스 다중 선택 질문요. 채택완료

kinyenug 4년 전 조회 1,788

write.skin.php

</p>

<p><td>

<!--input name=wr_7 autofocus class="frm_input required" id="wr_7" title="근무형태" value="<?=$write[wr_7]?>" itemname="근무형태"-->

<?php

$wr = explode("|", $write['wr_7']);</p>

<p> ?>

<input type="checkbox" name="wr_7_1" value="주간"  <?php echo ($wr[0] == "주간") ? "checked" : "";?>>주간

<input type="checkbox" name="wr_7_2" value="2교대" <?php echo ($wr[1] == "2교대") ? "checked" : "";?>>2교대

<input type="checkbox" name="wr_7_3" value="3교대" <?php echo ($wr[2] == "3교대") ? "checked" : "";?>>3교대

            </td></p>

<p>

 

write_update.skin.php

 

</p>

<p>$wr_7 = "$wr_7_1|$wr_7_2|$wr_7_3";

$str = $wr_7;

$str = rtrim($str,"|");//문자열 맨 앞 | 제거

$str = ltrim($str,"|");//문자열 맨 뒤 | 제거

$str = str_replace('||','',str_replace('|||','',str_replace('||||','',str_replace('|||||','',$str)))); // 중복되는 | 제거

$str2 = explode("|" , $str);

$cnt = count($str2);

for ($i=0; $i<$cnt; $i++) {

  if($i < $cnt - 1) {   //마지막이 아닌것은 콤마를 찍어줌

    echo trim($cm[$i]). ", ";

    } else {

    echo trim($cm[$i]); //마지막 값은 콤마를 찍지 않음

    }

   }

$sql8 = " update {$write_table} set wr_7 = '{$wr_7}' where wr_id = '{$wr_id}' ";</p>

<p>sql_query($sql8);

 

이 소스 참고 사이트는 

https://ndesign.tistory.com/23 으로 참고했습니다.

 

출력할때 경우의 수로 해보니

 

1번 선택시 - 주간||

1,2번 선택시 - 주간|2교대|

2,3번 선택시 - |2교대|3교대

1,3번 선택시 - 주간||3교대

3번 선택시 - ||3교대

선택 없을때 - ||

 

이렇게 나옵니다 ㅜㅜ 

그리고 | -> , 쉼표 바꿔야하는데 안바꿔지네요 

 

고수님 부탁드립니다!

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

답변 3개

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

저런 복잡한 코드는 필요 없습니다

첫번째 방법 -- 체크박스 name을 배열로 

name='wr7[]' value="주간"

name='wr7[]' value="2교대"

name='wr7[]' value="3교대"

 

write_update.skin.php

$wr_7 ='';

if($wr7[0]) $wr_7 = implode(',', $wr7);

 

두번째 방법 - write_update.skin.php만 수정

$wr7 = array(); $wr_7 ='';

if($wr_7_1) $wr7[] = $wr_7_1;

if($wr_7_2) $wr7[] = $wr_7_2;

if($wr_7_3) $wr7[] = $wr_7_3;

if($wr7[0]) $wr_7 = implode(',', $wr7);

 

그리고 체크박스  echo ($wr[1] == "2교대") ? "checked" : ""; <--이렇게 하면 맞지않습니다

주간, 3교대 2개를 체크한 경우 $wr[1] = 3교대가 되므로 3교대 체크박스에 체크가 되지않으니까요

다음처럼

if( in_array('주간', $wr) ) echo 'checked';

if( in_array('2교대', $wr) ) echo 'checked';

if( in_array('3교대', $wr) ) echo 'checked';

 

 

 

 

 

 

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

답변에 대한 댓글 1개

k
kinyenug
4년 전
감사합니다. 수정해보니 되네요. 하지만 수정할때는 체크한거 없어졌어요 ㅜㅜ

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

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

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

$wr_7 = "$wr_7_1|$wr_7_2|$wr_7_3";
이부분 다 삭제
$sql8 = " update {$write_table} set wr_7 = '{$wr_7}' where wr_id = '{$wr_id}' ";
sql_query($sql8);
로그인 후 평가할 수 있습니다

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

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

로그인