<회원가입 처리>

1. 회원정보 데이터베이스 설계
2. 회원가입 페이지 생성
3. 사용자가 입력한 정보를 데이터베이스에 저장
   - 아이디 중복 확인
   - 닉네임 중복 확인


*전역처리
  @extract($_GET); 
  @extract($_POST); 
  @extract($_SESSION); 


회원정보 데이터베이스 설계 및 생성

 member.sql

  create table member (
  id    char(15) not null,
  pass  char(15) not null,
  name  char(10) not null,
  nick  char(10) not null,
  hp    char(20)  not null,
  email char(80),
  regist_day char(20),
  level int,
  primary key(id)
  );


C:\APM_Setup\htdocs\member>mysql -ubini -p1234 bini_db < member.sql
C:\APM_Setup\htdocs\member>mysql -ubini -p1234 bini_db
mysql> show tables;
mysql> desc member;

----------------------------------------------------------

회원가입 페이지 생성

http://localhost/member/member_form.php

member_form.php


 <? 
 session_start();    // 세션을 활성화
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head> 
<meta charset="utf-8">
<link href="../css/common.css" rel="stylesheet" type="text/css" media="all">
<link href="../css/member.css" rel="stylesheet" type="text/css" media="all">
<script>
   function check_id()   // 아이디 중복 검사
   {
     window.open("check_id.php?id=" + document.member_form.id.value,
         "IDcheck",
          "left=200,top=200,width=200,height=60,scrollbars=no,resizable=yes");  // 팝업창을 띄운후 check_id.php로 검사
   }

   function check_nick()   // 닉네임 중복검사
   {
     window.open("check_nick.php?nick=" + document.member_form.nick.value,
         "NICKcheck",
          "left=200,top=200,width=200,height=60,scrollbars=no,resizable=yes");   // 팝업창을 띄운후 check_nick.php로 검사
   }

   function check_input()    //저장하기 버튼 클릭시 검사
   {
      if (!document.member_form.id.value)   //아이디 필수항목 처리
      {
          alert("아이디를 입력하세요");    
          document.member_form.id.focus();   //커서를 아이디 텍스트 박스에 위치한다.
          return;
      }

      if (!document.member_form.pass.value)  //패스워드 필수항목 처리
      {
          alert("비밀번호를 입력하세요");    
          document.member_form.pass.focus();
          return;
      }

      if (!document.member_form.pass_confirm.value)  //패스워드 재입력 필수항목 처리
      {
          alert("비밀번호확인을 입력하세요");    
          document.member_form.pass_confirm.focus();
          return;
      }

      if (!document.member_form.name.value)    //이름 필수항목 처리
      {
          alert("이름을 입력하세요");    
          document.member_form.name.focus();
          return;
      }

      if (!document.member_form.nick.value)    //닉네임 필수항목 처리
      {
          alert("닉네임을 입력하세요");    
          document.member_form.nick.focus();
          return;
      }


      if (!document.member_form.hp2.value || !document.member_form.hp3.value )   //휴대폰 번호 필수항목 처리
      {
          alert("휴대폰 번호를 입력하세요");    
          document.member_form.nick.focus();
          return;
      }

      if (document.member_form.pass.value != 
            document.member_form.pass_confirm.value)    // 패스워드와 패스워드 재확인이 동일하지 않으지 검사
      {
          alert("비밀번호가 일치하지 않습니다.\n다시 입력해주세요.");    
          document.member_form.pass.focus();
          document.member_form.pass.select();  //입력했던 비밀번호를 미리 선택해 준다.
          return;
      }

      document.member_form.submit();  // form의 action 속성에 명시된 insert.php로 이동한다.
   }

   function reset_form()  //취소 버튼클릭시 초기화
   {
      document.member_form.id.value = "";
      document.member_form.pass.value = "";
      document.member_form.pass_confirm.value = "";
      document.member_form.name.value = "";
      document.member_form.nick.value = "";
      document.member_form.hp1.value = "010";
      document.member_form.hp2.value = "";
      document.member_form.hp3.value = "";
      document.member_form.email1.value = "";
      document.member_form.email2.value = "";
   
      document.member_form.id.focus();

      return;
   }
</script>
</head>

<body>
<div id="wrap">
  <div id="header">
    <? include "../lib/top_login2.php"; ?>
  </div>  <!-- end of header -->

  <div id="menu">
 <? include "../lib/top_menu2.php"; ?>
  </div>  <!-- end of menu --> 

  <div id="content">
 <div id="col1">
  <div id="left_menu">
<? include "../lib/left_menu.php"; ?>
  </div>
 </div> <!-- end of col1 -->

 <div id="col2">
   <form  name="member_form" method="post" action="insert.php"> 
  <div id="title">
   <img src="../img/title_join.gif">
  </div>

  <div id="form_join">
   <div id="join1">
   <ul>
   <li>* 아이디</li>
   <li>* 비밀번호</li>
   <li>* 비밀번호 확인</li>
   <li>* 이름</li>
   <li>* 닉네임</li>
   <li>* 휴대폰</li>
   <li>&nbsp;&nbsp;&nbsp;이메일</li>
   </ul>
   </div>
   <div id="join2">
   <ul>
   <li><div id="id1"><input type="text" name="id"></div><div id="id2"><a href="#"><img src="../img/check_id.gif" onclick="check_id()"></a></div><div id="id3">4~12자의 영문 소문자, 숫자와 특수기호(_) 만 사용할 수 있습니다.</div></li>
   <li><input type="password" name="pass"></li>
   <li><input type="password" name="pass_confirm"></li>
   <li><input type="text" name="name"></li>
   <li><div id="nick1"><input type="text" name="nick"></div><div id="nick2" ><a href="#"><img src="../img/check_id.gif" onclick="check_nick()"></a></div></li>
   <li><select class="hp" name="hp1"> 
              <option value='010'>010</option>
              <option value='011'>011</option>
              <option value='016'>016</option>
              <option value='017'>017</option>
              <option value='018'>018</option>
              <option value='019'>019</option>
              </select>  - <input type="text" class="hp" name="hp2"> - <input type="text" class="hp" name="hp3"></li>
   <li><input type="text" id="email1" name="email1"> @ <input type="text" name="email2"></li>
   </ul>
   </div>
   <div class="clear"></div>
   <div id="must"> * 는 필수 입력항목입니다.^^</div>
  </div>

  <div id="button"><a href="#"><img src="../img/button_save.gif"  onclick="check_input()"></a>&nbsp;&nbsp;
                   <a href="#"><img src="../img/button_reset.gif" onclick="reset_form()"></a>
  </div>
  </form>
 </div> <!-- end of col2 -->
  </div> <!-- end of content -->
</div> <!-- end of wrap -->

</body>
</html>

-----------------------------------------------

아이디 중복 확인
 
check_id.php
- "check_id.php?id=" + document.member_form.id.value  값이 들어온다

 
<meta charset="utf-8">
<?
   if(!$id)         // id값이 NULL이면..
   {
      echo("아이디를 입력하세요."); 
   }
   else
   {
      include "../lib/dbconn.php";   // 데이터베이스에 접속한다.
 
      $sql = "select * from member where id='$id' ";   //사용자가 입력한 아이디와 동일한 아이디가 있는지 검색

      $result = mysql_query($sql, $connect);   // 명령을 실행하고 결과를 result 변수에 넣는다.
      $num_record = mysql_num_rows($result);  // 저장된 레코드의 개수를 구한다


      if ($num_record)   //레코드 개수가 0이 아니면...
      {
         echo "아이디가 중복됩니다!<br>";
         echo "다른 아이디를 사용하세요.<br>";
      }
      else
      {
         echo "사용가능한 아이디입니다.";
      }
    
      mysql_close();  //접속을 끊는다
   }
?>


dbconn.php

<?
    $connect=mysql_connect( "localhost", "bini", "1234") or  
        die( "SQL server에 연결할 수 없습니다.");    // 접속에 실패하면 에러메시지 출력

    mysql_select_db("bini_db",$connect);
?>

----------------------------------------
닉네임 중복 확인

check_nick.php
- check_nick.php?nick=" + document.member_form.nick.value


<meta charset="utf-8">
<?
   if(!$nick) 
   {
      echo("닉네임을 입력하세요.");
   }
   else
   {
      include "../lib/dbconn.php";
 
      $sql = "select * from member where nick='$nick' ";

      $result = mysql_query($sql, $connect);
      $num_record = mysql_num_rows($result);

      if ($num_record)
      {
         echo "닉네임이 중복됩니다.<br>";
         echo "다른 닉네임을 사용하세요.<br>";
      }
      else
      {
         echo "사용가능한 닉네임입니다.";
      }
    
      mysql_close();
   }
?>

---------------------------------------

입력된 회원정보 저장

- 회원정보를 모두 입력한 후 <저장하기>를 클릭하면 <from>의 action에 정의된 insert.php로 이동한다.
- 이때 사용자가 입력한 정보들은 name 속성값에 따라 $id  $pass $pass_confirm $name.. 으로 전달된다.  POST방식.

insert.php

<meta charset="utf-8">
<?
   $hp = $hp1."-".$hp2."-".$hp3;    // 세 부분으로 나누어 입력받은 휴대폰 번호를 연결해서 $hp에 저장
   $email = $email1."@".$email2;    // 두 부분으로 나누어 입력받은 이메일을 연결해서 $email에 저장

   $regist_day = date("Y-m-d (H:i)");  // 현재의 '년-월-일-시-분'을 저장
   $ip = $REMOTE_ADDR;         // 방문자의 IP 주소를 저장

   include "../lib/dbconn.php";       // dconn.php 파일을 불러옴


   $sql = "select * from member where id='$id'";  // 동일한 아이디가 존재하는지 검색
   $result = mysql_query($sql, $connect);
   $exist_id = mysql_num_rows($result);

   if($exist_id) {         // 검색 레코드 개수가 1이상이면.. 참
     echo("
           <script>
             window.alert('해당 아이디가 존재합니다.');
             history.go(-1);     // 회원가입 페이지로 이동(이전페이지로..)
           </script>
         ");
         exit;   // insert.php를 빠져 나온다
   }
   else            // 검색 레코드가 0이면.. 동일한 아이디의 레코드가 없다는 ..
   {            // 레코드 삽입 명령을 $sql에 입력
     $sql = "insert into member(id, pass, name, nick, hp, email, regist_day, level) ";
     $sql .= "values('$id', '$pass', '$name', '$nick', '$hp', '$email', '$regist_day', 9)";

     mysql_query($sql, $connect);  // $sql 에 저장된 명령 실행
   }

   mysql_close();                // DB 연결 끊기
   echo "
    <script>
     location.href = '../index.php';  // index.php로 이동한다
    </script>
 ";
?>


mysql>select * from member;       // 입력된 회원정보가 레코드에 저장이 되었는지 검색해 본다.
