Ai로 그누보드 게시판용 폼메일을 만들어 봤는데 작동하지 않네요. 코드 한 번 봐주세요.

Ai로 그누보드 게시판용 폼메일을 만들어 봤는데 작동하지 않네요. 코드 한 번 봐주세요.

QA

Ai로 그누보드 게시판용 폼메일을 만들어 봤는데 작동하지 않네요. 코드 한 번 봐주세요.

본문


<?php
// 이 파일의 가장 첫 부분에 위치해야 합니다.
include_once('./_common.php');
 
// =============================================================================
// ● 설정 영역 ●
// =============================================================================
 
// 1. [필수] 문의 글을 등록할 '게시판 아이디(bo_table)'를 정확하게 입력해주세요.
// 예: 관리자 페이지 '게시판 관리'에서 확인하신 ID가 'qna' 라면 $bo_table = "qna"; 로 수정
$bo_table = "qa";
 
// 2. 페이지 상단에 표시될 제목을 설정해주세요.
$g5['title'] = "온라인 문의";
 
// =============================================================================

 
// 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);
}
 
// 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;
    }
    /* 자동등록방지(캡챠) 스타일 */
    #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 G5_BBS_URL; ?>/write_update.php" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off">
       
        <!-- 그누보드 게시판 연동을 위한 필수 히든(숨김) 필드 -->
        <!-- 절대 수정하거나 삭제하지 마세요. -->
        <input type="hidden" name="w" value=""> <!-- 새 글 작성을 의미 (수정 시 'u') -->
        <input type="hidden" name="bo_table" value="<?php echo $bo_table; ?>">
        <input type="hidden" name="token" value="<?php echo $token; ?>">
        <input type="hidden" name="html" value="1"> <!-- HTML 태그 사용 허용 -->
 
        <!-- QA 게시판 스킨의 '답변 시 이메일 수신' 기능을 활성화하는 필드 -->
        <input type="hidden" name="qa_email_recv" value="1">
 
        <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');
?>
 

이 질문에 댓글 쓰기 :

답변 3

그누보드에는 mailer() 함수가 정의되어있습니다.

글이 작성되면 관리자에게 메일을 발송할수 있는데요

 

/bbs/write_update.php

파일을 보시면

 


// 메일발송 사용 (수정글은 발송하지 않음)
if (!($w == 'u' || $w == 'cu') && $config['cf_email_use'] && $board['bo_use_email']) {
    // 관리자의 정보를 얻고
    $super_admin = get_admin('super');
    $group_admin = get_admin('group');
    $board_admin = get_admin('board');
    $wr_subject = get_text(stripslashes($wr_subject));
    $tmp_html = 0;
    if (strstr($html, 'html1'))
        $tmp_html = 1;
    else if (strstr($html, 'html2'))
        $tmp_html = 2;
    $wr_content = conv_content(conv_unescape_nl(stripslashes($wr_content)), $tmp_html);
    $warr = array( ''=>'입력', 'u'=>'수정', 'r'=>'답변', 'c'=>'코멘트', 'cu'=>'코멘트 수정' );
    $str = $warr[$w];
    $subject = '['.$config['cf_title'].'] '.$board['bo_subject'].' 게시판에 '.$str.'글이 올라왔습니다.';
    $link_url = get_pretty_url($bo_table, $wr_id, $qstr);
    include_once(G5_LIB_PATH.'/mailer.lib.php');
    ob_start();
    include_once ('./write_update_mail.php');
    $content = ob_get_contents();
    ob_end_clean();
    $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'];
    // 원글게시자에게 보내는 메일
    if ($config['cf_email_wr_write']) {
        if($w == '')
            $wr['wr_email'] = $wr_email;
        $array_email[] = $wr['wr_email'];
    }
    // 옵션에 메일받기가 체크되어 있고, 게시자의 메일이 있다면
    if (isset($wr['wr_option']) && isset($wr['wr_email'])) {
        if (strstr($wr['wr_option'], 'mail') && $wr['wr_email'])
            $array_email[] = $wr['wr_email'];
    }
    // 중복된 메일 주소는 제거
    $unique_email = array_unique($array_email);
    $unique_email = run_replace('write_update_mail_list', array_values($unique_email), $board, $wr_id);
    for ($i=0; $i<count($unique_email); $i++) {
        mailer($wr_name, $wr_email, $unique_email[$i], $subject, $content, 1);
    }
}

 

이런식으로 메일을 보내게 됩니다.

 

/lib/mailer.lib.php 에 mailer() 함수가 등록되어있죠.

 

ai 라고해도 사용자가 어느정도 그누보드에 대하여 지식이 있어야 올바른 결과가 나옵니다.

 

따라서 첨부해주신 코드 기반으로 그누보드 메일함수에 연결하면

 


<?php
// 이 파일의 가장 첫 부분에 위치해야 합니다.
include_once('./_common.php');
 
// =============================================================================
// ● 설정 영역 ●
// =============================================================================
 
// 1. [필수] 문의 글을 등록할 '게시판 아이디(bo_table)'를 정확하게 입력해주세요.
$bo_table = "qa";
 
// 2. 페이지 상단에 표시될 제목을 설정해주세요.
$g5['title'] = "온라인 문의";
// 3. 메일 발송 설정
$admin_email = $config['cf_admin_email']; // 관리자 이메일
$admin_name = $config['cf_admin_email_name'] ? $config['cf_admin_email_name'] : '관리자'; // 관리자 이름
 
// =============================================================================
// 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);
}
// 폼 데이터 처리
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 태그 제거 및 엔터를 <br>로 변환
        $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;'>
                        빠른 시일 내에 답변드리겠습니다.<br>
                        감사합니다.
                    </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');
?>

 

이렇게 사용하시면됩니다.

단, php 메일서버를 이용하므로 공용으로 사용하는 웹호스팅이나 쉐어호스팅의 경우

스팸으로 걸러지거나 블랙리스트에 등록되어 메일 수신이 안될수도 있습니다. (거의 90% 로 메일수신 불가)

가끔 거짓말하는 AI 혼내주는법

 

이 코드에 있는 함수들이 그누보드의 어느 파일에 있는지 각각 알려줘.

 

이거 하나 넣으면 됩니다.

학습이 잘되었다면 각 함수별 파일위치 정리해줄거고

아니면 버버벅 거립니다.

그누보드엔 get_board_config 함수란 게 존재 안 합니다. 
이 함수부터 먼저 정의해주라고 하셔야....

답변을 작성하시기 전에 로그인 해주세요.
전체 129,406 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT