자동등록방지 만 다시 입력하는 방법이 있나요?
본문
자동등록방지가 틀린 경우
현재 게시판 글쓰기에서 필드 값을 처음부터 다시 입력을 해야합니다.
자동등록방지가 틀린 경우
자동등록방지 만 다시 입력하는 방법이 있나요?
감사합니다.
답변 2
자동등록방지 확인을 입력 후 제출하기 전에
AJAX를 통해 별도의 검증 프로세스를 추가하는 방법이여야겠습니다.
스크랩할 과제이다 싶어 정리해 봅니다. 피드백 주세요.
1. bbs/ajax_captcha_check.php (신규 생성)
- 이 파일은 자동등록방지 값을 미리 검증하는 역할
<?php
include_once('./_common.php');
session_start();
$captcha = isset($_POST['captcha']) ? trim($_POST['captcha']) : '';
if (!$captcha) {
echo json_encode(['status' => 'error', 'message' => '자동등록방지 값을 입력하세요.']);
exit;
}
if ($captcha !== $_SESSION['ss_captcha']) {
echo json_encode(['status' => 'error', 'message' => '자동등록방지 값이 틀렸습니다.']);
exit;
}
// 성공 응답
echo json_encode(['status' => 'success']);
exit;
?>
2. bbs/write.skin.php 수정
- 자동등록방지 입력 후 미리 검증하는 기능을 추가
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
$("#captcha_check_btn").click(function() {
var captcha = $("#captcha").val();
if (captcha === "") {
alert("자동등록방지를 입력하세요.");
return false;
}
$.ajax({
type: "POST",
url: "ajax_captcha_check.php",
data: { captcha: captcha },
dataType: "json",
success: function(response) {
if (response.status === "success") {
alert("자동등록방지 확인 완료!");
$("#captcha").prop("readonly", true);
$("#captcha_check_btn").hide();
} else {
alert(response.message);
$("#captcha").val("").focus();
}
},
error: function() {
alert("서버 오류가 발생했습니다.");
}
});
});
});
</script>
<!-- 기존 자동등록방지 필드 -->
<input type="text" name="captcha" id="captcha" required>
<button type="button" id="captcha_check_btn">자동등록방지 확인</button>
3. 백엔드 검증 로직 수정 (bbs/write_update.php)
- 기존 자동등록방지 검증을 AJAX에서 미리 수행하도록 하고,
서버에서는 AJAX 검증을 통과한 경우에만 처리하도록 변경
<?php
include_once('./_common.php');
session_start();
// 기존 자동등록방지 검증 제거
// if ($_POST['captcha'] !== $_SESSION['ss_captcha']) {
// alert('자동등록방지 코드가 맞지 않습니다.');
// }
if (!isset($_SESSION['captcha_verified']) || $_SESSION['captcha_verified'] !== true) {
alert('자동등록방지를 확인해주세요.');
}
// 게시글 작성 로직 실행
unset($_SESSION['captcha_verified']); // 성공 후 세션 초기화
// 나머지 기존 코드 유지...
?>
자동등록방지 체크처리를 하는 부분을 전송하기전에 ajax로 자동등록방지 체크하는 페이지를 별도 만들어서 체크하고 적용하도록 처리하시면 효율적으로 가능하지 않을까 생각됩니다.