여분 필드를 활용하여 만든 게시판에 저장이 안됩니다
관련링크
본문
여분 필드를 활용하여 입력 폼을 만들었습니다
그런데 입력 폼에 내용을 채우면 저장이 안됩니다.
도와 주세요
답변 2
입력 폼 데이터를 처리할 때,
여분 필드(extra field)에 저장하는 과정에서 데이터베이스 컬럼이 누락되었거나,
write_update.php 또는 관련 로직에서 입력값을 받아 처리하는 코드가 빠져 있을 가능성.
또한, SQL 실행 시 필드명이 일치하지 않거나
POST 데이터가 올바르게 전달되지 않았을 수도 있습니다.
입력 처리 로직을 점검하고, 실제 데이터가 올바르게 DB에 입력되는지 검증하는 것이 필요함.
*bbs/write_update.php에서 입력 처리 로직을 점검하고,
실제 데이터가 올바르게 DB에 입력되는지 검증하는 것이 필요합니다.
*이름, 이메일, 연락처, 제목, 내용, 소속, 그리고 파일 업로드를 입력한 후 제출하면,
데이터가 bbs/write_update.php로 전송됩니다.
- <form> 태그 안에 아래 코드를 추가
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">
※ 구체적 위치 ===
<form name="fwrite" id="fwrite" action="http://inknews.co.kr/bbs/write_update.php" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:100%"> 이 <form> 태그 바로 아래에
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars(get_session('ss_token'), ENT_QUOTES, 'UTF-8') ?>"
이 코드 추가
1. POST 데이터가 write_update.php에 전달되는지 확인
- write_update.php의 맨 앞에 다음 코드를 추가하여, 폼 데이터가 전송되는지 확인.
<?php
var_dump($_POST);
exit;
?>
2. g5_write_테이블명의 컬럼 확인
- 데이터베이스에서 다음 SQL을 실행하여 wr_1, wr_2 등 여분 필드가 있는지 확인
DESC g5_write_테이블명;
- 필드가 없으면 추가
ALTER TABLE g5_write_테이블명 ADD COLUMN wr_1 VARCHAR(255) NOT NULL;
ALTER TABLE g5_write_테이블명 ADD COLUMN wr_2 VARCHAR(255) NOT NULL;
ALTER TABLE g5_write_테이블명 ADD COLUMN wr_3 VARCHAR(255) NOT NULL;
ALTER TABLE g5_write_테이블명 ADD COLUMN wr_4 VARCHAR(255) NOT NULL;
ALTER TABLE g5_write_테이블명 ADD COLUMN wr_5 TEXT NOT NULL;
ALTER TABLE g5_write_테이블명 ADD COLUMN wr_6 VARCHAR(255) NOT NULL;
3. write_update.php에서 SQL 실행 여부 확인
- SQL 실행 코드 바로 앞에 아래 코드를 추가하여 실제 실행되는 SQL을 확인
if (isset($sql) && $result) {
echo "SQL 실행 성공: " . $sql;
} else {
echo "SQL 실행 실패: " . mysqli_error($conn);
}
exit
4. write.php 또는 jebo/write 페이지를 로드하는 그누보드의 컨트롤러 파일 상단에 추가
<?php
if (!defined('_GNUBOARD_')) exit; // 보안 체크
// CSRF 토큰 설정 (세션에 저장)
if (!get_session('ss_token')) {
set_session('ss_token', bin2hex(random_bytes(32)));
}
?>
5. bbs/write_update.php 수정
<?php
if (!defined('_GNUBOARD_')) exit; // 보안 체크
if ($_SERVER["REQUEST_METHOD"] === "POST") {
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== get_session('ss_token')) {
alert('CSRF 검증 실패: 잘못된 요청입니다.');
exit;
}
// CSRF 토큰 1회성 사용 후 초기화 (선택 사항)
set_session('ss_token', bin2hex(random_bytes(32)))
// 이후 게시글 저장 로직 실행
}
?>
토큰값이 전달이 않되는것같습니다. 관련 스킨 폼소스를 확인해봐야 할문제인듯보입니다.