PHP에서 POST 값 전송 문제
본문
사용자 ID 중복확인 시 아이디란에 작성한 값이 전송되지 않는 문제를 겪고 있습니다.
며칠째 문제의 원인을 찾지 못하고 있어 도움을 부탁 드립니다.
서버환경
os버전 : rocky 8.8
php버전 : 7.4.33
mysql버전 : 8.0.32
1. 아이디생성 소스 user_write.php
<?php
include "_inc/head.php";
?>
<div class="subCont">
<h1>사용자 관리</h1>
<div class="comnConSec">
<p class="midTitle">사용자 등록</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>
<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;
}
if(!fn_emailChk($("#email").val())){
$("#email").val("");
$("#email").focus();
return false;
}
if($("#tel").val()==""){
alert('연락처를 입력해 주세요');
$("#tel").focus();
return false;
}
if($("#id_chk").val()==""){
alert('아이디 중복체크 확인해 주세요');
return false;
}
$("#registform").submit();
}
function reg_id_chk(){
if($("#userid").val()==""){
alert('아이디를 입력해 주세요');
$("#userid").focus();
return false;
}
$.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);
}
});
}
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";
2. 중복아이디 체크소스 ajax.id_chk.php
<?php
include "./_inc/common.php";
//로그인체크
//include_once "login_chk.php";
$userid = clean_xss_tags(trim($_POST['userid']));
/*if($userid){
echo "N";
exit;
}*/
$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;
}*/
?>
아래 이미지는 post 전송 테스트를 위한 팝업 화면으로 test 라는 아이디가 출력이 안됩니다.
!-->!-->
답변 5
개발자 도구 네트워크로 해당 값이 제대로 넘어갔나 확인을 해보시고 넘어갔으면 clan_xss 부분을 뺴고 그냥 post로만 해서 한번 확인을 해보세요. 일단 올리신 소스만으로는 큰 문제는 없어보이네요. 그리고 해당페이지에서 똑같은 아이디가 있나도 한번 확인해보시고요.
아이디 체크 후 아래 부분을 삭제해 주시는 게 좋을 것 같네요.
$('#userid').attr("disabled",true);
일단 지금 $userid 안나오는 것과는 상관이 없지만 나중에 값 넘어갈때 안넘어 갈수 있으니 $.post부분에 ("disabled", true)부분을 ("readonly", true)로 바꿔 주시고
$_post부분에서 user_id를 콘솔에 찍어보시고,
값이 있다면 ajax.id_chk.php에서 $_POST['user_id']를 찍어보시고,
user_write.php 와 ajax.id_chk.php 파일이 같은 위치에 있는지도 확인해 보세요.
다음과 같이 수정해 보시는건 어떨까요?
주석 처리된 부분과 중복 체크 쿼리를 실행하기 전에 mysqli_query 함수를 사용해야 하며, 또한, AJAX 요청에 대한 응답 형식을 조정하여 프론트엔드에서 적절히 처리할 수 있도록 변경해야 할 것으로 생각합니다.
ajax.id_chk.php 파일 수정
<?php
include "./_inc/common.php";
$userid = clean_xss_tags(trim($_POST['userid']));
$sql = "SELECT idx FROM member WHERE userid='{$userid}'";
$result = mysqli_query($connect, $sql);
if ($result) {
$row = mysqli_fetch_array($result);
if ($row['idx']) {
echo "Y"; // 중복된 아이디가 있을 경우
} else {
echo "N"; // 중복된 아이디가 없을 경우
}
} else {
echo "Error occurred.";
}
?>
user_write.php 파일 수정
<!-- 중복확인 버튼 클릭 시 아이디 체크 함수 수정 -->
<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>
!-->!-->
$.post("ajax.id_chk.php",{userid:$("#userid").val()},function(data){
→
var userid = $("#userid").val();
$.post("ajax.id_chk.php", {userid : userid}, function(data) {