본문 바로가기

웹 개발

[3주차] 회원가입 페이지 구현 #2 - 아이디 중복 체크

여태까지 만들어놨던 로그인 창이다.

여기에 회원가입 버튼을 만들어 회원가입 기능을 구현해볼 것이다.

login_proc.php로 보내는 로그인 부분과는 별도로 새로운 form 태그를 열어준다.

그리고 그 form 태그는 enroll.php로 데이터를 POST형식으로 전송한다.

 

test.php

test.php 코드
<?php
//위 코드는 생략
<form action='login_proc.php' method='POST'>
<P>ID : 
<input type='text' name='id' placeholder='여기에 아이디를 입력하세요.' /></p>
<p>PW :
<input type='text' name='pw' placeholder='여기에 비밀번호를 입력하세요.' /></p>
<input type='submit' value='로그인'/>
<br><br>
</form>

<form action='enroll.php' method='POST'> //여기에 회원가입 버튼 생성
<input id='enroll' type='submit' value='회원가입' />
</form>
//이하 생략
?>

 

저장하고 브라우저를 보면 회원가입 버튼이 생긴 것을 볼 수 있다.

회원가입 버튼이 빨간 건 test.css파일을 생성해서 input 버튼에 부여한 enroll id에 css코드를 입력해서 그렇다.

코드는 다음과 같다.

 

test.css

#enroll {
	color : red;
}

 

회원가입 버튼을 누르면 회원가입 페이지 (enroll.php)로 이동한다.

 

현재까지는 주소 검색 기능이 없고 중복체크 기능만 구현해놓은 상황이다. 

밑 코드는 회원가입 페이지 메인 화면이다.

html 기본 코드는 ! + tab을 이용해서 짰고 php session 코드와 입력창 4개를 만든 상태이다.

그리고 사용자가 입력한 정보를 enroll_proc.php로 보내서 회원가입을 처리한다.

 

 

enroll.php

<!DOCTYPE html>
<html lang="en">
<?php
  session_start();
  if(isset($_SESSION['is_login'])){
    header('Location: ./main.php');
  }
?>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script>
    function checkid(){
      var userid = document.getElementById("uid").value;
      if(userid){
        url = 'check_id.php?userid='+userid;
          window.open(url,"chkid","width=30px,height=30px");
      } else {
        alert('아이디를 입력하세요');
      }
    }
  </script>
  <link rel='stylesheet' type='text/css' href='test.css'>
</head>
<body>
  <h1>회원가입 페이지</h1>
  <br>
    <form action='enroll_proc.php'> method='POST'>
      <div class="center">
      ID
      <div style="text-align:left"><input type="text" id='uid' name='username' class='input'></div>
      <input type='button' value='중복체크' onClick='checkid()';>
      <br>
      비밀번호
      <div style='text-align:left'><input type='text' name='pwd' class='input'></div>
      <br>
      이메일
      <div style='text-align:left'><input type='text' name='email' class='input'></div>
      <br>
      휴대전화 번호
      <div style='text-align:left'><input type='text' name='phone' class='input'></div>
      <br><br>
      <input type='submit' value='가입하기' class='enroll'>
    </form>
  </div>
</body>
</html>

 

이 페이지에 중복체크 기능을 만들것인데, 처음 고민했던 건 id를 입력한는 input 태그가 enroll_proc.php로 정보를 보내는 form 태그 안에 싸여있어서 중복체크 정보는 어떻게 넘기지였다.

 

중복체크 버튼은 클릭 시에 onClick으로 checkid() 함수를 실행시킨다.

php와 겹칠 수 있으므로 checkid()는 javascript를 이용한다.

중복체크는 check_id.php에서 처리하고 window.open으로 팝업창을 띄운다.

 

---------

 

window.open 문법

 

window.open(url, name, specs, replace) 같은 방식으로 사용할 수 있다.

url은 window.open 위 코드에서 변수로 지정했고 name은 "chkid"로 지정했다.

specs에서 width와 height를 px 단위로 설정해준다.

 

---------

 

아이디가 입력되지 않았으면 alert로 경고창을 띄운다.

 

 

아무것도 입력하지 않고 중복체크 버튼을 클릭해보면,

 

 

아이디를 입력하라는 경고창이 잘 뜨는 것을 확인할 수 있다.

 

 

다음은 아이디를 입력하고 중복체크 버튼을 클릭하면

중복 체크인지 확인하는 check_id.php의 코드이다.

 

 

check_id.php

<?php
$con = mysqli_connect('localhost','root','1234');
mysqli_select_db($con,'test');
$uid = $_GET['userid'];

//아이디가 있는지 없는지 검사
$query = "SELECT * FROM user WHERE username='".$uid."'";
$result = $con -> query($query); //쿼리문을 데이터베이스에 적용시킴
$member = mysqli_fetch_array($result);
if ($member == 0){
  echo $uid."는 사용가능한 아이디입니다.";
} else {
  echo $uid."는 중복된 아이디입니다.";
}

?>
<button value="닫기" onClick="window.close()">닫기</button>

여태 해왔던 데이터베이스 연동 코드로 시작하고 userid값을 get으로 전달받는다.

 

form 태그 get으로 보내지 않았는데? 하지만 enroll.php를 구현할 때 url을 url = 'check_id.php?userid='userid 와 같이

설정했기 때문에 url의 값을 get으로 받을 수가 있다.

 

mysqli_fetch_array를 이용해서 데이터베이스에 입력받은 userid 값이 존재하지않으면 ($member == 0) 사용가능하다는 결과가 나오고 값이 존재하면 중복된 아이디라고 나온다.

 

닫기버튼을 구현해서 클릭 시에 onClick으로 window.close() 함수를 실행한다.

 

 

현재 데이터베이스에 없는 choibokyu라는 아이디를 입력해보았다.

 

 

$member 값이 0이 나왔으므로 사용가능한 아이디라는 결과가 나왔다.

 

 

 

처음에 만들어놨던 bg5294라는 아이디를 입력해보았다.

 

데이터베이스 연동 결과 $member 값이 존재한다고 나와 중복된 아이디라고 잘 표시해준다.

mysql 데이터베이스를 확인해보면 결과와 같다. choibokyu라는 아이디는 없고

bg5294는 존재한다.

 

 

 

아이디 중복체크가 완료되었으면, 회원가입을 누르면 입력란에 입력했던 값들이 enroll_proc.php로 전송된다.

 

이 페이지에서 최종적으로 SQL문에 회원 정보를 등록하게 된다

 

<?php
 //세션 시작
  session_start();

  //post로 받아온 정보를 변수로 저장한다.
  $sign_name = $_POST['username'];
  $sign_password = $_POST['pwd'];
  $sign_email = $_POST['email'];
  $sign_phone = $_POST['phone'];
  $sign_address = $_POST['join_addr']; //주소 검색 추가
  //DB와 연결
  $conn = mysqli_connect('localhost','root','1234');
  mysqli_select_db($conn,'test');
  $query = "SELECT * FROM user WHERE username='".$sign_name."'";
  $result = $conn -> query($query); //쿼리문을 데이터베이스에 적용시켜라
  $member=mysqli_fetch_array($result);
  $sign = "INSERT INTO `user` (username, password ,email,phone, address) VALUES ('$sign_name','$sign_password','$sign_email','$sign_phone','$sign_address')";
  //현재 아이디, 비번, 이메일 , 폰넘버, 주소검색 추가되어 있음
  if ($member == 0){
  if ($conn -> query($sign)){
    echo "회원가입에 성공했습니다!";
    echo '<form action="gofirst.php" method="post">
    <input type="submit" value="로그인 페이지로 이동"/>
    </form>';
  } else {
    echo '회원가입에 실패하였습니다';
    header('Location: ./enroll.php');
  }
} else {
  echo "아이디 중복체크를 진행해주세요";
  header('Location: ./enroll.php');
}
  conn_close($conn);

?>

 

 

(시간이 지나 포스팅을 추가해서 웹 화면의 CSS가 좀 더 세련되져 있을 수 있습니다)

이렇게 중복체크도 완료됐고 비밀번호, 주소까지 입력이 끝났다면 (이메일, 휴대전화번호는 선택이다) 가입하기를 눌러보자

그럼 이제 로그인하는 페이지에서 ID랑 비밀번호를 입력해주고 로그인을 하면?

 

 

로그인이 잘 되는 것을 확인할 수 있다

 

회원가입 기능 구현 완료!