mb_1 에 배열로 값을 넣어는데 제거하는 버튼으로 값을 제거하려고 하는데 안되네요

mb_1 에 배열로 값을 넣어는데 제거하는 버튼으로 값을 제거하려고 하는데 안되네요

QA

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');

 

 

 

 

 

 

균이님 감사합니다~ 
코드가 20%로 줄어든것 같습니다~~

그런데 하나 의문인 것은 경로가 /var/www/html/theme/dw_bootstrap/include 이렇게 되구 html 디렉토리로서 html 디렉토리에 그누보드 common.php 있을 때 include 디렉토리에 있는 파일에서 common.php 에 연결하는 경로는 어떤 파일이든지 ../../../common.php 하면 되는 건가요~~아니면 같은 파일 이라도 어디에 인클루드하느냐에 따라 달라지나요?

챗GPT 가 그누보드의 이해도가 낮아서 백날 물어봐야 소용없습니다.

ajax 로 하시든 form 으로 하던 상관없는데

 

sql_query("update `$g5[member_table]` set mb_1 = '' where mb_id = '{$member['mb_id']}'");

위 쿼리로 업데이트 하시면 현재 로그인한 회원의 mb_1 이 초기화 됩니다.

조건문은 원하시는 형태로 가공하세요.

답변감사합니다~~

한참 하다보면 엉뚱한 답변해서 산으로 가고 그럽니다~
그렇지만 누군가와 이야기하는 것 같아 재밌네요~~
나도 초보인데 AI를 가르치며 하고 있습니다~`
그냥 친구와 대화하는 기분입니다~
어짜피 이용하지도 않고 홈페이지 운영하지도 않고 재미삼아 만들었다 지웠다 합니다

그나저나 하루종일 씨름해서 어떻게 구현은 했습니다~
 현재까지 잘 작동하는데 초기화 된다는 것은 무슨 뜻인지요~`

 서버가 꺼지면 초기화 되나요~~

 

https://sir.kr/g5_tip/19475

 

상단에 common.php 가 인클루드 되어 있으면 회원 여분필드(mb_1) 코드로 충분할 것 같습니다.

 

common.php 쉽게 인클루드 하기 - https://sir.kr/g5_tip/20935

답변을 작성하시기 전에 로그인 해주세요.
전체 61,328
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT