내용관리에서 a버튼 누르면 해당 게시글 wr_1 b로 바꾸는법

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
내용관리에서 a버튼 누르면 해당 게시글 wr_1 b로 바꾸는법

QA

내용관리에서 a버튼 누르면 해당 게시글 wr_1 b로 바꾸는법

답변 1

본문

내용관리에서 a버튼 누르면 해당 게시글 wr_1을 빈값으로 바꾸는법 어떻게 하면 될까요? ㅠㅠ

이 질문에 댓글 쓰기 :

답변 1

1. JavaScript 클릭 이벤트 처리:

  "a" 버튼에 JavaScript로 클릭 이벤트 리스너를 추가하여 Ajax 요청을 보냄.

2. Ajax 요청 작성:

  요청은 대상 게시글의 ID(wr_id)와 테이블 이름(bo_table)을 서버로 전달.

3. 서버 측 PHP 처리:

  전달받은 wr_id와 bo_table로 게시글을 조회한 후,

  SQL 업데이트 쿼리를 실행하여 해당 wr_1 필드를 빈값으로 설정.

4. SQL 쿼리 검증:

  UPDATE {table_name} SET wr_1='' WHERE wr_id={id} 형식으로 작성하며,

  반드시 SQL 인젝션 방지를 위해 준비된 명령어(Prepared Statement)를 사용.

5. 결과:

  Ajax 요청에 성공/실패 메시지를 반환하고, 성공 시 UI를 업데이트합니다.

- /js/common.js에 이벤트 리스너 추가


document.querySelectorAll('.a-button').forEach(button => {
    button.addEventListener('click', function() {
        const wr_id = this.dataset.wrId;
        const bo_table = this.dataset.boTable;
        if (!wr_id || !bo_table) {
            alert('잘못된 요청입니다.');
            return;
        }
        fetch('/adm/ajax.update_wr_1.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ wr_id, bo_table })
        })
        .then(response => {
            if (!response.ok) throw new Error('서버 응답 에러');
            return response.json();
        })
        .then(data => {
            if (data.success) alert('wr_1 필드가 빈값으로 변경되었습니다.');
            else alert('변경 실패: ' + data.message);
        })
        .catch(error => {
            console.error('에러 발생:', error);
            alert('네트워크 오류가 발생했습니다.');
        });
    });
});

- /adm/ajax.update_wr_1.php 파일 생성


<?php
include_once('../common.php'); // 환경 파일 로드
$input = json_decode(file_get_contents('php://input'), true) ?? [];
$wr_id = $input['wr_id'] ?? null;
$bo_table = $input['bo_table'] ?? null;
// 허용된 테이블 목록
$allowed_tables = ['board_table', 'another_table'];
if (!$wr_id || !$bo_table) {
    echo json_encode(['success' => false, 'message' => '유효하지 않은 요청']);
    exit;
}
// 테이블 이름 검증
if (!in_array($bo_table, $allowed_tables)) {
    echo json_encode(['success' => false, 'message' => '허용되지 않은 테이블']);
    exit;
}
$sql = "UPDATE {$bo_table} SET wr_1='' WHERE wr_id=?";
$stmt = sql_prepare($sql);
if (!$stmt) {
    echo json_encode(['success' => false, 'message' => 'SQL 준비 실패']);
    exit;
}
sql_bind_param($stmt, 'i', $wr_id);
$result = sql_execute($stmt);
echo json_encode(['success' => $result ? true : false, 'message' => $result ? '' : 'DB 업데이트 실패']);
?>

- 게시글 리스트 또는 관리 페이지의 "a" 버튼 HTML에 data-wr-id와 data-bo-table 속성 추가


<button class="a-button" data-wr-id="123" data-bo-table="board_table">a</button>

content.skin.php에 common.js를 인크루드하려면,
해당 파일의 <head> 또는 원하는 위치에 <script> 태그로 파일을 포함하면 됩니다.

common.js를 관리자 페이지에서 효율적으로 로드하려면 - - -
- 전체 관리 페이지에 사용된다면 head.sub.php에 포함하는 방식이 적합
- 특정 스킨 파일에서만 필요하다면, content.skin.php에 직접 추가하는 방식이 더 ~

예로)
1. content.skin.php 파일에 common.js 추가하기 - -
<?php
// content.skin.php 상단에 include 코드 추가
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// common.js 스크립트 파일 추가
?>
<script src="/js/common.js"></script>
위 코드는 content.skin.php의 PHP 파일에서 common.js를 정적으로 추가하는 방식입니다.

2. 관리 페이지 스킨에서만 로드하고 싶다면
관리 페이지에서만 common.js를 로드하도록 조건을 추가 - -
<?php
// content.skin.php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

// 관리 페이지 확인 후 스크립트 추가
if (defined('G5_IS_ADMIN')) { ?>
    <script src="/js/common.js"></script>
<?php }
?>
defined('G5_IS_ADMIN') 조건은 관리자 페이지인지 확인하는 방법으로,
관리자 페이지에서만 common.js를 로드

3. 추가적으로 CSS 또는 JS가 많은 경우 - -
공통적으로 관리 페이지 스킨에서 사용하는 JS/CSS를 head.sub.php에 추가하여
유지보수를 간소화할 수 있음
/adm/head.sub.php 파일에 다음을 추가
<?php
// head.sub.php
if (defined('G5_IS_ADMIN')) { ?>
    <script src="/js/common.js"></script>
<?php }
?>
위 방식은 관리자 페이지 전체에서 common.js가 포함되므로 유지보수에 유리

4. 동적으로 로드하고 싶다면 - -
content.skin.php 내에서 특정 조건에 따라 동적으로 로드하려면 아래와 같이 작성
<?php
if (!defined('_GNUBOARD_')) exit;

// 특정 조건에서만 로드
if (/* 특정 조건 */) { ?>
    <script src="/js/common.js"></script>
<?php }
?>

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 0
© SIRSOFT
현재 페이지 제일 처음으로