게시글 수정 시 체크박스 해제문제

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
게시글 수정 시 체크박스 해제문제

QA

게시글 수정 시 체크박스 해제문제

답변 5

본문

 

 안녕하세요, 항상 많은 도움 받고 있습니다..

여분필드로 만든 체크박스가, 게시글 수정을 하면 해제가 되어 다시 일일이 선택해야 하는 문제인데요..!

https://sir.kr/qa/492866

 위의 게시글 참고하여 수정 하였는데, 분명 어제는 성공적으로 체크박스가 되었습니다.. 근데 오늘test 하니 다시 또 안돼서 ㅠㅠ 제가 뭘 잘못건드렸나 싶어서 여러가지 시도 해 보았는데 안되네요..

 

 일단 write.skin.php

 

// 체크박스
$wr9 = explode('', $write['wr_9']);
for($i=0; $i<12; $i++) $wrchk[$i] = $wr9[$i] ?  'checked' : ''; 
$wr8 = explode('', $write['wr_8']);
for($i=0; $i<8; $i++) $wrchk[$i] = $wr8[$i] ?  'checked' : ''; 
$wr5 = explode('', $write['wr_5']);
for($i=0; $i<5; $i++) $wrchk[$i] = $wr5[$i] ?  'checked' : ''; 
$wr7 = explode('', $write['wr_7']);
for($i=0; $i<3; $i++) $wrchk[$i] = $wr7[$i] ?  'checked' : ''; 
 
//본문글
/*종류*/
        <li><input type="checkbox" name="wr9[0]" value="한국정보통신(KICC)" <?php echo $wrchk[0];?>> 한국정보통신(KICC)</li>
        <li><input type="checkbox" name="wr9[1]" value="나이스정보통신(NICE)" <?php echo $wrchk[1];?>> 나이스정보통신(NICE)</li>
        <li><input type="checkbox" name="wr9[2]" value="케이에스넷(KSNET)" <?php echo $wrchk[2];?>> 케이에스넷(KSNET</li>
        <li><input type="checkbox" name="wr9[3]" value="코밴(KOVAN)" <?php echo $wrchk[3];?>> 코밴(KOVAN)</li>
        <li><input type="checkbox" name="wr9[4]" value="금융결제원(금결원)" <?php echo $wrchk[4];?>> 금융결제원(금결원)</li>
        <li><input type="checkbox" name="wr9[5]" value="한국신용카드결제(KOCES)" <?php echo $wrchk[5];?>> 한국신용카드결제(KOCES)</li>
        <li><input type="checkbox" name="wr9[6]" value="스마트로(SMATRO)" <?php echo $wrchk[6];?>> 스마트로(SMATRO)</li>
        <li><input type="checkbox" name="wr9[7]" value="한국결제네트웍스(KPN)" <?php echo $wrchk[7];?>> 한국결제네트웍스(KPN)</li>
        <li><input type="checkbox" name="wr9[8]" value="다우데이타(다우)" <?php echo $wrchk[8];?>> 다우데이타(다우)</li>
        <li><input type="checkbox" name="wr9[9]" value="섹터나인(SPC)" <?php echo $wrchk[9];?>> 섹터나인(SPC)</li>
        <li><input type="checkbox" name="wr9[10]" value="나이스페이먼츠(나이스페이먼츠)" <?php echo $wrchk[10];?>> 나이스페이먼츠(나이스페이먼츠)</li>
        <li><input type="checkbox" name="wr9[11]" value="한국사이버결제(KCP)" <?php echo $wrchk[11];?>> 한국사이버결제(KCP)</li>
 
/*지역*/
        <li><input type="checkbox" name="wr8[0]" value="서울" <?php echo $wrchk[0];?>> 서울</li>        
        <li><input type="checkbox" name="wr8[1]" value="인천" <?php echo $wrchk[1];?>> 인천</li>    
        <li><input type="checkbox" name="wr8[2]" value="경기권" <?php echo $wrchk[2];?>> 경기권</li>    
        <li><input type="checkbox" name="wr8[3]" value="충청도" <?php echo $wrchk[3];?>> 충청도</li>    
        <li><input type="checkbox" name="wr8[4]" value="전라도" <?php echo $wrchk[4];?>> 전라도</li>    
        <li><input type="checkbox" name="wr8[5]" value="경상도" <?php echo $wrchk[5];?>> 경상도</li>    
        <li><input type="checkbox" name="wr8[6]" value="제주도" <?php echo $wrchk[6];?>> 제주도</li>    
        <li><input type="checkbox" name="wr8[7]" value="강원도" <?php echo $wrchk[7];?>> 강원도</li>    
 
/*장비*/
        <li><input type="checkbox" name="wr5[0]" value="유선카드기" <?php echo $wrchk[0];?>> 유선카드기</li>    
        <li><input type="checkbox" name="wr5[1]" value="포스" <?php echo $wrchk[1];?>> 포스</li>    
        <li><input type="checkbox" name="wr5[2]" value="키오스크" <?php echo $wrchk[2];?>> 키오스크</li>    
        <li><input type="checkbox" name="wr5[3]" value="테이블오더" <?php echo $wrchk[3];?>> 테이블오더</li>    
        <li><input type="checkbox" name="wr5[4]" value="기타01" <?php echo $wrchk[4];?>> 기타</li>    
 
/*업종*/
        <li><input type="checkbox" name="wr7[0]" value="카페" <?php echo $wrchk[0];?>> 카페</li>    
        <li><input type="checkbox" name="wr7[1]" value="음식점" <?php echo $wrchk[1];?>> 음식점</li>    
        <li><input type="checkbox" name="wr7[2]" value="기타02" <?php echo $wrchk[2];?>> 기타</li>    
 

 

write_update.head.skin.php


<?php
    $wr_9=$wr9[0].''.$wr9[1].''.$wr9[2].''.$wr9[3].''.$wr9[4].''.$wr9[5].''.$wr9[6].''.$wr9[7].''.$wr9[8].''.$wr9[9].''.$wr9[10].''.$wr9[11].''.$wr9[12];
    $wr_8=$wr8[0].''.$wr8[1].''.$wr8[2].''.$wr8[3].''.$wr8[4].''.$wr8[5].''.$wr8[6].''.$wr8[7];
    $wr_5=$wr5[0].''.$wr5[1].''.$wr5[2].''.$wr5[3].''.$wr5[4];
    $wr_7=$wr7[0].''.$wr7[1].''.$wr7[2];
?>
 

 

 분명 어제는 됐던 것 같은데!! 고수님들 답변 부탁드립니다.. ㅠㅠ 감사합니다!

이 질문에 댓글 쓰기 :

답변 5

구분자를 넣어주세요.

아래 예시 참조해서 전부 수정하세요.


$wr_7=$wr7[0].'|'.$wr7[1].'|'.$wr7[2];

$wr7 = explode('|', $write['wr_7']);

 


<li><input type="checkbox" name="wr7[]" value="카페" <?php echo $wrchk[0];?>> 카페</li>    
        <li><input type="checkbox" name="wr7[]" value="음식점" <?php echo $wrchk[1];?>> 음식점</li>    
        <li><input type="checkbox" name="wr7[]" value="기타02" <?php echo $wrchk[2];?>> 기타</li>    

이렇게 수정해보세요


<li><input type="checkbox" name="wr7[]" value="카페" <?php if(in_array('카페',$wr7)) echo 'checked'; ?>> 카페</li>    
        <li><input type="checkbox" name="wr7[]" value="음식점" <?php if(in_array('음식점',$wr7)) echo 'checked'; ?>> 음식점</li>    
        <li><input type="checkbox" name="wr7[]" value="기타02" <?php if(in_array('기타02',$wr7)) echo 'checked'; ?>> 기타</li>    

이렇게 수정해보세요

위에분 말씀 처럼 구분자도 넣으시고

변수도 $wrchk[$i] 에 다 넣으시는게 아니라 각각 다 다른 변수에 넣어보세요.

 


<?php
// write_update.head.skin.php
    $wr_9 = implode('', $wr9);
    $wr_8 = implode('', $wr8);
    $wr_5 = implode('', $wr5);
    $wr_7 = implode('', $wr7);
 
 
 

//write.skin.php
// 체크박스 체크 상태 배열 초기화
$wrchk9 = [];
$wrchk8 = [];
$wrchk5 = [];
$wrchk7 = [];
// 체크박스 wr_9
$wr9 = str_split($write['wr_9']);
for ($i = 0; $i < count($wr9); $i++) {
    $wrchk9[$i] = isset($wr9[$i]) && $wr9[$i] ? 'checked' : '';
}
// 체크박스 wr_8
$wr8 = str_split($write['wr_8']);
for ($i = 0; $i < count($wr8); $i++) {
    $wrchk8[$i] = isset($wr8[$i]) && $wr8[$i] ? 'checked' : '';
}
// 체크박스 wr_5
$wr5 = str_split($write['wr_5']);
for ($i = 0; $i < count($wr5); $i++) {
    $wrchk5[$i] = isset($wr5[$i]) && $wr5[$i] ? 'checked' : '';
}
// 체크박스 wr_7
$wr7 = str_split($write['wr_7']);
for ($i = 0; $i < count($wr7); $i++) {
    $wrchk7[$i] = isset($wr7[$i]) && $wr7[$i] ? 'checked' : '';
}
?>
 

// 예제
<!-- wr_9 체크박스 예제 -->
<li><input type="checkbox" name="wr9[0]" value="한국정보통신(KICC)" <?php echo $wrchk9[0];?>> 한국정보통신(KICC)</li>
<li><input type="checkbox" name="wr9[1]" value="나이스정보통신(NICE)" <?php echo $wrchk9[1];?>> 나이스정보통신(NICE)</li>
<!-- wr_8 체크박스 예제 -->
<li><input type="checkbox" name="wr8[0]" value="서울" <?php echo $wrchk8[0];?>> 서울</li>
.
.
.
.

<?php
$wr9 = explode('|', $write['wr_9']);
$wr9s = ['한국정보통신(KICC)', '나이스정보통신(NICE)', '케이에스넷(KSNET)']; // 나머지 생략
foreach($wr9s as $key => $value) {
    $checked = in_array($value, $wr9) ? ' checked' : '';
    echo '<li><input type="checkbox" name="wr9[]" id="wr9-'.$key.'" value="'.$value.'"'.$checked.'><label for="wr9-'.$key.'">'.$value.'</label></li>';
}
$wr8 = explode('|', $write['wr_8']);
$wr8s = ['서울', '인천', '경기권']; // 여기도 나머지 생략
foreach($wr8s as $key => $value) {
    $checked = in_array($value, $wr8) ? ' checked' : '';
    echo '<li><input type="checkbox" name="wr8[]" id="wr8-'.$key.'" value="'.$value.'"'.$checked.'><label for="wr8-'.$key.'">'.$value.'</label></li>';
}
// 나머지 5, 7은 생략

write.skin.php


<?php
$wr_5 = implode('|', $_POST['wr5']);
$wr_7 = implode('|', $_POST['wr7']);
$wr_8 = implode('|', $_POST['wr8']);
$wr_9 = implode('|', $_POST['wr9']);

 

$wr9s = ['한국정보통신(KICC)', '나이스정보통신(NICE)', '케이에스넷(KSNET)']; // 나머지 생략

다른(5, 7, 8) 것들도 9처럼 저런 식으로 배열에 넣으시면 돼요.

※ write.skin.php와 write_update.head.skin.php에 처리하는 코드가 포함되어 있으나.

  > 체크박스 값이 저장되거나 불려오지 못하는 것으로 보입니다.

 

write.skin.php


<?php
$wr9 = isset($write['wr_9']) ? explode('|', $write['wr_9']) : [];
$wr8 = isset($write['wr_8']) ? explode('|', $write['wr_8']) : [];
$wr5 = isset($write['wr_5']) ? explode('|', $write['wr_5']) : [];
$wr7 = isset($write['wr_7']) ? explode('|', $write['wr_7']) : [];

$wrchk9 = array_fill(0, 12, '');
$wrchk8 = array_fill(0, 8, '');
$wrchk5 = array_fill(0, 5, '');
$wrchk7 = array_fill(0, 3, '');
foreach ($wr9 as $index => $value) $wrchk9[$index] = 'checked';
foreach ($wr8 as $index => $value) $wrchk8[$index] = 'checked';
foreach ($wr5 as $index => $value) $wrchk5[$index] = 'checked';
foreach ($wr7 as $index => $value) $wrchk7[$index] = 'checked';
?>

<li><input type="checkbox" name="wr9[0]" value="한국정보통신(KICC)" <?= $wrchk9[0]; ?>> 한국정보통신(KICC)</li>
<li><input type="checkbox" name="wr8[0]" value="서울" <?= $wrchk8[0]; ?>> 서울</li>

 

write_update.head.skin.php


<?php
$wr_9 = isset($_POST['wr9']) ? implode('|', $_POST['wr9']) : '';
$wr_8 = isset($_POST['wr8']) ? implode('|', $_POST['wr8']) : '';
$wr_5 = isset($_POST['wr5']) ? implode('|', $_POST['wr5']) : '';
$wr_7 = isset($_POST['wr7']) ? implode('|', $_POST['wr7']) : '';

$sql = "UPDATE your_table_name SET 
            wr_9 = '{$wr_9}', 
            wr_8 = '{$wr_8}', 
            wr_5 = '{$wr_5}', 
            wr_7 = '{$wr_7}' 
        WHERE id = '{$id}'";

 

※ 테이블의 컬럼이 TEXT 또는 VARCHAR 타입으로 설정되어 있는지 확인하세요.

  - 각 컬럼에 데이터를 '|'로 구분된 문자열 형태로 저장하는 구조가 되어야 합니다

헉 감사합니다.. 근데 이 방법으로 해서 수정 들어가보니, 체크한 것들이 예를들어
1번(체크),2번(체크),3번,4번,5번(체크) 로 되어있던 것이
1번(체크),2번(체크),3번(체크),4번,5번 이런식으로
체크가 맨 앞으로 몰려갑니다.. ㅠㅠ 이건 왜이러는 걸까요..?

write.skin.php


<?php
// 데이터베이스에서 가져온 값 분리 (구분자: '|')
// 모든 체크박스 항목 초기화
$total_wr9 = array_fill(0, 12, '');
$total_wr8 = array_fill(0, 8, '');
$total_wr5 = array_fill(0, 5, '');
$total_wr7 = array_fill(0, 3, '');

// 데이터베이스에서 값 불러오기
$wr9 = isset($write['wr_9']) ? explode('|', $write['wr_9']) : $total_wr9;
$wr8 = isset($write['wr_8']) ? explode('|', $write['wr_8']) : $total_wr8;
$wr5 = isset($write['wr_5']) ? explode('|', $write['wr_5']) : $total_wr5;
$wr7 = isset($write['wr_7']) ? explode('|', $write['wr_7']) : $total_wr7;

// 각 체크박스 상태 설정
$wrchk9 = array_map(fn($value) => $value ? 'checked' : '', $wr9);
$wrchk8 = array_map(fn($value) => $value ? 'checked' : '', $wr8);
$wrchk5 = array_map(fn($value) => $value ? 'checked' : '', $wr5);
$wrchk7 = array_map(fn($value) => $value ? 'checked' : '', $wr7);
?>

<!-- HTML 체크박스 -->
<!-- wr9 그룹 -->
<li><input type="checkbox" name="wr9[0]" value="한국정보통신(KICC)" <?= $wrchk9[0]; ?>> 한국정보통신(KICC)</li>
<li><input type="checkbox" name="wr9[1]" value="나이스정보통신(NICE)" <?= $wrchk9[1]; ?>> 나이스정보통신(NICE)</li>
<li><input type="checkbox" name="wr9[2]" value="케이에스넷(KSNET)" <?= $wrchk9[2]; ?>> 케이에스넷(KSNET)</li>

<!-- wr8 그룹 -->
<li><input type="checkbox" name="wr8[0]" value="서울" <?= $wrchk8[0]; ?>> 서울</li>
<li><input type="checkbox" name="wr8[1]" value="인천" <?= $wrchk8[1]; ?>> 인천</li>
<li><input type="checkbox" name="wr8[2]" value="경기권" <?= $wrchk8[2]; ?>> 경기권</li>

<!-- wr5 그룹 -->
<li><input type="checkbox" name="wr5[0]" value="유선카드기" <?= $wrchk5[0]; ?>> 유선카드기</li>
<li><input type="checkbox" name="wr5[1]" value="포스" <?= $wrchk5[1]; ?>> 포스</li>

<!-- wr7 그룹 -->
<li><input type="checkbox" name="wr7[0]" value="카페" <?= $wrchk7[0]; ?>> 카페</li>
<li><input type="checkbox" name="wr7[1]" value="음식점" <?= $wrchk7[1]; ?>> 음식점</li>

댓글 정말 감사드립니다 근데 ㅠㅠ 똑같은 문제가 계속 발생합니다.. 수정 들어가 보니, 체크는 그대로 잘 되어있는데 문제가
체크한 항목에 체크되어있는게 아닌, 맨 앞 항목으로 체크가 쏠려있습니다 ㅠㅠ;;

※ 프롬프트를 작성하실 때,
데이터 불러오기와 저장 과정을 정확히 반영할 수 있도록 봇을 유도하셔야, 

  >  원하는 결과를 한 번에 얻으실 수 있습니다.

. . 
제가 계획한 방법이 아닌, 님께서 제시한 맥락이 제한적이기 때문에 
제 답변은 조언의 수준에 머물 수 밖에 없습니다. 
. . 
제 프롬프트 결과가 님의 기대를 완전히 충족하지 못할 수 있으니, 
중요한 프로젝트라면, 챗봇과 직접 협업하시길 권장합니다.

덧붙여, 
프롬프트의 정확성, 구체성, 그리고 맥락에 따라 
답변의 품질과 방향이 크게 달라질 수 있습니다.

프롬프트의 플로우 차트를 잘 설계하시면 이 문제를 더 효과적으로 해결할 수 있을 것입니다.
. . .
write_update.head.skin.php


<?php
// 모든 체크박스를 포함한 초기화 (체크박스 그룹별 총 항목 수 설정)
$total_wr9 = array_fill(0, 12, ''); // wr9 그룹 체크박스: 12개
$total_wr8 = array_fill(0, 8, '');  // wr8 그룹 체크박스: 8개
$total_wr5 = array_fill(0, 5, '');  // wr5 그룹 체크박스: 5개
$total_wr7 = array_fill(0, 3, '');  // wr7 그룹 체크박스: 3개

// POST 데이터를 반영해 선택된 항목만 업데이트
if (isset($_POST['wr9'])) {
    foreach ($_POST['wr9'] as $index) {
        $total_wr9[$index] = $index; // 선택된 항목은 인덱스로 저장
    }
}
if (isset($_POST['wr8'])) {
    foreach ($_POST['wr8'] as $index) {
        $total_wr8[$index] = $index;
    }
}
if (isset($_POST['wr5'])) {
    foreach ($_POST['wr5'] as $index) {
        $total_wr5[$index] = $index;
    }
}
if (isset($_POST['wr7'])) {
    foreach ($_POST['wr7'] as $index) {
        $total_wr7[$index] = $index;
    }
}

// 데이터 저장 시 모든 항목을 포함하도록 구분자로 연결
$wr_9 = implode('|', $total_wr9);
$wr_8 = implode('|', $total_wr8);
$wr_5 = implode('|', $total_wr5);
$wr_7 = implode('|', $total_wr7);

// 데이터베이스 업데이트 쿼리
$sql = "UPDATE your_table_name SET 
            wr_9 = '{$wr_9}', 
            wr_8 = '{$wr_8}', 
            wr_5 = '{$wr_5}', 
            wr_7 = '{$wr_7}' 
        WHERE id = '{$id}'";


write.skin.php

<?php
// 데이터베이스에서 값을 불러오고 분리 (구분자: '|')
// 기본값으로 모든 체크박스를 초기화
$total_wr9 = array_fill(0, 12, ''); // wr9 그룹 총 12개 항목
$total_wr8 = array_fill(0, 8, '');  // wr8 그룹 총 8개 항목
$total_wr5 = array_fill(0, 5, '');  // wr5 그룹 총 5개 항목
$total_wr7 = array_fill(0, 3, '');  // wr7 그룹 총 3개 항목

// 저장된 데이터베이스 값 불러오기
$wr9 = isset($write['wr_9']) ? explode('|', $write['wr_9']) : $total_wr9;
$wr8 = isset($write['wr_8']) ? explode('|', $write['wr_8']) : $total_wr8;
$wr5 = isset($write['wr_5']) ? explode('|', $write['wr_5']) : $total_wr5;
$wr7 = isset($write['wr_7']) ? explode('|', $write['wr_7']) : $total_wr7;

// 체크 상태 설정
$wrchk9 = array_map(fn($value) => $value !== '' ? 'checked' : '', $wr9);
$wrchk8 = array_map(fn($value) => $value !== '' ? 'checked' : '', $wr8);
$wrchk5 = array_map(fn($value) => $value !== '' ? 'checked' : '', $wr5);
$wrchk7 = array_map(fn($value) => $value !== '' ? 'checked' : '', $wr7);
?>

<!-- HTML 체크박스 -->
<li><input type="checkbox" name="wr9[0]" value="0" <?= $wrchk9[0]; ?>> 한국정보통신(KICC)</li>
<li><input type="checkbox" name="wr9[1]" value="1" <?= $wrchk9[1]; ?>> 나이스정보통신(NICE)</li>
<li><input type="checkbox" name="wr9[2]" value="2" <?= $wrchk9[2]; ?>> 케이에스넷(KSNET)</li>
<li><input type="checkbox" name="wr9[3]" value="3" <?= $wrchk9[3]; ?>> 코밴(KOVAN)</li>

헉.. 천사이신가요.. ㅠㅠㅠ 정말 감사드립니다 바쁘실텐데 ..!
혹시 근데.. write.skin.php에


$wrchk9 = array_map(fn($value) => $value !== '' ? 'checked' : '', $wr9);
$wrchk8 = array_map(fn($value) => $value !== '' ? 'checked' : '', $wr8);
$wrchk5 = array_map(fn($value) => $value !== '' ? 'checked' : '', $wr5);
$wrchk7 = array_map(fn($value) => $value !== '' ? 'checked' : '', $wr7);


 저 코드를 넣으면 글쓰기가 먹통이 됩니다 ㅠㅠ; 요건... 왤까요..

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 0
© SIRSOFT
현재 페이지 제일 처음으로