ajax DB연결 부분 질문

ajax DB연결 부분 질문

QA

ajax DB연결 부분 질문

본문

현재 index.php-> login.php 로 이동되어서 로그인 양식 입력하게끔 해놓았습니다.

db.inc.php  : DB 연결 부분

login.proc.php : 로그인 값 받아서 처리하는 프로세스 부분

login.php 안에 ajax를 사용하여 login.proc.php 로 넘겨서 login.php 폼안에 출력을 해주고 있는데

login.proc.php 안에서 include("./../include/db.inc.php"); include가 기본적으로 되어있는데

db.inc.php 있는 연결정보 코드를 가져와 login.proc.php 여기 안에다가 넣어야지만 

ajax가 정상 작동합니다.  db연결파일을 이미 include 했는데 왜 정보를 가져와서 넣어야되는지 모르겠습니다.기존에는 db파일 include 해놓고 ajax사용하기전에 쿼리결과 가져와서 출력하는거까지 성공했는데

ajax 코드를 작성하고 나니 저러네요 하단에 코드 몇가지 생략해서 첨부합니다. 

[code]

// login.php   ajax를 여기 안에 넣었습니다. //

  <form class="loginbox" id="loginF">
                <h1>Login SAmple2</h1>
                <div id="login-error"></div>
                <input type="text" id="userId" name="userName" placeholder="USER ID">
                <input type="password" id="userPw" name="userPw" placeholder="PASSWORD">
                <button type="submit" name="login-submit" id="logbtn">LOGIN</button>
                <button type="button" name="join" 

</form>

// ajax/

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script type="text/javascript">
            $(function() {
                $(document).on("submit", "#loginF", function(event) {
                    event.preventDefault();
                    $.ajax({
                        type: "POST"
                        , url: "/resource/process/login.proc.php"
                        , data: $(this).serialize()
                        , success: function(response) {
                            
                            if (response == "success") {
                                $("#login-error").html("<div class='alert alert-success'>Login success</div>");
                                
                           
                            }
                            if (response == "error") {
                                $("#login-error").html("<div class='alert alert-warning'>Login warning</div>");
                            }
                        }
                    });
                });
            });
        </script>

 

 

//db.inc.php db연결 파일 //

 

<?php

$serverName = "localhost";
$userName = "root";
$userPass = "root";
$dbName = "exstart";
$dbconn = new mysqli($serverName , $userName ,$userPass ,$dbName);
$dbconn -> set_charset("utf8");

if(mysqli_connect_error()){
echo "데이터베이스 접속 실패","<br>";
echo "Error Msg : ",mysqli_connect_error();

}


?>

 

//

 

// login.proc.php //

 

<?php 
include("./../include/db.inc.php");

 

$userid = trim($_POST['userName']);
$userpw = $_POST['userPw'];
$sql = "SELECT * FROM userinfo WHERE userId = ? AND userPw = ?";
$stmt = $dbconn->prepare($sql);
$stmt->bind_param('ss',$userid ,$userpw);
$res = $stmt->execute();
$res = $stmt->get_result();
if ($res->num_rows == 1) { 

 

echo "success" ;

 

} else {

 

 echo "error";
}

?>

이 질문에 댓글 쓰기 :

답변 2

db.inc.php 의 상대경로명이 정확한지 확인해 보시겠어요?

 

include("./../include/db.inc.php"); --> 이부분이 이상해서요..

 

루트에 있다면

include("/include/db.inc.php");

 

경로는 맞습니다 다 테스트 해보았습니다 절대경로.상대경로 둘다 해보았는데 증상이 같습니다.
error_reporting(E_ALL);
ini_set('display_errors', '1');
if ( !file_exists('./../include/db.inc.php') ) exit('파일 없음');
에러 코드 전부 파일마다 추가해보고 , db연결부분 등등 전부 추가해서 해보았는데
에러는 나오지가 않습니다. 개발자도구 네트워크쪽 보면 전송이 되고 있는것 같은데
login.proc.php 에서 db연결정보 include 파일 주석처리하고 db.inc.php 에 있는 연결정보를 login.proc.php 에 직접 넣어야지만
ajax가 정상작동해요 ㅠ db.inc.php include 했을때 원래 정상작동해야지 맞는게 아닌가요?
그리고 xampp사용중입니다
db include 주석처리 안하고 했을시 네트워크에서 status code 보면 200 OK 로 login.proc.php로 전송요청 한게 계속 뜨기만 하고 response 값을 확인 해 보면 값은 정상적으로 가져옵니다. 근데ajax는 작동을 안하고.
db include 부분 주석처리하고 연결정보 직접넣었을때는
값은 정상으로 가져오고 ajax는 작동하고 있는 상황입니다.
또한 기존에 ajax사용전에 디비연결정보 include 해서 쿼리 날려서
테스트를 했었습니다 지금도 되고 있는데
ajax만 include된 디비연결정보로 처리가 되지않습니다.

login.proc.php

포스트로 받는 부분을 get 으로 하신뒤에

브라우져에서

login.proc.php?userName=xxxx&userPw=xxxx

이런식으로 직접 띄워서 에러를 체크해 보시죠...

디비 조회 및 소스가 제대로 작동하는지요....

주소창에 바로 실행해 보았습니다. 정상 작동합니다.

GET으로 했을때도 ..

GET방식도 db연결정보 include한거 주석처리하고 를 직접 연결정보를 넣어야

ajax가 작동합니다 현재

./../include/db.inc.php
../include/db.inc.php
둘다 리스폰스 값을 보면 가져옵니다.
/include/db.inc.php  이렇게 하면
include(): Failed opening 변수 등등 찾을수 없다는 에러가 나옵니다.
혹시 몰라 dbtest파일 하나 만들어서
db 테이블에 있는 정보 배열로 가져오는거까지 테스트 해보았습니다 다시..

원인을 찾았습니다 제가 db.inc.php 연결파일쪽에 하단에 //주석처리로 메모한게 있는데
이상한게 include 한거로 ajax작동시키면 리스폰스 값으로 같이 가져오더라구요
그래서 그냥 주석처리한부분 지우고 하니까 됩니다.
db연결정보쪽에는 //주석처리로 메모하면안되는건가요?소스영향없는걸로 배웠는데..

해결된지 알고 컴퓨터 재부팅좀 했는데 ...다시 먹통입니다 ㅋ
get.post 방식 바꿔보고 구문넣어서 테스트 해보고
alert(response) 뛰어서도 해보고.
include require , once  경로 일부로 바꿔가며 틀려보고도 해보고.절대경로 상대경로 다 마찬가지라..
db연결파일 하나씩 틀려보고도 해보고 다 정상인데.
왜 db연결파일 include했을떄만 리스폰스값만 받아오고 안되는건지 ajax가..원인 파악 불가입니다.ㅜ
참고로 php7.3 xampp mysql 최신버전 쓰고 있습니다.
버전 문제일거라고는 생각하지 않는데 혹시 버전도 문제가 있나요?
브라우저도 문제 있을까봐 파이어폭스 네이버웨일브라우저 구글크롬 익스플로어
엣지까지 테스트 해보았는데 같은증상입니다..

ajax 처리하고 나니 어떻게 보인다는건지 내용이 확인이 안됩니다.

지금 말씀하신 소스로는 데이터가 제대로 전달되면 받아서 처리되는 과정은 맞습니다.

// db.inc.php db연결정보파일
<?php

$serverName = "localhost";
$userName = "root";
$userPass = "root";
$dbName = "exstart";
$dbconn = new mysqli($serverName , $userName ,$userPass ,$dbName);
$dbconn -> set_charset("utf8");

if(mysqli_connect_error()){
echo "데이터베이스 접속 실패","<br>";
echo "Error Msg : ",mysqli_connect_error();

}


?>
db연결정보에 있는 접속 코드를 login.proc.php 로 복붙해서 넣고 기존 include 구문을 주석처리한 후에 실행하면
정상처리가 됩니다. login.proc.php 파일에 이미 db.inc.php파일을 include를해놓았는데
이해가 안되서요
ajaxt코드 쓰기전에 접속정보 include로 해놓은 상황에 계정 확인하는 구문넣어서 출력했을때는
정상처리가 되었는데 왜 ajax사용할때는 db연결부분 include해놓아도 접속정보를 전부
가져다가 넣어야되는지 모르겠습니다.

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

회원로그인

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