본문 바로가기
코드정리/Php & Mysql

[Php & Mysql] 회원가입 및 로그인 만들기

by Gi-One 2022. 10. 10.

#php #mysql #회원가입 #로그인 #로그아웃

 

 

안녕하세요. Gi-1의 개발일기입니다.

최근 생활코딩의 게시판 만들기를 진행 하였는데 이번에는 로그인&페이징&첨부파일첨부&댓글 기능까지 구현 해 보려고 합니다.

 

이에 앞서 로그인 페이지 먼저 정리를 해봤어요.

 

 

[결과화면 미리보기]

 

 

css 작업은 별도로 하지 않았습니다.

포트폴리오 용으로 사용할 때 작업 하시면 좋을 것 같습니다.

 

[mysql]

CREATE TABLE member
    (
      no INT(11) NOT NULL AUTO_INCREMENT,
      id char(15),
      user_id char(15),
      name char(15),
      nick_name char(15),
      birth char (15),
      sex char(6),
      tel char(12),
      email char(30),
      pw char(30),
      PRIMARY KEY(no)
    )

[index.php]

  <p>
  <?php if(isset($member['user_id'])){
    echo $member['user_id']."님 안녕하세요.";
    echo '<a href="./member/logout.php">[로그아웃]</a>';
  } else { ?>
    <a href="./member/login.php">[로그인]</a><br>
    <a href="./member/join.php">[회원가입]</a>
  <?php } ?>
  </p>

 

[join.php]

 

<!DOCTYPE html>
<html lang="en">
<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>회원가입</title>
    <link rel="stylesheet" href="../css/style.css">
</head>
<body>
  <h1>
    [회원가입]
  </h1>
  <!--
    필요사항
    테이블ID : id
    회원ID : user_id
    이름 : name
    닉네임 : nick_name
    생년월일 : birth
    연락처 : tel
    이메일 : email
    성별 : sex
    비밀번호 : pw
    주소1 : addr_1
    주소2 : addr_2
   -->
   <?php
   $subject = "aaasss$%#";

   if (!preg_match("/^[a-z0-9]+$/", $subject)) {
   
       echo "대문특문포함됨";
   
   } else {
   
       echo "포함안됨" ;
   
   }

   ?>
  <form action="./join_process.php" name='member' method='post'>
    <input type="hidden" name='id' value='test'>
    <table class="stat">
      <tr>
        <th>회원아이디</th>
        <td><input type="text" name='user_id'></td>
      </tr>
      <tr>
        <th>비밀번호</th>
        <td><input type="text" name='pw'></td>
      </tr>
      <tr>
        <th>닉네임</th>
        <td><input type="text" name='nick_name'></td>
      </tr>
      <tr>
        <th>이름</th>
        <td><input type="text" name='name'></td>
      </tr>
      <tr>
        <th>생년월일</th>
        <td><input type="text" name='birth'></td>
      </tr>
      <tr>
        <th>성별</th>
        <td>
          <input type="radio" name='sex' value='male'>남자
          <input type="radio" name='sex' value='female'>여자
        </td>
      </tr>
      <tr>
        <th>연락처</th>
        <td><input type="text" name='tel'></td>
      </tr>
      <tr>
        <th>이메일</th>
        <td><input type="text" name='email'></td>
      </tr>
      <tr>
        <th>주소</th>
        <td><input type="text" name='addr_1'></td>
      </tr>
      <tr>
        <th>상세주소</th>
        <td><input type="text" name='addr_2'></td>
      </tr>
    </table>

    <input type="submit" value='회원가입'>
  </form>
</body>
</html>
 
 

[join_process.php]

 

<?php
include("../lib/db_connect.php");

 

$id = $_POST['id'];
$user_id=$_POST['user_id'];
$name = $_POST['name'];
$nick_name = $_POST['nick_name'];
$birth = $_POST['birth'];
$sex = $_POST['sex'];
$tel = $_POST['tel'];
$email = $_POST['email'];
$pws = $_POST['pw'];
$pw = md5($pws);
$addr_1 = $_POST['addr_1'];
$addr_2 = $_POST['addr_2'];

 

$regdate=date("YmdHis", time());
$ip=getenv("REMOTE_ADDR");



if(!$user_id){
  error("아이디를 입력하세요.");
}
if(substr($user_id,12)){
  error("아이디는 최대 12자까지 입력할 수 있습니다.");
}
// substr : 문자열 추출함수 (추출대상, 추출시작위치, 추출문자개수)
if (!preg_match("/^[a-z0-9]*$/", $user_id)) {
  error("아이디는 소문자, 숫자만 입력할 수 있습니다.");
}




if(!$name){
  error("이름을 입력하세요.");
}
if(strlen($name)<6 || strlen($name)>15){
  error("이름은 2글자 이상 5글자 이하만 입력 가능합니다.");
}

 

// 문자열 길이를 숫자로 반환함. 한글은 한글자당 3byte
if(!$nick_name){
  error("닉네임을 입력하세요.");
}

 

if(!$birth){
  error("생년월일을 입력하세요.");
}
if(strlen($birth)<8 || strlen($birth)>8){
  error("생년월일을 8자로 입력해 주세요.");
}

 

if(!$sex){
  error("성별을 선택하세요.");
}

 

if(!$tel){
  error("연락처를 입력하세요.");
}
if(strlen($tel)<8 || strlen($birth)>15){
  error("연락처는 8~15자리로 입력 해주세요.");
}

 

if(!$email){
  error("이메일을 입력하세요.");
}
if(!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i", $email)){
  error("이메일 형식을 올바르게 입력해 주세요.");
};
if(!$pws){
  error("비밀번호를 입력하세요.");
}
if(!$addr_1){
  error("주소를 입력하세요.");
}



$sql = "
  INSERT INTO member(
    id,
    user_id,
    name,
    nick_name,
    birth,
    sex,
    tel,
    email,
    pw,
    addr_1,
    addr_2,
    regdate,
    ip
  )
  VALUES(
    '{$id}',
    '{$user_id}',
    '{$name}',
    '{$nick_name}',
    '{$birth}',
    '{$sex}',
    '{$tel}',
    '{$email}',
    '{$pw}',
    '{$addr_1}',
    '{$addr_2}',
    '{$regdate}',
    '{$ip}'
  )
";

 

$result = mysqli_query($conn, $sql);

 

if(!$result){
  echo '저장하는 과정에서 문제가 생겼습니다. 관리자에게 문의해주세요.';
  // 평상시에는 die("");
  print(mysqli_error($conn));
} else { ?>
  <script>
    alert("회원가입에 성공하였습니다.");
    location.href="../index.php";
  </script>
<?php } ?>
 
 
 

[login.php]

<!DOCTYPE html>
<html lang="en">
<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>로그인</title>
</head>
<body>
  <h1>
    [로그인]
  </h1>
  <form action="../member/login_process.php" method='post' name='login'>
    <table>
      <tr>
        <th>회원아이디</th>
        <td><input type="text" name='user_id'></td>
      </tr>
      <tr>
        <th>비밀번호</th>
        <td><input type="text" name='pw'></td>
      </tr>
    </table>
    <input type="submit" value='로그인'>
  </form>
</body>
</html>
 
 

[login_process.php]

 

<?php
include("../lib/db_connect.php");

 

ob_start();
// ob_start란?
// 출력 버퍼링을 켜는 PHP 명령어
// 출력 버퍼링이 켜져 있는 동안 헤더를 제외한 스크립트의 모든 출력을 내부 버퍼에 저장하며 실제 전송하지 않는다.

 

$user_id = $_POST['user_id'];
$pws = $_POST['pw'];

 

$pw = md5($pws);
// md5 = 이 함수는 문자열에서 md5 해시값을 생성해 준다.

 

$sql = "
  SELECT * from member WHERE user_id = '{$user_id}';
";

 

$result = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($result);

 

if(!$user_id){
  error("아이디를 입력하세요");
} else if(!$row['user_id']){
  error("존재하지 않는 아이디 입니다.");
}
if(!$pw){
  error("비밀번호를 입력하세요.");
} else if($pw != $row['pw']){
  error("비밀번호가 틀렸습니다.");
}

 

if($row['user_id'] && $row['pw'] == $pw){
  $tmp=$row['user_id']."@@".$row['pw'];
  setcookie("cookies", "$tmp", time()+86400, "/board221002");
  // setcookie("쿠키이름", "저장내용", "쿠키유효시간", "저장경로");
}

 

ob_end_flush();

 

?>

 

<script>
  alert("<?=$row['user_id']?>님 안녕하세요.");
  location.href="../index.php";
</script>
 
 

[logout.php]

 

<?php
setcookie("cookies", "", 0, "/board221002");

// setcookie("cookies", "$tmp", time()+86400, "/board221002");
?>

<script>
    alert("로그아웃 되었습니다.");
    location.href ="/board221002/index.php";
</script>
 
 

 

 

댓글