ajax php 이메일 중복 확인 오류
본문
<js파일>
$(document).ready(function(){
//[로그인하기] 버튼
var loginSubmit = $('#loginSubmit');
//이메일 주소 입력 폼
var loginEmail = $('#loginEmail');
//로그인 폼의 비밀번호 입력 폼
var loginPw = $('#loginPw');
//[로그인하기] 버튼 클릭 이벤트
loginSubmit.click(function(){
//이메일 유효성 검사식입니다. 이 식은 정규식이라고 합니다.
//PHP에서 학습하므로 그냥 따라합니다.
var regEmailPattern = /^[a-zA-Z_\-0-9+@[a-z]+.[a-z]+$/;
//아래 if문의 조건문은 위의 정규식을 이메일 주소가 따르는지 아닌지를 판별합니다.
if(!regEmailPattern.test(loginEmail.val())){
alert('입력한 이메일 주소가 올바르지 않습니다. ');
return false;
}
if(loginPw.val().length < 8){
alert('비밀번호를 입력하지 않았거나 8글자 이하입니다. ');
return false;
}
});
//회원가입 입력 정보 필터링
//[가입하기] 버튼
var signUpSubmit = $('#signUpSubmit');
//이름 입력 폼
var userName = $('#userName');
//이메일 입력 폼
var userEmail = $('#userEmail');
//비밀번호 입력 폼
var userPw = $('#userPw');
//생년 selectTag
var birthYear = $('#birthYear');
//생월 selectTag
var birthMonth = $('#birthMonth');
//생일 selectTag
var birthDay = $('#birthDay');
//필터링 시 값이 오류일 때 무엇이 오류인지 보여주는 박스
var valueError = $('#valueError');
//[가입하기] 버튼 클릭 이벤트
signUpSubmit.click(function(){
//이름이 공백인지 확인
if(userName.val() == ''){
//알릴 오류 메시지 입력
valueError.text('이름을 입력하새요.');
//이름 입력란에 포커스
userName.focus();
//오류 메시지를 2초 후 사라지게 하는 함수를 호출
timeOutCall();
return false;
}
//값이 공백이 아니면 해당 값이 유효한 값인지 확인
//아래의 식은 PHP 학습 시 학습하므로 그냥 따라해 주세요.
//입력한 값이 한글이거나 알파벳이라는 것을 확인하는 식입니다.
var regNamePattern = /^[가-힣a-zA-Z]+$/;
if(regNamePattern.test(userName.val())){
//크롬 웹브라우저의 콘솔에서 확인하기 위함
console.log('the value of userName is good');
}else{
valueError.text('정확한 이름을 입력하세요.');
userName.focus();
timeOutCall();
return false;
}
//이메일 유효성 확인
var regEmailPattern = /^[a-zA-Z_\-0-9]+@[a-z]+.[a-z]+$/;
if(regEmailPattern.test(userEmail.val())){
console.log('exp email good');
}else{
valueError.text('정확한 이메일 주소를 입력하세요.');
userEmail.focus();
timeOutCall();
return false;
}
//같은 이메일 주소를 사용하는 사용자가 데이터베이스에 있는지 확인
//이 기능은 PHP 학습 시 AJAX 후 구현합니다.
emailCheck = false;
//이메일 중복 확인
$.ajax({
type : 'post', //post 전송 방식으로 전달
dataYpe : 'json', //json 언어로 전달
url : './database/myMember.php', //이 주소에 데이터 전달
data : {mode:'emailCheck', userEmail:userEmail.val()}, //전달할 데이터
async : false, //값을 전달 받은 후 실행
success : function (data) {
//리턴된 정보를 콘솔로그로 확인
console.log(data.result);
if(data.result == true){
//사용해도 좋은 이메일 주소인 경우
emailCheck = true;
}else{
emailCheck = false;
}
},
//AJAX 통신 에러 발생 시 에러 코드 확인
error : function (request, status, error) {
console.log('request ' + request);
console.log('status ' + status);
console.log('error ' + error);
});
//이메일 주소 중복 시 처리
if(emailCheck == false){
valueError.text('이미 존재하는 이메일 주소입니다.');
userEmail.focus();
timeOutCall();
return false;
}
//비밀번호가 8자 이상인지 확인
if(userPw.val().length >= 8){
console.log('the value of password is good');
}else{
valueError.text('비밀번호를 8자 이상 입력하세요.');
userPw.focus();
timeOutCall();
return false;
}
//생년 값 확인
if(birthYear.val() == ''){
valueError.text('생년을 입력하세요.');
birthYear.focus();
timeOutCall();
return false;
}
//생월 값 확인
if(birthMonth.val() == ''){
valueError.text('생월을 입력하세요.');
birthMonth.focus();
timeOutCall();
return false;
}
//생일 값 확인
if(birthDay.val() == ''){
valueError.text('생일을 입력하세요.');
birthDay.focus();
timeOutCall();
return false;
}
//성별을 체크했는지 확인. 값이 m이거나 w이면 통과
if($(":input:radio[name=gender]:checked").val() == 'm' || $(":input:radio[name=gender]:checked").val() == 'w'){
console.log('gender val good');
}else{
valueError.text('성별을 선택해주세요.');
timeOutCall();
return false;
}
//여기까지 return false에 만나지 않았다면 tru를 반환해 회원가입 정보를 제출
return true;
});
function timeOutCall(){
//setTimeout 함수는 어떠한 기능의 시간을 지연시킬 때 사용하는 내장 함수
setTimeout(function(){
$('#valueError').text('');
},2000);
}
})
<php파일>
<?php
class myMember{
//데이터베이스 접속 정보를 대입할 프라퍼티
protected $dbConnection = null;
//mode
protected $mode;
//데이터베이스 접속 정보를 가져오는 메소드
protected function dbConnection(){
include_once $_SERVER['DOCUMENT_ROOT'].'/myservice/connect/connect.php';
}
//생성자
function __construct(){
//mode값에 따라 메소드 호출
if(isset($_POST['mode'])){
//mode의 값에 따라 메소드 호출
if($this->mode == 'emailCheck'){
$this->emailCheck($_POST['userEmail']);
}else is($this->mode == 'save'){
$this->signUp();
}else if($this->mode == 'photo') {
$this->photoSave();
}
}
}
//회원가입(회원 정보 저장) 메소드
function signUp(){
$userName = trim($_POST['userName']);
//한글 또는 영문으로 구성되어 있는지 확인
if(!preg_match('/^[a-zA-Z가-힣]+$/', $userName)){
echo '올바른 이름이 아닙니다.';
exit;
}
//이메일 주소의 앞 뒤 공백 삭제
if(!filter_Var($userEmail, FILTER_VALIDATE_EMAIL)){
echo '올바른 이메일이 아닙니다.';
exit;
}
//비밀번호
$userPw = $_POST['userPw'];
//비밀번호가 공백인지 확인
if($userPw == ''){
echo '비밀번호 값이 공백입니다.';
exit;
}
//비밀번호 암호화
$userPw = sha1('mySalt'.$userPw);
//생년 숫자(정수)로 형변환
$birthYear = (int) $_POST['birthYear'];
//빈값인지 확인
if($birthYear == ''){
echo '생년 값이 빈값입니다.'
exit;
}
//올바른 값을 입력했는지 확인
$birthYearCheck = false;
//올해의 년도
$thisYear = date('Y', time());
for($i = 1900; $i <= $thisYear; $i++){
//입력받은 생년월일이 일치하면 정상값
if($i == $birthYear){
$birthYearCheck = true;
break;
}
}
if($birthYearCheck == false){
echo '올바른 생년 값이 아닙니다.';
exit;
}
//생월 숫자(정수)로 형변환
$birthMonth = (int) $_POST['birthMonth'];
if($birthMonth == ''){
echo '생월 값이 빈값입니다.';
exit;
}
//올바른 값을 입력했는지 확인
$birthMonthCheck = false;
for($i = 1; $i <= 12; $i++){
if($i == $birthMonth){
$birthMonthCheck = true;
break;
}
}
if($birthMonthCheck == false){
echo '올바른 생월 값이 아닙니다.';
exit;
}
//생일 숫자(정수)로 형변환
$birthDay = (int) $_POST['birthDay'];
if($birthDay == ''){
echo '생일 값이 빈값입니다.';
exit;
}
//올바른 값을 입력했는지 확인
$birthDayCheck = false;
for($i = 1; $i <= 31; $i++){
if($i == $birthDay){
$birthDayCheck = true;
break;
}
}
if($birthDayCheck == false){
echo '올바른 생월 값이 아닙니다.';
exit;
}
//데이터 베이스에 입력할 값으로 변경
$birth = $birthYear.'-'.$birthMonth.'-'.$birthDay;
//성별 검사
$gender = $_POST['gender'];
//값이 m이거나 w인지 확인
$genderCheck = false;
switch($gender){
case 'm':
case 'w':
$genderCheck = true;
break;
}
if($genderCheck == false){
echo '올바른 성별 정보가 아닙니다.';
exit;
}
//여기까지 오면 입력받은 정보 모두 검증 완료
//이름 정보를 real_escape_string 처리
//데이터베이스 입력 정보가 필요하므로 정보를 담고 있는 dbConnection 메소드 호출
$this->dbConnection():
$userName = $this->dbConnection->real_escape_string($userName);
//기본 프로필 사진 주소 설정
$profilePhoto = '';
if($gender == 'm'){
$profilePhoto = '/myservice/images/my/boy.png';
}else if($gender == 'w'){
$profilePhoto = '/myservice/images/me/girl.png';
}
//기본 커버 사진 설정
$coverPhoto = '/myservice/images/me/happyCat.png';
//회원가입 시간
$regTime = time();
//데이터베이스에 입력
$sql = "INSERT INTO mymember(userName, email, pw, birthDay, gender, profilePhoto, coverPhoto, regTime) ";
$sql .= "VALUES('{$userName}', '{$userEmail}', '{$userPw}', '{$birth}', '{$gender}','{$profilePhoto}', '{$coverPhoto}', {$regTime})";
$res = $this->dbConnection->query($sql);
//쿼리 질의 성공 시
if($res){
//나중에 이 곳에 회원가입 로그 만듦
//회원가입에 성공했으므로 세션 생성
$_SESSION['myMemberSes']['email'] = $userEmail;
$_SESSION['myMemberSes']['userName'] = $userName;
//insert_id는 입력한 정보의 primary key 반환
$_SESSION['myMemberSes']['myMemberID'] = $this->dbConnection->insert_id;
$_SESSION['myMemberSes']['profilePhoto'] = $profilePhoto;
$_SESSION['myMemberSes']['coverPhoto'] = $coverPhoto;
//세션 생성 후 나의 페이지로 이동
header("Location:../me.php");
}else{
echo "<script>alert('실패')/ location.href='../index.php';</script>";
exit;
}
}
//이메일 중복 체크 메소드
function emailCheck($email){
//이메일 사용 가능 여부의 리턴 값으로 초기값 false 대입
$result = false;
//이메일 유효성 검사
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
//같은 이메일 주소 있는지 찾는 쿼리문
$sql = "SELECT * FROM mymember WHERE email = '{$email}'";
$this->dbConnection();
$res = $this->dbConnection->query($sql);
//데이터베이스에서 가져오 결과 수를 체크하여 0이면 사용 가능
//0이 아니면 이미 존재하는 이메일
if($res->num_rows == 0){
$result = true;
}
}
//값 전달
echo json_encode(array(
'result' => $result
));
}
이메일 중복 확인을 하면 계속 500 internal server error가 뜨는데 어떻게 해야할까요ㅠㅠ
답변 3
소스 구문을 중간중간 잘라서 채크해보세요.
그러면 어디가 오류인지 알수 있어요
우선 소스 전체가 올라온것도 아니고 중간에 잘린것 같고
올라온 소스만 봤을때도 기본 문법적 에러가 존재합니다.
}else is($this->mode == 'save'){
}else if($this->mode == 'save'){
echo '생년 값이 빈값입니다.'
echo '생년 값이 빈값입니다.';
$this->dbConnection():
$this->dbConnection();