테스트 사이트 - 개발 중인 베타 버전입니다

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

카산 1년 전 조회 1,773

(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개

채택된 답변
+20 포인트
1년 전

간단한 코드인데 너무 복잡합니다

다음처럼 해보세요

<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개

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

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

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

 

https://sir.kr/g5_tip/19475

 

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

 

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

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

답변에 대한 댓글 1개

카산
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개

카산
1년 전
답변감사합니다~~

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

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

서버가 꺼지면 초기화 되나요~~
애드프로
1년 전
아 초기화란건
sql_query("update `$g5[member_table]` set mb_1 = '' where mb_id = '{$member['mb_id']}'");
이 구문 실행시 mb_1 컬럼을 비우게 된다는거에요 ㅎ
카산
1년 전
누군가가 sql_query("update `$g5[member_table]` set mb_1 = '' where mb_id = '{$member['mb_id']}'"); 실행한다는 이야기 인가여? 위와 같은 것이 없어서~~ 그래서 제가 초보입니다ㅋㅋ

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

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

로그인