mb_1 에 배열로 값을 넣어는데 제거하는 버튼으로 값을 제거하려고 하는데 안되네요
관련링크
본문
(1) mb_1 에 배열로 값을 넣었습니다
(2) 버튼을 <button id="removeButton" data-board-id="1">게시판 ID 제거</button> 만들고
(3) 아래처럼 스크립트를 짲어요
<script>
$(document).ready(function() {
$('#removeButton').on('click', function() {
var boardId = $(this).data('board_id'); // 클릭한 버튼의 data 속성에서 게시판 ID 가져오기
var mbId = '<?php echo isset($mb_id) ? $mb_id : ''; ?>'; // PHP에서 mb_id 가져오기
removeBoard(boardId, mbId); // 게시판 ID와 mbId를 함수에 전달
});
function removeBoard(boardId, mbId) {
$.ajax({
url: '../theme/dw_bootstrap/include/remove_board.php', // 제거를 처리할 PHP 파일
type: 'POST',
data: {
board_id: boardId, // 제거할 게시판 ID
mb_id: mbId // mbId도 함께 전달
},
success: function(response) {
try {
const result = JSON.parse(response); // JSON 응답을 파싱
if (result.success) {
alert(result.message); // 성공 메시지 표시
} else {
alert('오류: ' + result.message); // 실패 메시지 표시
}
} catch (e) {
console.error("응답 파싱 오류: ", e);
alert('서버 응답을 처리하는 데 오류가 발생했습니다.');
}
},
error: function(xhr, status, error) {
console.error("AJAX Error: ", status, error);
alert('AJAX 요청 중 오류가 발생했습니다.');
}
});
}
});
</script>
그리고 다음과 같이 remove_board.php 를 만들었습니다
<?php
// 데이터베이스 연결
//include_once('db_connect.php'); // 데이터베이스 연결 파일 포함
function is_common($inc) {
$root_dir = ["adm", "bbs", "extend"];
$dir_count = 0;
foreach ($root_dir as $g5_dir) if (is_dir($inc.$g5_dir)) $dir_count += 1;
return $dir_count == count($root_dir);
}
if (is_common("./")) $common_include = "./common.php";
else {
$parent_dir = "../";
while (!is_common($parent_dir)) $parent_dir .= "../";
$common_include = $parent_dir."common.php";
}
include_once($common_include);
session_start(); // 세션 시작
// 로그인 여부 확인
if (!isset($_SESSION['ss_mb_id'])) {
echo json_encode(['success' => false, 'message' => '로그인 후 이용해 주세요.']);
exit; // 로그인하지 않은 경우 스크립트 종료
}
$user_id = $_SESSION['ss_mb_id']; // 로그인한 사용자 ID 가져오기
// POST 데이터 가져오기
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['board_id'])) {
$board_id = $_POST['board_id']; // 선택된 게시판 ID
// 사용자 정보 가져오기
$result = sql_query("SELECT * FROM g5_member WHERE mb_id = '{$user_id}'");
$member = sql_fetch_array($result);
// 기존 mb_1 필드에서 배열 가져오기
$saved_boards = !empty($member['mb_1']) ? explode(',', $member['mb_1']) : [];
// 선택된 게시판 ID를 배열에서 삭제
if (($key = array_search($board_id, $saved_boards)) !== false) {
unset($saved_boards[$key]); // 배열에서 삭제
}
// 배열을 다시 문자열로 변환하여 저장
$new_saved_boards = implode(',', $saved_boards);
$update_result = sql_query("UPDATE g5_member SET mb_1 = '{$new_saved_boards}' WHERE mb_id = '{$user_id}'");
if ($update_result) {
echo json_encode(['success' => true, 'message' => '게시판 ID가 제거되었습니다.']);
} else {
echo json_encode(['success' => false, 'message' => '게시판 ID 제거에 실패했습니다.']);
}
} else {
echo json_encode(['success' => false, 'message' => '게시판 정보를 제거하지 않았습니다.']);
}
?>
위처럼 했는데 제거 버튼을 클릭하면 팝업 오류가 뜨면서 게시판 정보를 제거하지 못하였습니다
이렇게 뜹니다
!-->!-->답변 3
간단한 코드인데 너무 복잡합니다
다음처럼 해보세요
<script>
$(document).ready(function() {
$('#removeButton').on('click', function() {
var boardId = $(this).data('board_id'); // 클릭한 버튼의 data 속성에서 게시판 ID 가져오기
//var mbId = '<?php echo isset($mb_id) ? $mb_id : ''; ?>'; <==불필요함
$.post('../theme/dw_bootstrap/include/remove_board.php', "board_id="+boardId, function(data){
if(data=='OK') alert('삭제 완료'); else alert('삭제 실패 : '+data);
});
});
});
</script>
================ 그누보드 소스 코드들을 잘 모르니 불필요한 코드들이 가득 들어있네요
remove_board.php
<?php
include "../../../common.php"; //<== or include G5_PATH.'/common.php';
if(!$is_member) die("로그인 후 이용하세요");
$user_id =$member['mb_id'];
$row = sql_fetch("select mb_1 from {$g5['member_table']} where mb_id='$user_id' ");
if(!$row['mb_1']) die("삭제할 자료가 없음");
$saved_boards =explode(',', $row['mb_1']);
if (($key = array_search($board_id, $saved_boards)) !== false) {
unset($saved_boards[$key]); // 배열에서 삭제
}
$new_saved_boards = implode(',', $saved_boards);
$update_result = sql_query("UPDATE {$g5['member_table']} SET mb_1 = '{$new_saved_boards}' WHERE mb_id = '{$user_id}'");
if ($update_result) die("OK'); else die("Error');
챗GPT 가 그누보드의 이해도가 낮아서 백날 물어봐야 소용없습니다.
ajax 로 하시든 form 으로 하던 상관없는데
sql_query("update `$g5[member_table]` set mb_1 = '' where mb_id = '{$member['mb_id']}'");
위 쿼리로 업데이트 하시면 현재 로그인한 회원의 mb_1 이 초기화 됩니다.
조건문은 원하시는 형태로 가공하세요.
상단에 common.php 가 인클루드 되어 있으면 회원 여분필드(mb_1) 코드로 충분할 것 같습니다.
common.php 쉽게 인클루드 하기 - https://sir.kr/g5_tip/20935