2026, 새로운 도약을 시작합니다.

게시글 수정 시 체크박스 해제문제 채택완료

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

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

https://sir.kr/qa/492866

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

 일단 write.skin.php

Copy


// 체크박스

$wr9 = explode('', $write['wr_9']);

for($i=0; $i> 케이에스넷(KSNET

        > 금융결제원(금결원)

        > 스마트로(SMATRO)

        > 다우데이타(다우)

        > 나이스페이먼츠(나이스페이먼츠)

        > 서울        

        > 경기권    

        > 전라도    

        > 제주도    

        > 유선카드기    

        > 키오스크    

        > 기타    

 

/*업종*/

        > 음식점    

        

write_update.head.skin.php

Copy

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

답변 5개

채택된 답변
+20 포인트
Copy


 



// 예제



> 나이스정보통신(NICE)



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

답변에 대한 댓글 2개

이 방법으로 하면.. 수정 시 체크박스가 모두 체크되어 있습니다 ㅠㅠ;
[code]
<?php
// 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] == '1' ? 'checked' : ''; // '1'로 체크된 값 확인
}

// 체크박스 wr_8
$wr8 = str_split($write['wr_8']);
for ($i = 0; $i < count($wr8); $i++) {
$wrchk8[$i] = isset($wr8[$i]) && $wr8[$i] == '1' ? 'checked' : ''; // '1'로 체크된 값 확인
}

// 체크박스 wr_5
$wr5 = str_split($write['wr_5']);
for ($i = 0; $i < count($wr5); $i++) {
$wrchk5[$i] = isset($wr5[$i]) && $wr5[$i] == '1' ? 'checked' : ''; // '1'로 체크된 값 확인
}

// 체크박스 wr_7
$wr7 = str_split($write['wr_7']);
for ($i = 0; $i < count($wr7); $i++) {
$wrchk7[$i] = isset($wr7[$i]) && $wr7[$i] == '1' ? 'checked' : ''; // '1'로 체크된 값 확인
}
?>

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

[/code]

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

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

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

write.skin.php

Copy






> 서울

write_update.head.skin.php

Copy

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

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

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

답변에 대한 댓글 6개

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

[/code]
댓글 정말 감사드립니다 근데 ㅠㅠ 똑같은 문제가 계속 발생합니다.. 수정 들어가 보니, 체크는 그대로 잘 되어있는데 문제가
체크한 항목에 체크되어있는게 아닌, 맨 앞 항목으로 체크가 쏠려있습니다 ㅠㅠ;;
※ 프롬프트를 작성하실 때,
데이터 불러오기와 저장 과정을 정확히 반영할 수 있도록 봇을 유도하셔야,

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

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

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

프롬프트의 플로우 차트를 잘 설계하시면 이 문제를 더 효과적으로 해결할 수 있을 것입니다.
. . .
write_update.head.skin.php[code]
<?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}'";
[/code]

write.skin.php
[code]
<?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>
[/code]
헉.. 천사이신가요.. ㅠㅠㅠ 정말 감사드립니다 바쁘실텐데 ..!
혹시 근데.. write.skin.php에
[code]
$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);
[/code]

저 코드를 넣으면 글쓰기가 먹통이 됩니다 ㅠㅠ; 요건... 왤까요..
※ 님과의 대화를 종합한 "최종 프럼프트" 결과입니다.

저장 코드
[code]
<?php
// 모든 체크박스를 포함한 초기화
function initialize_checkbox_data($total_count) {
return array_fill(0, $total_count, ''); // 지정된 개수만큼 초기화
}

// 초기화
$total_wr9 = initialize_checkbox_data(12); // wr9 그룹: 12개
$total_wr8 = initialize_checkbox_data(8); // wr8 그룹: 8개
$total_wr5 = initialize_checkbox_data(5); // wr5 그룹: 5개
$total_wr7 = initialize_checkbox_data(3); // wr7 그룹: 3개

// POST 데이터를 반영해 선택된 항목만 업데이트
function update_checkbox_data($post_data, &$total_data) {
if (isset($post_data)) {
foreach ($post_data as $index) {
if (is_numeric($index) && isset($total_data[$index])) { // 데이터 검증
$total_data[$index] = $index;
}
}
}
}

update_checkbox_data($_POST['wr9'] ?? null, $total_wr9);
update_checkbox_data($_POST['wr8'] ?? null, $total_wr8);
update_checkbox_data($_POST['wr5'] ?? null, $total_wr5);
update_checkbox_data($_POST['wr7'] ?? null, $total_wr7);

// 데이터 저장 시 구분자로 연결
$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}'";

// SQL 실행 (PDO 또는 mysqli를 사용하여 실행)
?>

[/code]

불러오기 및 HTML 출력 코드
[code]
<?php
// 데이터베이스에서 값을 불러오고 분리 (구분자: '|')
function load_checkbox_data($write_data, $total_count) {
$total_data = array_fill(0, $total_count, ''); // 초기화
$db_data = isset($write_data) ? explode('|', $write_data) : [];
foreach ($db_data as $index => $value) {
if (is_numeric($value) && isset($total_data[$index])) { // 데이터 검증
$total_data[$index] = $value;
}
}
return $total_data;
}

// 각 그룹 데이터 불러오기
$wr9 = load_checkbox_data($write['wr_9'] ?? null, 12);
$wr8 = load_checkbox_data($write['wr_8'] ?? null, 8);
$wr5 = load_checkbox_data($write['wr_5'] ?? null, 5);
$wr7 = load_checkbox_data($write['wr_7'] ?? null, 3);

// 체크 상태 설정
function set_checkbox_status($data) {
return array_map(fn($value) => $value !== '' ? 'checked' : '', $data);
}

$wrchk9 = set_checkbox_status($wr9);
$wrchk8 = set_checkbox_status($wr8);
$wrchk5 = set_checkbox_status($wr5);
$wrchk7 = set_checkbox_status($wr7);
?>

<!-- HTML 체크박스 -->
<ul>
<!-- wr9 그룹 -->
<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>

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

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

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

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

Copy

write.skin.php

Copy

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

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

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

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

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

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

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

답변에 대한 댓글 1개

정말 죄송한데 제가 초보라.. $wrchk[$i] 를 각각 다른 변수에 넣어보란 말씀이 어떤 의미이실까요?? ㅠㅠ

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

구분자를 넣어주세요.

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

Copy


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

Copy


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

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

답변에 대한 댓글 3개

넣었는데.. 게시글리스트에 ||| 이렇게만 뜨고 여전히 수정 시 체크박스 저장은 안됩니다 ㅠㅠ
[code]
<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>
[/code]
이렇게 수정해보세요
[code]
<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>
[/code]
이렇게 수정해보세요

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

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

로그인
🐛 버그신고