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

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

그누초보다 10개월 전 조회 1,929

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

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

답변 1개

채택된 답변
+20 포인트
glitter0gim
10개월 전

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에 이벤트 리스너 추가

</p>

<p>document.querySelectorAll('.a-button').forEach(button => {

    button.addEventListener('click', function() {

        const wr_id = this.dataset.wrId;

        const bo_table = this.dataset.boTable;</p>

<p>        if (!wr_id || !bo_table) {

            alert('잘못된 요청입니다.');

            return;

        }</p>

<p>        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('네트워크 오류가 발생했습니다.');

        });

    });

});</p>

<p>

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

</p>

<p><?php

include_once('../common.php'); // 환경 파일 로드</p>

<p>$input = json_decode(file_get_contents('php://input'), true) ?? [];

$wr_id = $input['wr_id'] ?? null;

$bo_table = $input['bo_table'] ?? null;</p>

<p>// 허용된 테이블 목록

$allowed_tables = ['board_table', 'another_table'];</p>

<p>if (!$wr_id || !$bo_table) {

    echo json_encode(['success' => false, 'message' => '유효하지 않은 요청']);

    exit;

}</p>

<p>// 테이블 이름 검증

if (!in_array($bo_table, $allowed_tables)) {

    echo json_encode(['success' => false, 'message' => '허용되지 않은 테이블']);

    exit;

}</p>

<p>$sql = "UPDATE {$bo_table} SET wr_1='' WHERE wr_id=?";

$stmt = sql_prepare($sql);</p>

<p>if (!$stmt) {

    echo json_encode(['success' => false, 'message' => 'SQL 준비 실패']);

    exit;

}</p>

<p>sql_bind_param($stmt, 'i', $wr_id);

$result = sql_execute($stmt);</p>

<p>echo json_encode(['success' => $result ? true : false, 'message' => $result ? '' : 'DB 업데이트 실패']);

?></p>

<p>

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

</p>

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

<p>

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

답변에 대한 댓글 2개

그누초보다
10개월 전
감사합니다! 어떤 느낌인지 알았어요, 혹시 내용관리페이지 content.skin.php에 common을 인크루드하려면 어떻게해야할까요?!
g
glitter0gim
10개월 전
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 }
?>

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

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

로그인