PHP에서 POST 값 전송 문제

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
PHP에서 POST 값 전송 문제

QA

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 라는 아이디가 출력이 안됩니다.

 

3553521223_1701322022.1577.png

이 질문에 댓글 쓰기 :

답변 5

개발자 도구 네트워크로 해당 값이 제대로 넘어갔나 확인을 해보시고 넘어갔으면 clan_xss 부분을 뺴고 그냥 post로만 해서 한번 확인을 해보세요. 일단 올리신 소스만으로는 큰 문제는 없어보이네요. 그리고 해당페이지에서 똑같은 아이디가 있나도 한번 확인해보시고요.

일단 지금 $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) {

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

회원로그인

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