우선 signup.js 파일에서
// signup.js
$.ajax({
url: '../db/signup.php',
type: 'get',
data: {
id: signupData.userData.id,
},
dataType: 'json',
success: function (response) {
//... php에서 넘어온 response를 처리
},
error: function (request, status, error) {
alert('서버 연결에 실패하였습니다.');
console.log(request + '\n');
console.log(status + '\n');
console.log(error + '\n');
},
});
Ajax get방식으로 php 네트워크 통신을 시도
<?php
// signup.php
require_once './sqlConnect.php';
require_once './resultMessage.php';
$resultMessage = new ResultMessage();
// ajax로 넘겨 받은 데이터를 캐싱해준다.
$id = $_REQUEST['id'];
$password = $_REQUEST['password'];
$name = $_REQUEST['name'];
$email = $_REQUEST['email'];
$nickname = $_REQUEST['nickname'];
$birth = $_REQUEST['birth'];
// DB데이터 삽입 쿼리문 작성
$query = "INSERT INTO user_signdata (id, password, name, email, nickname, birth)
VALUES ('$id', '$password', '$name', '$email', '$nickname', '$birth')";
// 쿼리문을 실행!
$result = mysqli_query($connect, $query);
if($result)
{
// 추가할 때 다른 테이블의 DB도 같이 추가한다 (relation 외래키로 묶여있다)
$query = "insert into user_bookmark (id) values('$id')";
$result = mysqli_query($connect, $query);
if($result)
{
// 성공 신호를 보낸다
$resultMessage->ResultCheck(ResultMessage::SIGNUP_SUCCESS);
}
}
// 쿼리문 실행 에러
else{
$resultMessage->ResultCheck(ResultMessage::SIGNUP_FAIL, mysqli_error($connect));
}
?>
request_once로 전에 했던 sqlconnect.php파일을 포함시켜주고 부가적으로 ajax로 response 받기 위한 클래스 ResultMessage를 만들었다. 그리하여 html, php, javascript를 완벽하게 분리시켜서 작업이 가능해졌다. 한가지 단점은.. DB 기능별 php파일이 많아진다는 점??! 장점은 코드 영역 분리로 인해 협업에 조금 더 수월해지는 것과 다른 기능 넣기가 쉬워진다는 점이다.
여기서 가장 어려웠던 점은 데이터 타입을 JSON으로 주고 받는데 있어서 데이터 타입이 맞지 않아서 오류가 발생했던 것에 대한 부분, 기타 오류 발생의 원인을 찾기가 어려웠다. 다음에 또 php를 사용한다면 Xdebug라는 것을 이용해서 해볼 생각이다.
로그인도 signup.php과 마찬가지로
<?php
// login.php
require_once "./sqlConnect.php";
require_once "./resultMessage.php";
$resultMessage = new ResultMessage();
$id = $_REQUEST['id'];
$password = $_REQUEST['password'];
$query = "SELECT * FROM user_signdata WHERE id='$id'";
$result = mysqli_query($connect, $query);
if($result){
//
$selectData = $result->fetch_array();
// 아이디가 존재하는 경우!
if($selectData >= 1){
$dbId = $selectData['id'];
// db에 있는 패스워드를 해쉬 데이터로 바꿔준다.
$dbPassword = password_hash($selectData['password'], PASSWORD_DEFAULT);
// 패스워드 비교
if(password_verify($password , $dbPassword)){
// 로그인 성공해서 세션에 id값을 저장!
session_start();
$_SESSION['id'] = $dbId;
$resultMessage->ResultCheck(ResultMessage::LOGIN_SUCCESS, null, $dbId);
}
// 아이디가 없는 경우
else{
$resultMessage->ResultCheck(ResultMessage::LOGIN_FAIL_PASSWORD);
}
}
// 아이디 없음
else{
$resultMessage->ResultCheck(ResultMessage::LOGIN_FAIL_ID);
}
}
// 쿼리문 실행 에러
else{
$resultMessage->ResultMessages("실패 : 'mysqli_error($connect)'");
}
?>