테스트 사이트 - 개발 중인 베타 버전입니다

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 혼내주는법

 

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

 

이거 하나 넣으면 됩니다.

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

아니면 버버벅 거립니다.

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

s
sinbi Expert
1개월 전

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

간장게장같은남자
1개월 전
ㄹㅇ 가끔 그누보드 연동 프로그램 AI 로 짜면 chatgpt 저런식으로 불러오는데 딥빡..
s
sinbi
1개월 전
ㅎㅎ 저도 많이 당했습니다. 너무 그럴싸하게 답해서....

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인