Ai로 그누보드 게시판용 폼메일을 만들어 봤는데 작동하지 않네요. 코드 한 번 봐주세요. 채택완료
보드라운훈
1개월 전
조회 1,241
</p>
<p><?php</p>
<p>// 이 파일의 가장 첫 부분에 위치해야 합니다.</p>
<p>include_once('./_common.php');</p>
<p> </p>
<p>// =============================================================================</p>
<p>// ● 설정 영역 ●</p>
<p>// =============================================================================</p>
<p> </p>
<p>// 1. [필수] 문의 글을 등록할 '게시판 아이디(bo_table)'를 정확하게 입력해주세요.</p>
<p>// 예: 관리자 페이지 '게시판 관리'에서 확인하신 ID가 'qna' 라면 $bo_table = "qna"; 로 수정</p>
<p>$bo_table = "qa";</p>
<p> </p>
<p>// 2. 페이지 상단에 표시될 제목을 설정해주세요.</p>
<p>$g5['title'] = "온라인 문의";</p>
<p> </p>
<p>// =============================================================================</p>
<p>
</p>
<p>// 1. 게시판 정보 불러오기 및 존재 여부 확인</p>
<p>$board = get_board_config($bo_table);</p>
<p>if ( ! (isset($board['bo_table']) && $board['bo_table']) ) {</p>
<p> alert('설정된 QA 게시판('.$bo_table.')을 찾을 수 없습니다. qa_form.php 파일의 $bo_table 변수를 확인해주세요.');</p>
<p>}</p>
<p> </p>
<p>// 2. 글쓰기 권한 확인</p>
<p>if ($member['mb_level'] < $board['bo_write_level']) {</p>
<p> $msg = '글을 작성할 권한이 없습니다.';</p>
<p> if ($is_guest) { // 비회원일 경우 추가 안내</p>
<p> $msg .= '\\n회원이시라면 로그인 후 이용해 주세요.';</p>
<p> }</p>
<p> alert($msg);</p>
<p>}</p>
<p> </p>
<p>// 3. 폼에 미리 채워넣을 변수 준비 (PHP Notice 오류 방지)</p>
<p>$wr_name = $is_member ? get_text($member['mb_name']) : '';</p>
<p>$wr_email = $is_member ? get_text($member['mb_email']) : '';</p>
<p> </p>
<p>// 4. CSRF(Cross-Site Request Forgery) 공격 방지를 위한 토큰 생성</p>
<p>$token = get_write_token($bo_table);</p>
<p> </p>
<p>// 사이트 상단 디자인 포함</p>
<p>include_once(G5_PATH.'/_head.php');</p>
<p>?></p>
<p> </p>
<p><!-- 페이지 디자인을 위한 CSS 코드 --></p>
<p><style></p>
<p> .qa-form-container {</p>
<p> max-width: 768px;</p>
<p> margin: 40px auto;</p>
<p> padding: 2rem 2.5rem;</p>
<p> border: 1px solid #e0e0e0;</p>
<p> border-radius: 12px;</p>
<p> background-color: #ffffff;</p>
<p> box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);</p>
<p> }</p>
<p> .qa-form-container h2 {</p>
<p> text-align: center;</p>
<p> margin-bottom: 2rem;</p>
<p> font-size: 1.8rem;</p>
<p> font-weight: 600;</p>
<p> color: #333;</p>
<p> }</p>
<p> .qa-form-group {</p>
<p> margin-bottom: 1.25rem;</p>
<p> }</p>
<p> .qa-form-group label {</p>
<p> display: block;</p>
<p> margin-bottom: 0.5rem;</p>
<p> font-weight: 500;</p>
<p> color: #555;</p>
<p> }</p>
<p> .qa-form-group .form-control {</p>
<p> width: 100%;</p>
<p> padding: 0.8rem 1rem;</p>
<p> border: 1px solid #ccc;</p>
<p> border-radius: 8px;</p>
<p> box-sizing: border-box;</p>
<p> transition: border-color 0.2s, box-shadow 0.2s;</p>
<p> font-size: 1rem;</p>
<p> }</p>
<p> .qa-form-group .form-control:focus {</p>
<p> border-color: #007bff;</p>
<p> box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.2);</p>
<p> outline: none;</p>
<p> }</p>
<p> .qa-form-group textarea.form-control {</p>
<p> height: 180px;</p>
<p> resize: vertical;</p>
<p> }</p>
<p> .qa-form-submit {</p>
<p> width: 100%;</p>
<p> padding: 1rem;</p>
<p> background-color: #007bff;</p>
<p> color: white;</p>
<p> border: none;</p>
<p> border-radius: 8px;</p>
<p> font-size: 1.1rem;</p>
<p> font-weight: bold;</p>
<p> cursor: pointer;</p>
<p> transition: background-color 0.2s;</p>
<p> }</p>
<p> .qa-form-submit:hover {</p>
<p> background-color: #0056b3;</p>
<p> }</p>
<p> /* 자동등록방지(캡챠) 스타일 */</p>
<p> #captcha { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }</p>
<p> #captcha #captcha_key { flex: 1; min-width: 150px; }</p>
<p> #captcha #captcha_img { flex-shrink: 0; }</p>
<p></style></p>
<p> </p>
<p><div class="qa-form-container"></p>
<p> <h2><?php echo get_text($g5['title']); ?></h2></p>
<p> <form name="fwrite" id="fwrite" action="<?php echo G5_BBS_URL; ?>/write_update.php" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off"></p>
<p> </p>
<p> <!-- 그누보드 게시판 연동을 위한 필수 히든(숨김) 필드 --></p>
<p> <!-- 절대 수정하거나 삭제하지 마세요. --></p>
<p> <input type="hidden" name="w" value=""> <!-- 새 글 작성을 의미 (수정 시 'u') --></p>
<p> <input type="hidden" name="bo_table" value="<?php echo $bo_table; ?>"></p>
<p> <input type="hidden" name="token" value="<?php echo $token; ?>"></p>
<p> <input type="hidden" name="html" value="1"> <!-- HTML 태그 사용 허용 --></p>
<p> </p>
<p> <!-- QA 게시판 스킨의 '답변 시 이메일 수신' 기능을 활성화하는 필드 --></p>
<p> <input type="hidden" name="qa_email_recv" value="1"></p>
<p> </p>
<p> <div class="qa-form-group"></p>
<p> <label for="wr_name">작성자</label></p>
<p> <input type="text" name="wr_name" id="wr_name" value="<?php echo $wr_name; ?>" class="form-control" required></p>
<p> </div></p>
<p> </p>
<p> <?php if ($is_guest) { // 비회원일 경우에만 비밀번호와 자동등록방지 필드를 보여줍니다. ?></p>
<p> <div class="qa-form-group"></p>
<p> <label for="wr_password">비밀번호</label></p>
<p> <input type="password" name="wr_password" id="wr_password" class="form-control" required></p>
<p> </div></p>
<p> <?php } ?></p>
<p> </p>
<p> <div class="qa-form-group"></p>
<p> <label for="wr_email">이메일 (답변 수신용)</label></p>
<p> <input type="email" name="wr_email" id="wr_email" value="<?php echo $wr_email; ?>" class="form-control" required></p>
<p> </div></p>
<p> </p>
<p> <div class="qa-form-group"></p>
<p> <label for="wr_subject">문의 제목</label></p>
<p> <input type="text" name="wr_subject" id="wr_subject" class="form-control" required></p>
<p> </div></p>
<p> </p>
<p> <div class="qa-form-group"></p>
<p> <label for="wr_content">문의 내용</label></p>
<p> <textarea name="wr_content" id="wr_content" class="form-control" required></textarea></p>
<p> </div></p>
<p> </p>
<p> <?php if ($is_guest) { // 비회원 자동등록방지(캡챠) ?></p>
<p> <div class="qa-form-group"></p>
<p> <label>자동등록방지</label></p>
<p> <?php echo captcha_html(); ?></p>
<p> </div></p>
<p> <?php } ?></p>
<p> </p>
<p> <div class="qa-form-group"></p>
<p> <input type="submit" value="문의 등록하기" id="btn_submit" class="qa-form-submit"></p>
<p> </div></p>
<p> </form></p>
<p></div></p>
<p> </p>
<p><script></p>
<p>// 폼 전송(submit) 시 필드 유효성 검사</p>
<p>function fwrite_submit(f) {</p>
<p> if (f.wr_name.value.trim() === "") {</p>
<p> alert("작성자 이름을 입력해주세요.");</p>
<p> f.wr_name.focus();</p>
<p> return false;</p>
<p> }</p>
<p> </p>
<p> <?php if ($is_guest) { ?></p>
<p> if (f.wr_password.value.trim() === "") {</p>
<p> alert("비밀번호를 입력해주세요.");</p>
<p> f.wr_password.focus();</p>
<p> return false;</p>
<p> }</p>
<p> <?php } ?></p>
<p> </p>
<p> if (f.wr_email.value.trim() === "") {</p>
<p> alert("이메일 주소를 입력해주세요.");</p>
<p> f.wr_email.focus();</p>
<p> return false;</p>
<p> }</p>
<p> </p>
<p> if (f.wr_subject.value.trim() === "") {</p>
<p> alert("문의 제목을 입력해주세요.");</p>
<p> f.wr_subject.focus();</p>
<p> return false;</p>
<p> }</p>
<p> </p>
<p> if (f.wr_content.value.trim() === "") {</p>
<p> alert("문의 내용을 입력해주세요.");</p>
<p> f.wr_content.focus();</p>
<p> return false;</p>
<p> }</p>
<p> </p>
<p> <?php if ($is_guest) { ?></p>
<p> // 캡챠(자동등록방지) 키 입력 검사</p>
<p> if (typeof(g5_captcha_url) !== 'undefined') {</p>
<p> if (!check_captcha()) {</p>
<p> return false; // check_captcha 함수에서 오류 메시지를 표시합니다.</p>
<p> }</p>
<p> }</p>
<p> <?php } ?></p>
<p> </p>
<p> // 중복 전송 방지를 위해 버튼 비활성화</p>
<p> document.getElementById("btn_submit").disabled = true;</p>
<p> document.getElementById("btn_submit").value = "전송 중...";</p>
<p> </p>
<p> return true;</p>
<p>}</p>
<p></script></p>
<p> </p>
<p><?php</p>
<p>// 사이트 하단 디자인 포함</p>
<p>include_once(G5_PATH.'/_tail.php');</p>
<p>?></p>
<p> </p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
답변 3개
채택된 답변
+20 포인트
1개월 전
그누보드에는 mailer() 함수가 정의되어있습니다.
글이 작성되면 관리자에게 메일을 발송할수 있는데요
/bbs/write_update.php
파일을 보시면
</p>
<p>// 메일발송 사용 (수정글은 발송하지 않음)
if (!($w == 'u' || $w == 'cu') && $config['cf_email_use'] && $board['bo_use_email']) {</p>
<p> // 관리자의 정보를 얻고
$super_admin = get_admin('super');
$group_admin = get_admin('group');
$board_admin = get_admin('board');</p>
<p> $wr_subject = get_text(stripslashes($wr_subject));</p>
<p> $tmp_html = 0;
if (strstr($html, 'html1'))
$tmp_html = 1;
else if (strstr($html, 'html2'))
$tmp_html = 2;</p>
<p> $wr_content = conv_content(conv_unescape_nl(stripslashes($wr_content)), $tmp_html);</p>
<p> $warr = array( ''=>'입력', 'u'=>'수정', 'r'=>'답변', 'c'=>'코멘트', 'cu'=>'코멘트 수정' );
$str = $warr[$w];</p>
<p> $subject = '['.$config['cf_title'].'] '.$board['bo_subject'].' 게시판에 '.$str.'글이 올라왔습니다.';</p>
<p> $link_url = get_pretty_url($bo_table, $wr_id, $qstr);</p>
<p> include_once(G5_LIB_PATH.'/mailer.lib.php');</p>
<p> ob_start();
include_once ('./write_update_mail.php');
$content = ob_get_contents();
ob_end_clean();</p>
<p> $array_email = array();
// 게시판관리자에게 보내는 메일
if ($config['cf_email_wr_board_admin']) $array_email[] = $board_admin['mb_email'];
// 게시판그룹관리자에게 보내는 메일
if ($config['cf_email_wr_group_admin']) $array_email[] = $group_admin['mb_email'];
// 최고관리자에게 보내는 메일
if ($config['cf_email_wr_super_admin']) $array_email[] = $super_admin['mb_email'];</p>
<p> // 원글게시자에게 보내는 메일
if ($config['cf_email_wr_write']) {
if($w == '')
$wr['wr_email'] = $wr_email;</p>
<p> $array_email[] = $wr['wr_email'];
}</p>
<p> // 옵션에 메일받기가 체크되어 있고, 게시자의 메일이 있다면
if (isset($wr['wr_option']) && isset($wr['wr_email'])) {
if (strstr($wr['wr_option'], 'mail') && $wr['wr_email'])
$array_email[] = $wr['wr_email'];
}</p>
<p> // 중복된 메일 주소는 제거
$unique_email = array_unique($array_email);
$unique_email = run_replace('write_update_mail_list', array_values($unique_email), $board, $wr_id);</p>
<p> for ($i=0; $i<count($unique_email); $i++) {
mailer($wr_name, $wr_email, $unique_email[$i], $subject, $content, 1);
}
}</p>
<p>
이런식으로 메일을 보내게 됩니다.
/lib/mailer.lib.php 에 mailer() 함수가 등록되어있죠.
ai 라고해도 사용자가 어느정도 그누보드에 대하여 지식이 있어야 올바른 결과가 나옵니다.
따라서 첨부해주신 코드 기반으로 그누보드 메일함수에 연결하면
</p>
<p><?php
// 이 파일의 가장 첫 부분에 위치해야 합니다.
include_once('./_common.php');
// =============================================================================
// ● 설정 영역 ●
// =============================================================================
// 1. [필수] 문의 글을 등록할 '게시판 아이디(bo_table)'를 정확하게 입력해주세요.
$bo_table = "qa";
// 2. 페이지 상단에 표시될 제목을 설정해주세요.
$g5['title'] = "온라인 문의";</p>
<p>// 3. 메일 발송 설정
$admin_email = $config['cf_admin_email']; // 관리자 이메일
$admin_name = $config['cf_admin_email_name'] ? $config['cf_admin_email_name'] : '관리자'; // 관리자 이름
// =============================================================================</p>
<p>// 1. 게시판 정보 불러오기 및 존재 여부 확인
$board = get_board_config($bo_table);
if ( ! (isset($board['bo_table']) && $board['bo_table']) ) {
alert('설정된 QA 게시판('.$bo_table.')을 찾을 수 없습니다. qa_form.php 파일의 $bo_table 변수를 확인해주세요.');
}
// 2. 글쓰기 권한 확인
if ($member['mb_level'] < $board['bo_write_level']) {
$msg = '글을 작성할 권한이 없습니다.';
if ($is_guest) { // 비회원일 경우 추가 안내
$msg .= '\\n회원이시라면 로그인 후 이용해 주세요.';
}
alert($msg);
}</p>
<p>// 폼 데이터 처리
if ($_POST && isset($_POST['action']) && $_POST['action'] == 'send_inquiry') {
// CSRF 토큰 검증
if (!isset($_POST['token']) || !check_token($_POST['token'])) {
alert('토큰 오류입니다. 다시 시도해주세요.');
}
// 입력값 정리
$wr_name = trim($_POST['wr_name']);
$wr_email = trim($_POST['wr_email']);
$wr_subject = trim($_POST['wr_subject']);
$wr_content = trim($_POST['wr_content']);
$wr_password = isset($_POST['wr_password']) ? trim($_POST['wr_password']) : '';
// 유효성 검사
$errors = array();
if (empty($wr_name)) {
$errors[] = "작성자 이름을 입력해주세요.";
}
if ($is_guest && empty($wr_password)) {
$errors[] = "비밀번호를 입력해주세요.";
}
if (empty($wr_email) || !filter_var($wr_email, FILTER_VALIDATE_EMAIL)) {
$errors[] = "올바른 이메일 주소를 입력해주세요.";
}
if (empty($wr_subject)) {
$errors[] = "문의 제목을 입력해주세요.";
}
if (empty($wr_content)) {
$errors[] = "문의 내용을 입력해주세요.";
}
// 캡챠 검증 (비회원인 경우)
if ($is_guest && function_exists('check_captcha')) {
if (!check_captcha()) {
$errors[] = "자동등록방지 문자가 틀렸습니다.";
}
}
// 오류가 없으면 메일 발송 및 게시판 등록
if (empty($errors)) {
// 게시판 테이블명
$write_table = $g5['write_prefix'] . $bo_table;
// 다음 글번호 구하기
$sql = "SELECT MAX(wr_num) as max_num FROM {$write_table}";
$row = sql_fetch($sql);
$wr_num = $row['max_num'] ? $row['max_num'] + 1 : 1;
// 비밀번호 처리 (비회원인 경우)
$wr_password_hash = '';
if ($is_guest && $wr_password) {
$wr_password_hash = get_encrypt_string($wr_password);
}
// HTML 태그 제거 및 엔터를
로 변환
$wr_content_safe = nl2br(htmlspecialchars($wr_content, ENT_QUOTES, 'UTF-8'));
// 게시글 등록
$sql = "INSERT INTO {$write_table} SET
wr_num = '{$wr_num}',
wr_reply = '',
wr_parent = '{$wr_num}',
wr_is_comment = 0,
wr_comment = 0,
wr_comment_reply = '',
ca_name = '',
wr_option = 'html1',
wr_subject = '".sql_real_escape_string($wr_subject)."',
wr_content = '".sql_real_escape_string($wr_content_safe)."',
wr_link1 = '',
wr_link2 = '',
wr_link1_hit = 0,
wr_link2_hit = 0,
wr_hit = 0,
wr_good = 0,
wr_nogood = 0,
mb_id = '".sql_real_escape_string($member['mb_id'])."',
wr_password = '{$wr_password_hash}',
wr_name = '".sql_real_escape_string($wr_name)."',
wr_email = '".sql_real_escape_string($wr_email)."',
wr_homepage = '',
wr_datetime = '".G5_TIME_YMDHIS."',
wr_file = 0,
wr_last = '".G5_TIME_YMDHIS."',
wr_ip = '{$_SERVER['REMOTE_ADDR']}',
wr_1 = '',
wr_2 = '',
wr_3 = '',
wr_4 = '',
wr_5 = '',
wr_6 = '',
wr_7 = '',
wr_8 = '',
wr_9 = '',
wr_10 = ''";
$result = sql_query($sql);
if ($result) {
$wr_id = sql_insert_id();
// 게시판 통계 업데이트
sql_query("UPDATE {$g5['board_table']} SET bo_count_write = bo_count_write + 1 WHERE bo_table = '{$bo_table}'");
// 메일 발송 (mailer.lib.php의 mailer 함수 사용)
if ($config['cf_email_use'] && $admin_email) {
// 관리자에게 알림 메일 발송
$mail_subject = "[{$board['bo_subject']}] 새 문의가 접수되었습니다.";
$mail_content = "
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;'>
<h2 style='color: #333; border-bottom: 2px solid #007bff; padding-bottom: 10px;'>새 문의가 접수되었습니다</h2>
<table style='width: 100%; border-collapse: collapse; margin: 20px 0;'>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold; width: 120px;'>게시판</td>
<td style='padding: 10px; border: 1px solid #ddd;'>{$board['bo_subject']}</td>
</tr>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold;'>작성자</td>
<td style='padding: 10px; border: 1px solid #ddd;'>{$wr_name}</td>
</tr>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold;'>이메일</td>
<td style='padding: 10px; border: 1px solid #ddd;'>{$wr_email}</td>
</tr>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold;'>제목</td>
<td style='padding: 10px; border: 1px solid #ddd;'>{$wr_subject}</td>
</tr>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold;'>내용</td>
<td style='padding: 10px; border: 1px solid #ddd;'>".nl2br(htmlspecialchars($wr_content, ENT_QUOTES, 'UTF-8'))."</td>
</tr>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold;'>등록일시</td>
<td style='padding: 10px; border: 1px solid #ddd;'>".date('Y-m-d H:i:s')."</td>
</tr>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold;'>바로가기</td>
<td style='padding: 10px; border: 1px solid #ddd;'><a href='".G5_BBS_URL."/board.php?bo_table={$bo_table}&wr_id={$wr_id}' style='color: #007bff; text-decoration: none;'>문의 내용 보기</a></td>
</tr>
</table>
</div>
";
// mailer 함수를 사용하여 메일 발송
$mail_result = mailer(
$wr_name, // 보내는 사람 이름
$wr_email, // 보내는 사람 이메일
$admin_email, // 받는 사람 이메일
$mail_subject, // 제목
$mail_content, // 내용
1, // HTML 메일 (1), 텍스트 메일 (0)
"", // 첨부파일
"", // CC
"" // BCC
);
// 문의자에게 접수 확인 메일 발송
$confirm_subject = "[{$board['bo_subject']}] 문의가 정상적으로 접수되었습니다.";
$confirm_content = "
<div style='font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;'>
<h2 style='color: #333; border-bottom: 2px solid #28a745; padding-bottom: 10px;'>문의 접수 확인</h2>
<p style='font-size: 16px; color: #555;'><strong>{$wr_name}</strong>님의 문의가 정상적으로 접수되었습니다.</p>
<table style='width: 100%; border-collapse: collapse; margin: 20px 0;'>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold; width: 120px;'>제목</td>
<td style='padding: 10px; border: 1px solid #ddd;'>{$wr_subject}</td>
</tr>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold;'>접수일시</td>
<td style='padding: 10px; border: 1px solid #ddd;'>".date('Y-m-d H:i:s')."</td>
</tr>
<tr>
<td style='background-color: #f8f9fa; padding: 10px; border: 1px solid #ddd; font-weight: bold;'>문의번호</td>
<td style='padding: 10px; border: 1px solid #ddd;'>{$wr_id}</td>
</tr>
</table>
<p style='font-size: 14px; color: #666; margin-top: 30px;'>
빠른 시일 내에 답변드리겠습니다.
감사합니다.
</p>
</div>
";
// 문의자에게 확인 메일 발송
mailer(
$admin_name, // 보내는 사람 이름 (관리자)
$admin_email, // 보내는 사람 이메일 (관리자)
$wr_email, // 받는 사람 이메일 (문의자)
$confirm_subject, // 제목
$confirm_content, // 내용
1, // HTML 메일
"", // 첨부파일
"", // CC
"" // BCC
);
}
// 성공 메시지 출력 후 리다이렉트
alert('문의가 정상적으로 접수되었습니다.\\n빠른 시일 내에 답변드리겠습니다.', G5_BBS_URL.'/board.php?bo_table='.$bo_table);
} else {
alert('문의 등록 중 오류가 발생했습니다. 다시 시도해주세요.');
}
} else {
// 오류 메시지 출력
alert(implode('\\n', $errors));
}
}
// 3. 폼에 미리 채워넣을 변수 준비 (PHP Notice 오류 방지)
$wr_name = $is_member ? get_text($member['mb_name']) : '';
$wr_email = $is_member ? get_text($member['mb_email']) : '';
// 4. CSRF(Cross-Site Request Forgery) 공격 방지를 위한 토큰 생성
$token = get_write_token($bo_table);
// 사이트 상단 디자인 포함
include_once(G5_PATH.'/_head.php');
?>
<!-- 페이지 디자인을 위한 CSS 코드 -->
<style>
.qa-form-container {
max-width: 768px;
margin: 40px auto;
padding: 2rem 2.5rem;
border: 1px solid #e0e0e0;
border-radius: 12px;
background-color: #ffffff;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05);
}
.qa-form-container h2 {
text-align: center;
margin-bottom: 2rem;
font-size: 1.8rem;
font-weight: 600;
color: #333;
}
.qa-form-group {
margin-bottom: 1.25rem;
}
.qa-form-group label {
display: block;
margin-bottom: 0.5rem;
font-weight: 500;
color: #555;
}
.qa-form-group .form-control {
width: 100%;
padding: 0.8rem 1rem;
border: 1px solid #ccc;
border-radius: 8px;
box-sizing: border-box;
transition: border-color 0.2s, box-shadow 0.2s;
font-size: 1rem;
}
.qa-form-group .form-control:focus {
border-color: #007bff;
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.2);
outline: none;
}
.qa-form-group textarea.form-control {
height: 180px;
resize: vertical;
}
.qa-form-submit {
width: 100%;
padding: 1rem;
background-color: #007bff;
color: white;
border: none;
border-radius: 8px;
font-size: 1.1rem;
font-weight: bold;
cursor: pointer;
transition: background-color 0.2s;
}
.qa-form-submit:hover {
background-color: #0056b3;
}
.qa-form-submit:disabled {
background-color: #6c757d;
cursor: not-allowed;
}
/* 자동등록방지(캡챠) 스타일 */
#captcha { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
#captcha #captcha_key { flex: 1; min-width: 150px; }
#captcha #captcha_img { flex-shrink: 0; }
</style>
<div class="qa-form-container">
<h2><?php echo get_text($g5['title']); ?></h2>
<form name="fwrite" id="fwrite" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off">
<!-- 폼 액션 구분을 위한 히든 필드 -->
<input type="hidden" name="action" value="send_inquiry">
<input type="hidden" name="token" value="<?php echo $token; ?>">
<div class="qa-form-group">
<label for="wr_name">작성자</label>
<input type="text" name="wr_name" id="wr_name" value="<?php echo $wr_name; ?>" class="form-control" required>
</div>
<?php if ($is_guest) { // 비회원일 경우에만 비밀번호와 자동등록방지 필드를 보여줍니다. ?>
<div class="qa-form-group">
<label for="wr_password">비밀번호</label>
<input type="password" name="wr_password" id="wr_password" class="form-control" required>
</div>
<?php } ?>
<div class="qa-form-group">
<label for="wr_email">이메일 (답변 수신용)</label>
<input type="email" name="wr_email" id="wr_email" value="<?php echo $wr_email; ?>" class="form-control" required>
</div>
<div class="qa-form-group">
<label for="wr_subject">문의 제목</label>
<input type="text" name="wr_subject" id="wr_subject" class="form-control" required>
</div>
<div class="qa-form-group">
<label for="wr_content">문의 내용</label>
<textarea name="wr_content" id="wr_content" class="form-control" required></textarea>
</div>
<?php if ($is_guest) { // 비회원 자동등록방지(캡챠) ?>
<div class="qa-form-group">
<label>자동등록방지</label>
<?php echo captcha_html(); ?>
</div>
<?php } ?>
<div class="qa-form-group">
<input type="submit" value="문의 등록하기" id="btn_submit" class="qa-form-submit">
</div>
</form>
</div>
<script>
// 폼 전송(submit) 시 필드 유효성 검사
function fwrite_submit(f) {
if (f.wr_name.value.trim() === "") {
alert("작성자 이름을 입력해주세요.");
f.wr_name.focus();
return false;
}
<?php if ($is_guest) { ?>
if (f.wr_password.value.trim() === "") {
alert("비밀번호를 입력해주세요.");
f.wr_password.focus();
return false;
}
<?php } ?>
if (f.wr_email.value.trim() === "") {
alert("이메일 주소를 입력해주세요.");
f.wr_email.focus();
return false;
}
if (f.wr_subject.value.trim() === "") {
alert("문의 제목을 입력해주세요.");
f.wr_subject.focus();
return false;
}
if (f.wr_content.value.trim() === "") {
alert("문의 내용을 입력해주세요.");
f.wr_content.focus();
return false;
}
<?php if ($is_guest) { ?>
// 캡챠(자동등록방지) 키 입력 검사
if (typeof(g5_captcha_url) !== 'undefined') {
if (!check_captcha()) {
return false; // check_captcha 함수에서 오류 메시지를 표시합니다.
}
}
<?php } ?>
// 중복 전송 방지를 위해 버튼 비활성화
document.getElementById("btn_submit").disabled = true;
document.getElementById("btn_submit").value = "전송 중...";
return true;
}
</script>
<?php
// 사이트 하단 디자인 포함
include_once(G5_PATH.'/_tail.php');
?></p>
<p>
이렇게 사용하시면됩니다.
단, php 메일서버를 이용하므로 공용으로 사용하는 웹호스팅이나 쉐어호스팅의 경우
스팸으로 걸러지거나 블랙리스트에 등록되어 메일 수신이 안될수도 있습니다. (거의 90% 로 메일수신 불가)
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
1개월 전
가끔 거짓말하는 AI 혼내주는법
이 코드에 있는 함수들이 그누보드의 어느 파일에 있는지 각각 알려줘.
이거 하나 넣으면 됩니다.
학습이 잘되었다면 각 함수별 파일위치 정리해줄거고
아니면 버버벅 거립니다.
로그인 후 평가할 수 있습니다
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인