채택완료

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

2018-10-02 (화) 05:10:12 4,034

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

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개 / 댓글 6개

채택된 답변
+20 포인트
2018-10-02 (화) 09:36:14

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

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

답변에 대한 댓글 5개

2018-10-02 (화) 18:42:18
implode 사용해보니 체크박스에 체크표시부분이 문제가 생깁니다
수학 문학을 체크하면 체크표시가 제대로 나오지만
수학 영어 또는 문학 역사 를 하면 체크표시가 안보입니다
write.php
[code]
$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." />";
}
[/code]
write_update.skin.php
[code]
$schedule = implode(",", $_POST['schedule']);
[/code]
지금 질문을 남기신 콤마를 없앤다는 것 자체가 앞에 배열마다 인덱스를 넣으신 걸 놓고 보면 말이 안 되는 겁니다. 그리고 배열은 굳이 인덱스를 따로 지정 안 하셔도 됩니다. 자동적으로 0부터 시작입니다.
2018-10-02 (화) 22:36:55
왕계란님의 말씀대로 다시금 수정해보았습니다. 디비 저장은 체크한 그대로 잘 들어갑니다. 하지만 배열 순서가 안맞으면 체크박스 표시가 안되는거 같습니다 예를 들어보면 수학,역사를 체크하면 수학[v] 문학[] 역사[] 영어[] 이렇게 수학만 체크되고 역사,영어를 체크하면 수학[] 문학[] 역사[] 영어[]
이렇게 출력이됩니다..잘 가르쳐주시는데 실력이 못따라가서 번거롭게 해드려서 죄송합니다
위에 제가 foreach로 돌린 저거 그대로 사용하신 건가요?
디비에 값이 콤마 없이 수학,영어 이렇게 들어갔다고 가정을 하면 write.php 페이지에서 in_array로 배열 중에 값이 있는지 체크를 해서 있는 애들만 checked 값을 줘서 체크되게 처리합니다.
$items = array("수학", "문학", "역사", "영어");
print_r($schedule);
이렇게 찍어 보세요. 값이 어떻게 나오는지.
2018-10-03 (수) 00:19:44
네 올려주신 값 그대로 사용했습니다 한번 체크해보겠습니다

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

자체 해결하였습니다 도움 주셔서 감사합니다..

Copy
$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);

이렇게 하시면 될겁니다.

답변에 대한 댓글 1개

2018-10-02 (화) 18:42:59
기존 쿼리문에서 플래토님 쿼리문을 변경하니깐 값이 안들어갑니다 ㅠ
Array로 나옵니다..

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