고수님들 sql 질문드립니다
본문
질문드립니다!
index.php 에 문의 접수 폼을만들어서 sql table에 저장시켰는데
대충 구조를 설명드리자면
index.php에 form 입력값을 submit 해서 bbs(bbs/user_qna.php)파일에서 데이터 처리후 sql table에 insert까지 완료, 해당 데이터를 관리자(adm/user_qna_list.php)에서까지 출력 완료 했습니다.
여기서 문제가
밸류값을 입력받을때
<input type="hidden" name="status" value="대기"> 상태로 넘겨 관리자에서
if($row['status'] == '대기') {
<button type="button" name="button">답변완료</button>
<button type="button" name="button">답변취소</button>
} else {
<?php echo $row['status']; ?>
}
버튼을 눌러 처리 하려고하는데 검색해도 어떻게 검색해야할지 모르겠고 방법도 안떠오르고해서 조언좀 구하고자 이렇게 질문 남겨봅니다 감사합니다!
!-->
답변 3
관리자 페이지에서 상태 변경 버튼을 클릭할 때
JavaScript와 AJAX를 사용하여 상태 변경 요청을 서버로 전송하고,
이를 받은 PHP 처리 페이지에서 SQL의 UPDATE 구문으로 데이터베이스 상태값을 변경한 후
성공 여부를 JSON 형태로 반환하여 즉시 화면에 변경된 상태를 반영하는 것은 어떨까요.
*관리자 페이지 (adm/user_qna_list.php)의 버튼 HTML & JavaScript 코드 예시
<!-- 버튼 HTML -->
<button type="button" onclick="updateStatus(<?php echo $row['id']; ?>, '답변완료');">답변완료</button>
<button type="button" onclick="updateStatus(<?php echo $row['id']; ?>, '답변취소');">답변취소</button>
<!-- JavaScript & AJAX 코드 -->
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script>
function updateStatus(id, status) {
if (!confirm(status + '(으)로 변경하시겠습니까?')) return;
$.ajax({
type: 'POST',
url: './update_qna_status.php',
data: {id: id, status: status},
dataType: 'json',
success: function(response) {
if (response.result == 'success') {
alert('상태가 변경되었습니다.');
location.reload(); // 페이지를 새로고침하여 변경사항 즉시 반영
} else {
alert('상태 변경 실패: ' + response.message);
}
},
error: function() {
alert('서버와의 통신 중 오류가 발생했습니다.');
}
});
}
</script>
*서버측 PHP 처리파일 (adm/update_qna_status.php)
<?php
include_once('../common.php');
header('Content-Type: application/json');
// POST 값 확인 및 보안 처리
$id = isset($_POST['id']) ? (int)$_POST['id'] : 0;
$status = isset($_POST['status']) ? trim($_POST['status']) : '';
if (!$id || !$status) {
echo json_encode(['result' => 'error', 'message' => '잘못된 요청입니다.']);
exit;
}
// SQL Injection 방지
$status = mysqli_real_escape_string($conn, $status);
// 데이터베이스 상태 업데이트 처리
$sql = "UPDATE user_qna_table SET status = '{$status}' WHERE id = {$id}";
if (sql_query($sql)) {
echo json_encode(['result' => 'success']);
} else {
echo json_encode(['result' => 'error', 'message' => '데이터베이스 업데이트 중 오류가 발생했습니다.']);
}
?>
- AJAX를 통해 서버와 비동기적으로 통신하므로 페이지 새로고침 없이 즉시 반영.
- 관리자 입장에서 직관적 버튼 클릭만으로 상태를 바꿀 수 있어 편의성이 좋음.
- 서버에서 직접 데이터 처리 로직을 구현하므로 클라이언트 측 변조에 대한 보안이 확보 됨.
방법은 여러가지가 있겠네요...
ajax 를 이용하는 방법도 있을테고 해당게시글의 고유번호를 버튼 값과 같이 넘겨 업데이트 해주는 방법이 있겠네요