간편 상담문의 게시판 관련 질문입니다 ㅠ

간편 상담문의 게시판 관련 질문입니다 ㅠ

QA

간편 상담문의 게시판 관련 질문입니다 ㅠ

본문

echo latest('theme/basic', 'counsel', 4, 23); // /theme/tail.php

latest로 아래 상담신청 양식을 불러와서 넘기는건데 $subject로 되어있는 부분에 input 태그로 입력받은 이름을 앞에 텍스트로 "홍*동 님 날짜 상담 접수되었습니다" 와 같이 출력되게 하고 싶은데

아무 것도 모르다 보니 어떻게 해야 하는지 모르겠습니다.. 혹시 알려주실 고수분 계신가요 ㅠ

(아래 코드 첨부합니다)

 

<?php

if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

//include_once(G5_CAPTCHA_PATH.'/captcha.lib.php');

 

// 세션 멤버 정보

global $member;

 

// 제목 자동생성

$now = date("Y-m-d H:i");

$nowDate = strtotime($now);

$subject = date("m-d", $nowDate). " 상담문의가 접수되었습니다";

$name = "관리자";

// $subject = date("Y-m-d H:i")." 상담문의";


 

// 게시판 설정 불러오기

$board = get_board_db($bo_table);

$cfg = [];

for($idx=1; $idx<=10; $idx++) {

    $key = 'bo_'.$idx.'_subj';

    if($board[$key]) $cfg[$board[$key]] = $board['bo_'.$idx];

}

 

// 문의분류 재생성 [공지]제거

$is_category = false;

if ($board['bo_use_category']) {

    $category_list = explode('|',$board['bo_category_list']);

    $is_category = true;

}

 

$is_file = false;

if ($member['mb_level'] >= $board['bo_upload_level']) {

    $is_file = true;

}

$file_count = (int)$board['bo_upload_count'];

 

/**

 * 경로 설정

 */

$board_skin_name = $rows;

$board_skin_path = '';

 

// 테마가 아닐경우

if(strpos($board_skin_name, 'theme') === false) {

    $board_skin_path = G5_SKIN_PATH.'/board'.str_replace('theme', '', $board_skin_name);

} else {

    $board_skin_path = G5_THEME_PATH.'/skin/board'.str_replace('theme', '', $board_skin_name);

}

 

// 개인정보 처리방침

// $privacy_html = file_get_contents($board_skin_path.'/privacy.html');

// foreach (explode('|',$cfg['개인정보처리방침']) as $idx=>$v) {

//     $privacy_html = str_replace("{{{$idx}}}", $v, $privacy_html);

// }

 

// 캡챠 무조건 사용하도록 하기

// $is_use_captcha = false;

// $captcha_html = captcha_html();

// $captcha_js   = chk_captcha_js();

 

$action_url = https_url(G5_BBS_DIR)."/write_update.php";

add_stylesheet('<link rel="stylesheet" href="'.$latest_skin_url.'/style.css?ver='.rand(17, 65537).'">', 0);

 

?>

<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>"

      onsubmit="return fwrite_submit(this);"

      method="post" enctype="multipart/form-data" autocomplete="off">

    <input type="hidden" name="uid" value="<?php echo get_uniqid()?>">

    <input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">

    <input type="hidden" name="wr_subject" value="<?php echo $subject ?>">

    <input type="hidden" name="wr_name" value="<?php echo $name ?>">

    <input type='hidden' name='token' value='<?php echo get_write_token($bo_table); ?>'>

    <input type="hidden" name="ret_url" value="<?php echo $_SERVER['REQUEST_URI']?>">

 

    <!--

    폼메일 입력 구조를 정의합니다.

    입력받을 데이터를 name|항목이름 순으로 입력합니다.

    -->

    <input type="hidden" name="contents_info[]" value="wr_content|성함">

    <!-- <input type="hidden" name="contents_info[]" value="wr_email|이메일"> -->

    <input type="hidden" name="contents_info[]" value="wr_1|연락처">

    <!-- <input type="hidden" name="contents_info[]" value="wr_2|직책"> -->

    <!-- <input type="hidden" name="contents_info[]" value="ca_name|문의종류"> -->

    <!-- <input type="hidden" name="contents_info[]" value="wr_content|문의내용"> -->

 

    <section id="formmail-write">

        <div class="form-body">

            <p>

                <img src="<?php echo G5_THEME_URL ?>/images/icon/subway.png" alt="역에서 도보 1분">

                <span>1번 출구</span>

            </p>

            <div class="form">

                <div class="form-group col4 name">

                    <input type="text" name="wr_content" id="wr_content" class="form-control" required>

                    <span>성<span class="space"></span>함 : </span>

                </div>

                <div class="form-group col4 tel">

                    <input type="tel" name="wr_1" id="wr_1" class="form-control" maxlength="15" required>

                    <span>연락처 : </span>

                </div>

            </div>

            <div class="form-footer submit">

                <button type="button" id="btn_submit" class="btn_submit btn btn-primary" onclick="value_checked()">추가 혜택 <br>알아보기<span><img src="<?php echo G5_THEME_URL ?>/images/icon/icon_click.gif" alt="커서 아이콘"></span></button>

            </div>

        </div>

    </section>

</form>




 

<script type="text/javascript">

    function fwrite_submit(f) {

        let subject = "";

        let content = "";

        $.ajax({

            url: g5_bbs_url + "/ajax.filter.php",

            type: "POST",

            data: {

                "subject": f.wr_subject.value,

                "content": f.wr_content.value

            },

            dataType: "json",

            async: false,

            cache: false,

            success: function(data, textStatus) {

                subject = data.subject;

                content = data.content;

 

                console.log(subject + ", " + content);

            }

        });

 

        if (subject) {

            alert("제목에 금지단어('" + subject + "')가 포함되어있습니다");

            f.wr_subject.focus();

            return false;

        }

 

        if (content) {

            alert("내용에 금지단어('" + content + "')가 포함되어있습니다");

            if (typeof(ed_wr_content) != "undefined")

                ed_wr_content.returnFalse();

            else

                f.wr_content.focus();

            return false;

        }

 

        // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함

        <?php //echo $captcha_js?>

 

        // document.getElementById("btn_submit").disabled = "disabled";

 

        // return true;

    }

 

    function value_checked() {

        var wr_1 = document.getElementById("wr_1");

        // var tel_rule = /^[0-9]{2,3}-[0-9]{3,4}-[0-9]{4}$/;

        var name = document.getElementById("wr_content");

 

        if(name.value == "") {

            alert("성함을 입력해주세요.");

            name.focus();

            return false;

        }

        if(isNaN(name.value) == false) {

            alert("성함에는 숫자를 적을 수 없습니다.");

            name.focus();

            return false;

        }

        if(wr_1.value == "") {

            alert("번호를 입력해주세요.");

            wr_1.focus();

            return false;

        }

        // if(tel_rule.test(wr_1.value) == false) {

        //     wr_1.focus();

        //     alert("*** 개인정보보호를 위한 휴대폰번호 노출방지 *** 형식으로 입력해주세요.");

        //     return false;

        // }

 

        $('#btn_submit').prop("type", "submit");

 

    }


 

    function autoHypenPhone(str){

            str = str.replace(/[^0-9]/g, '');

            var tmp = '';

            if( str.length < 4){

                return str;

            }else if(str.length < 7){

                tmp += str.substr(0, 3);

                tmp += '-';

                tmp += str.substr(3);

                return tmp;

            }else if(str.length < 11){

                tmp += str.substr(0, 3);

                tmp += '-';

                tmp += str.substr(3, 3);

                tmp += '-';

                tmp += str.substr(6);

                return tmp;

            }else{              

                tmp += str.substr(0, 3);

                tmp += '-';

                tmp += str.substr(3, 4);

                tmp += '-';

                tmp += str.substr(7);

                return tmp;

            }

            return str;

        }

 

var cellPhone = document.getElementById('wr_1');

cellPhone.onkeyup = function(event){

        event = event || window.event;

        var _val = this.value.trim();

        this.value = autoHypenPhone(_val) ;

}

</script>

 

 

그리고 추가로 궁금한건

1. ajax로 subject와 content를 넘기는데 예를 들면 "subject" : f.wr_subject.value + "텍스트", 이렇게 해도 변경되는 부분이 없던데 "텍스트"라는 글자가 추가되어야 하는거 아닌가요,,?

 

2. 넘긴 데이터를 다른 게시판에서 $list[$i][..]로 받아오는 거 같은데 넘긴 데이터가 어느 변수에 저장되는건지 알기 위해 살펴보는 방법..? 같은 팁이 있을까요?

이 질문에 댓글 쓰기 :

답변 2

상담 신청 양식에서 사용자 입력 값을 처리하는 방법

사용자가 입력한 이름을 포함하여 특정 텍스트 형태로 상담 접수 제목을 생성하려면, 입력받은 값을 PHP 스크립트에서 처리하고 이를 폼 제출 시 사용해야 합니다. 예를 들어, "홍*동 님 날짜 상담 접수되었습니다"와 같은 형식을 구현하기 위해 다음과 같이 수정할 수 있습니다.

수정된 PHP 코드

입력 폼에서 사용자의 이름을 받고, 이를 wr_subject에 사용하려면 폼 제출 전에 JavaScript에서 이 값을 수정해야 합니다.

 


// 제목 자동생성
$now = date("Y-m-d H:i");
$subject = date("m-d", strtotime($now)) . " 상담문의가 접수되었습니다";

HTML 폼 업데이트


<input type="text" name="wr_content" id="wr_content" class="form-control" required>
<span>성<span class="space"></span>함 : </span>
 

JavaScript에서 입력 처리 업데이트

JavaScript 함수 value_checked를 수정하여 사용자 입력을 받아 제목을 업데이트하도록 합니다.


function value_checked() {
    var name = document.getElementById("wr_content").value; // 사용자 이름 가져오기
    if(name.trim() === "") {
        alert("성함을 입력해주세요.");
        document.getElementById("wr_content").focus();
        return false;
    }
    // 이름 필드에서 숫자 사용 불가 처리
    if(!isNaN(name)) {
        alert("성함에는 숫자를 적을 수 없습니다.");
        document.getElementById("wr_content").focus();
        return false;
    }
    // 이름에서 첫 글자 외 모든 글자를 별표 처리
    var maskedName = name[0] + '*'.repeat(name.length - 1);
    var now = new Date();
    var formattedDate = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate();
    var subject = maskedName + " 님 " + formattedDate + " 상담 접수되었습니다";
    document.getElementsByName("wr_subject")[0].value = subject; // 제목 업데이트
    $('#btn_submit').prop("type", "submit");
}
 

 

AJAX와 데이터 처리에 관한 질문

  1. AJAX에서 데이터 추가하기: data 객체 내에서 "subject": f.wr_subject.value + " 텍스트"는 제대로 작동해야 합니다. 만약 변경사항이 반영되지 않는다면, 서버 측에서 이 값을 제대로 처리하고 있지 않거나, JavaScript 코드의 다른 부분에서 오류가 발생하고 있을 가능성이 있습니다.

  2. 넘긴 데이터 추적하기: 서버 측 스크립트에서 넘겨진 데이터를 로그로 남기거나 디버그하는 방법은 여러 가지가 있습니다. PHP에서는 error_log(print_r($_POST, true));를 사용하여 POST 데이터를 로그로 남길 수 있습니다. 이렇게 하면 error_log 파일을 통해 넘어온 데이터를 확인할 수 있습니다.

이러한 수정을 통해 폼에서 사용자 입력을 받아 상담 신청의 제목을 동적으로 생성하고, 이를 서버로 넘길 수 있습니다. 또한, 넘긴 데이터를 추적하여 문제를 해결할 수 있습니다.

=====

With ChatGPT

// 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함

subject = f.wr_subject.value.replace(/(^.)./g, '$1*') + '님 ' + subject;

// 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함

 

-----------

 

(추가 1.)

$.ajax({

            url: g5_bbs_url + "/ajax.filter.php",

            type: "POST",

            data: {

                "subject": f.wr_subject.value,

                "content": f.wr_content.value

            },

            dataType: "json",

            async: false,

            cache: false,

            success: function(data, textStatus) {

                subject = data.subject;

                content = data.content;

 

                console.log(subject + ", " + content);

            }

        });

 

넘긴 후, 결과 success 부분에

subject = data.subject 구문이 있어서

최종 subject 는 ajax.filter.php 에서 넘긴 결과값에 영향을 받아서

그렇습니다.

subject 에 뭔가 추가된 값을 주고 싶다면, 

이 구문 이후에 추가해주어야 됩니다.

 

let str = '';

str = 'a' + 'xyz';

str = 'a' + 'bc';

str 변수에 저장된 값은 'axyz' 이 아닌 'abc' 입니다.

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

회원로그인

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