PHP에서 POST 값 전송 문제
사용자 ID 중복확인 시 아이디란에 작성한 값이 전송되지 않는 문제를 겪고 있습니다.
며칠째 문제의 원인을 찾지 못하고 있어 도움을 부탁 드립니다.
서버환경
os버전 : rocky 8.8
php버전 : 7.4.33
mysql버전 : 8.0.32
1. 아이디생성 소스 user_write.php
</p>
<p><?php
include "_inc/head.php";
?>
<div class="subCont">
<h1>사용자 관리</h1>
<div class="comnConSec">
<p class="midTitle">사용자 등록</p></p>
<p> <div class="inputTable">
<form action="user_write_ok.php" id="registform" method="post">
<table>
<colgroup>
<col width="15%" /><col width="*" /><col width="15%" /><col width="*" />
</colgroup>
<tr>
<th>아이디</th>
<td colspan="3">
<input type="text" id="userid" name="userid" maxlength="15" class="wd300 maR10" required/>
<span class="btnS add"><a href="javascript:reg_id_chk();">중복확인</a></span>
<input type="hidden" id="id_chk" value="">
<span style="color:red" id="id_chk_msg"></span>
</td>
</tr>
<tr>
<th>이름</th>
<td colspan="3">
<input type="text" id="name" name="name" maxlength="15" class="wd300 maR10" required/>
</td>
</tr>
<tr>
<th>비밀번호</th>
<td><input type="password" id="passwd" name="passwd" maxlength="20" required/></td>
<th>비밀번호 확인</th>
<td><input type="password" id="passwd2" name="passwd2" maxlength="20" required/></td>
</tr>
<tr>
<th>이메일</th>
<td colspan="3"><input type="text" id="email" name="email" maxlength="100" required/></td>
</tr>
<tr>
<th>연락처</th>
<td colspan="3"><input type="text" id="tel" name="tel" maxlength="20" required/></td>
</tr>
<tr>
<th>등록권한제한</th>
<td colspan="3">
<label class="chkB">
<input type="checkbox" name="chk_1" value="Y"><span>물류센터 관리</span>
</label>
<label class="chkB">
<input type="checkbox" name="chk_2" value="Y"><span>장비현황 관리</span>
</label>
<label class="chkB">
<input type="checkbox" name="chk_3" value="Y"><span>유지보수 관리</span>
</label>
<label class="chkB">
<input type="checkbox" name="chk_4" value="Y"><span>장애이력 관리</span>
</td>
</tr>
</table>
</form>
</div></p>
<p> <div class="btnArea arRight">
<span class="btn edit"><a href="javascript:flogin_submit();">등록</a></span>
<span class="btn list"><a href="./user_list.php">목록</a></span>
</div>
</div>
</div>
</div>
</div>
<script>
function flogin_submit(){
if($("#userid").val()==""){
alert('아이디를 입력해 주세요');
$("#userid").focus();
return false;
}
if($("#name").val()==""){
alert('이름을 입력해 주세요');
$("#name").focus();
return false;
}
if($("#passwd").val()==""){
alert('비밀번호를 입력해 주세요');
$("#passwd").focus();
return false;
}
if($("#passwd").val().length<=5){
alert('비밀번호를 5자 이상 입력해 주세요');
$("#passwd").focus();
return false;
}
if($("#passwd2").val()==""){
alert('비밀번호확인을 입력해 주세요');
$("#passwd2").focus();
return false;
}
if($("#passwd").val()!=$("#passwd2").val()){
alert('비밀번호가 서로 다릅니다 다시 입력해 주세요');
$("#passwd").val("");
$("#passwd2").val("");
$("#passwd").focus();
return false;
}
if($("#email").val()==""){
alert('이메일을 입력해 주세요');
$("#email").focus();
return false;
}</p>
<p> if(!fn_emailChk($("#email").val())){
$("#email").val("");
$("#email").focus();
return false;
}</p>
<p> if($("#tel").val()==""){
alert('연락처를 입력해 주세요');
$("#tel").focus();
return false;
}</p>
<p> if($("#id_chk").val()==""){
alert('아이디 중복체크 확인해 주세요');
return false;
}
$("#registform").submit();
}</p>
<p>function reg_id_chk(){
if($("#userid").val()==""){
alert('아이디를 입력해 주세요');
$("#userid").focus();
return false;
}</p>
<p> $.post("ajax.id_chk.php",{userid:$("#userid").val()},function(data){
alert(data);
if (data=="Y"){
$('#id_chk_msg').text("등록된 아이디가 존재합니다.");
}else{
$('#id_chk_msg').text("가입이 가능한 아이디 입니다.");
$('#id_chk').val('Y');
$('#userid').attr("disabled",true);
}
});
}</p>
<p>function fn_emailChk(email){
var regExp = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.[a-zA-Z]{2,4}$/;
if(!regExp.test(email)){
alert("이메일 형식이 아닙니다.");
return false;
}
return true;
}
</script>
<?php
include "_inc/tail.php";</p>
<p>
2. 중복아이디 체크소스 ajax.id_chk.php
</p>
<p><?php
include "./_inc/common.php";</p>
<p>//로그인체크
//include_once "login_chk.php";</p>
<p>$userid = clean_xss_tags(trim($_POST['userid']));</p>
<p>/*if($userid){
echo "N";
exit;
}*/</p>
<p>$sql = "select idx from member where userid='{$userid}'";
echo $sql;
exit;
/*$result = mysqli_query($connect, $sql);
$row = mysqli_fetch_array($result);
if ($row[idx]){
echo "Y";
}else{
echo "N";
echo $sql;
}*/
?></p>
<p>
아래 이미지는 post 전송 테스트를 위한 팝업 화면으로 test 라는 아이디가 출력이 안됩니다.

답변 5개
$.post("ajax.id_chk.php",{userid:$("#userid").val()},function(data){
→
var userid = $("#userid").val();
$.post("ajax.id_chk.php", {userid : userid}, function(data) {
댓글을 작성하려면 로그인이 필요합니다.
다음과 같이 수정해 보시는건 어떨까요?
주석 처리된 부분과 중복 체크 쿼리를 실행하기 전에 mysqli_query 함수를 사용해야 하며, 또한, AJAX 요청에 대한 응답 형식을 조정하여 프론트엔드에서 적절히 처리할 수 있도록 변경해야 할 것으로 생각합니다.
ajax.id_chk.php 파일 수정
</p>
<p><?php
include "./_inc/common.php";</p>
<p>$userid = clean_xss_tags(trim($_POST['userid']));</p>
<p>$sql = "SELECT idx FROM member WHERE userid='{$userid}'";
$result = mysqli_query($connect, $sql);</p>
<p>if ($result) {
$row = mysqli_fetch_array($result);</p>
<p> if ($row['idx']) {
echo "Y"; // 중복된 아이디가 있을 경우
} else {
echo "N"; // 중복된 아이디가 없을 경우
}
} else {
echo "Error occurred.";
}
?>
user_write.php 파일 수정
</p>
<p><!-- 중복확인 버튼 클릭 시 아이디 체크 함수 수정 -->
<span class="btnS add"><a href="javascript:reg_id_chk();">중복확인</a></span>
<!-- 아이디 입력란에 readonly 속성 추가 -->
<input type="text" id="userid" name="userid" maxlength="15" class="wd300 maR10" required readonly />
<!-- 중복확인 결과를 표시할 메시지 영역에 색상 적용 -->
<span style="color: red" id="id_chk_msg"></span>
댓글을 작성하려면 로그인이 필요합니다.
일단 지금 $userid 안나오는 것과는 상관이 없지만 나중에 값 넘어갈때 안넘어 갈수 있으니 $.post부분에 ("disabled", true)부분을 ("readonly", true)로 바꿔 주시고
$_post부분에서 user_id를 콘솔에 찍어보시고,
값이 있다면 ajax.id_chk.php에서 $_POST['user_id']를 찍어보시고,
user_write.php 와 ajax.id_chk.php 파일이 같은 위치에 있는지도 확인해 보세요.
댓글을 작성하려면 로그인이 필요합니다.
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인