ajax php 이메일 중복 확인 오류

ajax php 이메일 중복 확인 오류

QA

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

https://sir.kr/qa/?wr_id=405998

에러 메시지 확인해 보세요.

소스 구문을 중간중간 잘라서 채크해보세요.

그러면 어디가 오류인지 알수 있어요

우선 소스 전체가 올라온것도 아니고 중간에 잘린것 같고

올라온 소스만 봤을때도 기본 문법적 에러가 존재합니다.

 

}else is($this->mode == 'save'){

}else if($this->mode == 'save'){

 

echo '생년 값이 빈값입니다.'

echo '생년 값이 빈값입니다.';

 

$this->dbConnection():

$this->dbConnection();

소스 전체를 올리신게 아니니 나머지 부분 어딘가에서 또 문제가 있을수 있겠죠.
소스 전체를 올리셔도 파일하나 수정했다고 에러가 발생하지 않는다는 보장도 없습니다.
다른 파일에서 또 문제되는 부분이 있을수 있으니까요

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

회원로그인

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