답변 1개
채택된 답변
+20 포인트
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 }
?>
해당 파일의 <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 }
?>
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인