간편 상담문의 게시판 관련 질문입니다 ㅠ 채택완료
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("010-1234-5678 형식으로 입력해주세요.");
// 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에서 이 값을 수정해야 합니다.
</p>
<p>// 제목 자동생성
$now = date("Y-m-d H:i");
$subject = date("m-d", strtotime($now)) . " 상담문의가 접수되었습니다";
HTML 폼 업데이트
</p>
<p><input type="text" name="wr_content" id="wr_content" class="form-control" required>
<span>성<span class="space"></span>함 : </span>
</p>
<p>
JavaScript에서 입력 처리 업데이트
JavaScript 함수 value_checked를 수정하여 사용자 입력을 받아 제목을 업데이트하도록 합니다.
</p>
<p>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;
}</p>
<p> // 이름에서 첫 글자 외 모든 글자를 별표 처리
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; // 제목 업데이트</p>
<p> $('#btn_submit').prop("type", "submit");
}
</p>
<p>
AJAX와 데이터 처리에 관한 질문
-
AJAX에서 데이터 추가하기:
data객체 내에서"subject": f.wr_subject.value + " 텍스트"는 제대로 작동해야 합니다. 만약 변경사항이 반영되지 않는다면, 서버 측에서 이 값을 제대로 처리하고 있지 않거나, JavaScript 코드의 다른 부분에서 오류가 발생하고 있을 가능성이 있습니다. -
넘긴 데이터 추적하기: 서버 측 스크립트에서 넘겨진 데이터를 로그로 남기거나 디버그하는 방법은 여러 가지가 있습니다. PHP에서는
error_log(print_r($_POST, true));를 사용하여 POST 데이터를 로그로 남길 수 있습니다. 이렇게 하면error_log파일을 통해 넘어온 데이터를 확인할 수 있습니다.
이러한 수정을 통해 폼에서 사용자 입력을 받아 상담 신청의 제목을 동적으로 생성하고, 이를 서버로 넘길 수 있습니다. 또한, 넘긴 데이터를 추적하여 문제를 해결할 수 있습니다.
=====
With ChatGPT
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
// 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함
→
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' 입니다.
답변에 대한 댓글 1개
감사합니다 ㅠ
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
너무 감사합니다아