간편 상담문의 게시판 관련 질문입니다 ㅠ
본문
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와 데이터 처리에 관한 질문
-
AJAX에서 데이터 추가하기:
data
객체 내에서"subject": f.wr_subject.value + " 텍스트"
는 제대로 작동해야 합니다. 만약 변경사항이 반영되지 않는다면, 서버 측에서 이 값을 제대로 처리하고 있지 않거나, JavaScript 코드의 다른 부분에서 오류가 발생하고 있을 가능성이 있습니다. -
넘긴 데이터 추적하기: 서버 측 스크립트에서 넘겨진 데이터를 로그로 남기거나 디버그하는 방법은 여러 가지가 있습니다. 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' 입니다.