다중체크 문자열 치환 질문좀 드리겠습니다

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
다중체크 문자열 치환 질문좀 드리겠습니다

QA

다중체크 문자열 치환 질문좀 드리겠습니다

본문

작은별님께서 알려주신링크로 원하는걸 결과를 얻었지만 다른부분문제로 문의드립니다

 

write

<?php
$schedule = explode(",", $write['schedule']); //옵션1
?>

<th>학문 일정관리</th>
 <td>
<input type="checkbox" name="schedule[0]" value="수학"<?php echo ($schedule[0]=="수학") ? ' checked="checked"':'';?>> 수학
<input type="checkbox" name="schedule[1]" value="문학"<?php echo ($schedule[1]=="문학") ? ' checked="checked"':'';?>> 문학
<input type="checkbox" name="schedule[2]" value="역사"<?php echo ($schedule[2]=="역사") ? ' checked="checked"':'';?>> 역사
<input type="checkbox" name="schedule[3]" value="영어"<?php echo ($schedule[3]=="영어") ? ' checked="checked"':'';?>> 영어
</td>

 

write_update_skin

$schedule= "$schedule[0],$schedule[1],$schedule[2],$schedule[3]"; // 옵션1
$sql = "UPDATE ".$write_table." SET schedule=".$schedule." WHERE idx=".$idx;
sql_query($sql);

 

문학 역사를 체크하고 저장하면 디비에 문학,역사 이렇게 들어가는게 아니고 ,문학,역사, 이렇게 체크가 없는거는 ,가 들어가는데 체크한것만 들어가게 하고 싶습니다

 

그리고 view페이지에서 <?php echo preg_replace("/,/", " ", $view['schedule']); ?> 로 불러오면

문학 역사 이렇게 나오게 되어있는데 마찬가지고 문학,역사 이렇게 보여주고 싶습니다

 

조금만 도움을 주시면 감사하겠습니다

이 질문에 댓글 쓰기 :

답변 3

$schedule= "$schedule[0],$schedule[1],$schedule[2],$schedule[3]"; // 옵션1

$schedule = implode(",", $_POST['schedule']);

implode 사용해보니 체크박스에 체크표시부분이 문제가 생깁니다
수학 문학을 체크하면 체크표시가 제대로 나오지만
수학 영어 또는 문학 역사 를 하면 체크표시가 안보입니다

write.php


$schedule = explode(",", $write['schedule']);
$items = array("수학", "문학", "역사", "영어");
foreach($items as $v) {
	$cheked = in_array($v, $schedule) ? " checked" : "";
	echo "<input type='checkbox' name='schedule[]' value='".$v."'".$checked." />";
}

write_update.skin.php

$schedule = implode(",", $_POST['schedule']);

지금 질문을 남기신 콤마를 없앤다는 것 자체가 앞에 배열마다 인덱스를 넣으신 걸 놓고 보면 말이 안 되는 겁니다. 그리고 배열은 굳이 인덱스를 따로 지정 안 하셔도 됩니다. 자동적으로 0부터 시작입니다.

왕계란님의 말씀대로 다시금 수정해보았습니다. 디비 저장은 체크한 그대로 잘 들어갑니다. 하지만  배열 순서가 안맞으면 체크박스 표시가 안되는거 같습니다 예를 들어보면 수학,역사를 체크하면 수학[v] 문학[] 역사[] 영어[] 이렇게 수학만 체크되고 역사,영어를 체크하면 수학[] 문학[] 역사[] 영어[]
이렇게 출력이됩니다..잘 가르쳐주시는데 실력이 못따라가서 번거롭게 해드려서 죄송합니다

위에 제가 foreach로 돌린 저거 그대로 사용하신 건가요?
디비에 값이 콤마 없이 수학,영어 이렇게 들어갔다고 가정을 하면 write.php 페이지에서 in_array로 배열 중에 값이 있는지 체크를 해서 있는 애들만 checked 값을 줘서 체크되게 처리합니다.
$items = array("수학", "문학", "역사", "영어");
print_r($schedule);
이렇게 찍어 보세요. 값이 어떻게 나오는지.

네 올려주신 값 그대로 사용했습니다 한번 체크해보겠습니다

체크를 해보니 Array ( [0] => 문학 [1] => 영어 ) 이렇게 값은 정상적으로 들어가지만 체크박스에 체크가 안되고있습니다.


$str = "";
foreach($schedule as $key => $value)    {
    if ($value) {
        if ($str) $str .= ", ";
        $str .= $value;
    }
}
$sql = "UPDATE ".$write_table." SET schedule=".$str." WHERE idx=".$idx;
sql_query($sql);

이렇게 하시면 될겁니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 4

회원로그인

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