mb_1 에 배열로 값을 넣어는데 제거하는 버튼으로 값을 제거하려고 하는데 안되네요 채택완료
(1) mb_1 에 배열로 값을 넣었습니다
(2) 버튼을 <button id="removeButton" data-board-id="1">게시판 ID 제거</button> 만들고
(3) 아래처럼 스크립트를 짲어요
</p>
<p><script></p>
<p>$(document).ready(function() {</p>
<p>$('#removeButton').on('click', function() {</p>
<p>var boardId = $(this).data('board_id'); // 클릭한 버튼의 data 속성에서 게시판 ID 가져오기</p>
<p>var mbId = '<?php echo isset($mb_id) ? $mb_id : ''; ?>'; // PHP에서 mb_id 가져오기</p>
<p> </p>
<p>removeBoard(boardId, mbId); // 게시판 ID와 mbId를 함수에 전달</p>
<p>});</p>
<p> </p>
<p>function removeBoard(boardId, mbId) {</p>
<p>$.ajax({</p>
<p>url: '../theme/dw_bootstrap/include/remove_board.php', // 제거를 처리할 PHP 파일</p>
<p>type: 'POST',</p>
<p>data: {</p>
<p>board_id: boardId, // 제거할 게시판 ID</p>
<p>mb_id: mbId // mbId도 함께 전달</p>
<p>},</p>
<p>success: function(response) {</p>
<p>try {</p>
<p>const result = JSON.parse(response); // JSON 응답을 파싱</p>
<p>if (result.success) {</p>
<p>alert(result.message); // 성공 메시지 표시</p>
<p>} else {</p>
<p>alert('오류: ' + result.message); // 실패 메시지 표시</p>
<p>}</p>
<p>} catch (e) {</p>
<p>console.error("응답 파싱 오류: ", e);</p>
<p>alert('서버 응답을 처리하는 데 오류가 발생했습니다.');</p>
<p>}</p>
<p>},</p>
<p>error: function(xhr, status, error) {</p>
<p>console.error("AJAX Error: ", status, error);</p>
<p>alert('AJAX 요청 중 오류가 발생했습니다.');</p>
<p>}</p>
<p>});</p>
<p>}</p>
<p>});</p>
<p></script></p>
<p> </p>
<p> </p>
<p>
그리고 다음과 같이 remove_board.php 를 만들었습니다
</p>
<p><?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);</p>
<p>session_start(); // 세션 시작</p>
<p>// 로그인 여부 확인
if (!isset($_SESSION['ss_mb_id'])) {
echo json_encode(['success' => false, 'message' => '로그인 후 이용해 주세요.']);
exit; // 로그인하지 않은 경우 스크립트 종료
}
$user_id = $_SESSION['ss_mb_id']; // 로그인한 사용자 ID 가져오기</p>
<p>// POST 데이터 가져오기
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['board_id'])) {
$board_id = $_POST['board_id']; // 선택된 게시판 ID</p>
<p> // 사용자 정보 가져오기
$result = sql_query("SELECT * FROM g5_member WHERE mb_id = '{$user_id}'");
$member = sql_fetch_array($result);</p>
<p> // 기존 mb_1 필드에서 배열 가져오기
$saved_boards = !empty($member['mb_1']) ? explode(',', $member['mb_1']) : [];</p>
<p> // 선택된 게시판 ID를 배열에서 삭제
if (($key = array_search($board_id, $saved_boards)) !== false) {
unset($saved_boards[$key]); // 배열에서 삭제
}</p>
<p> // 배열을 다시 문자열로 변환하여 저장
$new_saved_boards = implode(',', $saved_boards);
$update_result = sql_query("UPDATE g5_member SET mb_1 = '{$new_saved_boards}' WHERE mb_id = '{$user_id}'");</p>
<p> 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' => '게시판 정보를 제거하지 않았습니다.']);
}
?></p>
<p>
위처럼 했는데 제거 버튼을 클릭하면 팝업 오류가 뜨면서 게시판 정보를 제거하지 못하였습니다
이렇게 뜹니다
답변 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');
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
상단에 common.php 가 인클루드 되어 있으면 회원 여분필드(mb_1) 코드로 충분할 것 같습니다.
common.php 쉽게 인클루드 하기 - https://sir.kr/g5_tip/20935
답변에 대한 댓글 1개
common.php 쉽게 인클루드 하기 - https://sir.kr/g5_tip/20935 로 잘 해결하였습니다
댓글을 작성하려면 로그인이 필요합니다.
챗GPT 가 그누보드의 이해도가 낮아서 백날 물어봐야 소용없습니다.
ajax 로 하시든 form 으로 하던 상관없는데
sql_query("update `$g5[member_table]` set mb_1 = '' where mb_id = '{$member['mb_id']}'");
위 쿼리로 업데이트 하시면 현재 로그인한 회원의 mb_1 이 초기화 됩니다.
조건문은 원하시는 형태로 가공하세요.
답변에 대한 댓글 3개
한참 하다보면 엉뚱한 답변해서 산으로 가고 그럽니다~
그렇지만 누군가와 이야기하는 것 같아 재밌네요~~
나도 초보인데 AI를 가르치며 하고 있습니다~`
그냥 친구와 대화하는 기분입니다~
어짜피 이용하지도 않고 홈페이지 운영하지도 않고 재미삼아 만들었다 지웠다 합니다
그나저나 하루종일 씨름해서 어떻게 구현은 했습니다~
현재까지 잘 작동하는데 초기화 된다는 것은 무슨 뜻인지요~`
서버가 꺼지면 초기화 되나요~~
sql_query("update `$g5[member_table]` set mb_1 = '' where mb_id = '{$member['mb_id']}'");
이 구문 실행시 mb_1 컬럼을 비우게 된다는거에요 ㅎ
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
코드가 20%로 줄어든것 같습니다~~
그런데 하나 의문인 것은 경로가 /var/www/html/theme/dw_bootstrap/include 이렇게 되구 html 디렉토리로서 html 디렉토리에 그누보드 common.php 있을 때 include 디렉토리에 있는 파일에서 common.php 에 연결하는 경로는 어떤 파일이든지 ../../../common.php 하면 되는 건가요~~아니면 같은 파일 이라도 어디에 인클루드하느냐에 따라 달라지나요?