PHP

PHP 회원가입 구현

IC 2023. 4. 19.

php란

PHP는 웹 개발을 위해 사용되는 서버 측 스크립트 언어입니다. PHP는 HTML과 결합하여 동적인 웹 페이지를 생성할 수 있습니다. 웹 페이지에서 사용자의 입력을 받아 데이터를 처리하거나, 데이터베이스와 연동하여 데이터를 저장하고 조회하는 등의 기능을 수행할 수 있습니다.

 

먼저 회원가입을 위한 페이지 입니다.

<!DOCTYPE html>
<html lang="ko">
<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>

    <?php include "../include/head.php" ?>
    <!-- //head -->
</head>
<body class="gray">

    <?php include "../include/skip.php" ?>
    <!-- //skip -->

    <?php include "../include/header.php" ?>
    <!-- //header -->

    <main id="main" class="container">
        <div class="intro__inner center bmStyle">
            <picture class="intro__images">
                <source srcset="../assets/img/join01.png, ../assets/img/join01@2x.png 2x, ../assets/img/join01@3x.png 3x" />
                <img src="../assets/img/join01.png" alt="회원가입 이미지">
            </picture>
            <p class="intro__text">
                회원가입을 해주시면 다양한 정보를 자유롭게 볼 수 있습니다.
            </p>
        </div>
        <!-- //join__inner-->

        <div class="join__inner container">
            <h2>회원가입</h2>
            <div class="join__form">
                <form action="joinSave.php" name="join" method="post">
                    <fieldset>
                        <legend class="blind">회원가입 영역</legend>
                        <div>
                            <label for="youEmail" class="required">이메일</label>
                            <input type="email" id="youEmail" name="youEmail" class="inputStyle" placeholder="이메일을 적어주세요!" required>
                        </div>
                        <div>
                            <label for="youName" class="required">이름</label>
                            <input type="text" id="youName" name="youName" class="inputStyle" placeholder="이름을 적어주세요!" required>
                        </div>
                        <div>
                            <label for="youPass" class="required">비밀번호</label>
                            <input type="password" id="youPass" name="youPass" class="inputStyle" placeholder="비밀번호를 적어주세요!" required>
                        </div>
                        <div>
                            <label for="youPassC" class="required">비밀번호 확인</label>
                            <input type="password" id="youPassC" name="youPassC" class="inputStyle" placeholder="다시 한번 비밀번호를 적어주세요!" required>
                        </div>
                        <div>
                            <label for="youPhone" class="required">연락처</label>
                            <input type="text" id="youPhone" name="youPhone" class="inputStyle" placeholder="연락처를 적어주세요!" required>
                        </div>
                        <button type="submit" class="btnStyle">회원가입 완료</button>
                    </fieldset>
                </form>
            </div>
        </div>
    </main>
    <!-- //main -->
</body>
</html>

<?php include ... ?> 코드는 다른 PHP 파일을 현재 페이지에 포함시키는 역할을 합니다. 예를 들어, ../include/head.php 파일은 <head> 태그 내부에서 필요한 스타일시트, 자바스크립트 파일 등을 포함합니다.


../include/skip.php 파일은 웹 접근성을 고려하여 스킵 링크를 포함합니다.

 ../include/header.php 파일은 사이트의 상단 메뉴를 포함합니다.

<picture> 태그는 다양한 크기와 해상도의 이미지를 지원합니다. 

<source> 태그는 다른 크기와 해상도의 이미지를 선택하고 로드합니다.

class="intro__text"는 이미지 아래에 표시되는 회원가입 문구의 클래스입니다.

class="join__inner container"는 회원가입 폼의 컨테이너입니다.

<h2> 태그는 회원가입 제목을 정의합니다.

class="join__form"은 폼 요소를 감싸는 div 요소의 클래스입니다.

 


다음은 회원가입 완료 위한 폼입니다.

<!DOCTYPE html>
<html lang="ko">
<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>PHP 블로그 만들기</title>

    <?php include "../include/head.php" ?>
</head>
<body class="gray">
    
    <?php include "../include/skip.php" ?>
    <!-- //skip -->

    <?php include "../include/header.php" ?>
    <!-- //header -->


    <main id="main" class="container">
        <div class="intro__inner center bmStyle">
            <picture class="intro__images">
                <source srcset="../assets/img/join01.png, ../assets/img/join01@2x.png 2x, ../assets/img/join01@3x.png 3x" />
                <img src="../assets/img/join01.png" alt="회원가입 이미지">
            </picture>
<?php
    include "../connect/connect.php";

    $youEmail = $_POST["youEmail"];
    $youName = $_POST["youName"];
    $youPass = $_POST["youPass"];
    $youPassC = $_POST["youPassC"];
    $youPhone = $_POST["youPhone"];
    $regTime = time();

    // echo $youEmail, $youName, $youPass, $youPhone;

    // $sql = "INSERT INTO members(youEmail, youName, youPass, youPhone, regTime) VALUES('$youEmail', '$youName', '$youPass', '$youPhone', '$regTime')";
    // $connect -> query($sql);

    //메세지 출력
    function msg($alert){
        echo "<p class='intro__text'>$alert</p>";
    }

    //이메일 유효성 검사
    $check_mail = preg_match("/^[a-z0-9_+.-]+@([a-z0-9-]+\.)+[a-z0-9]{2,4}$/", $youEmail);
    if($check_mail == false) {
        msg ("이메일을 다시 한 번 확인하세요.");
        exit;
    }

    //이름 유효성 검사
    $check_name = preg_match("/^[가-힣]{9,15}$/", $youName);

    if($check_name == false){
        msg("이름은 한글만 가능합니다.또는 3~5글자만 가능합니다.");
        exit;
    }

    //비밀번호 유효성 검사
    if($youPass !== $youPassC){
        msg("비밀번호가 일치하지 않습니다. 다시 한번 확인해주세요.");
        exit;
    }

    // $youPass = sha1($youPass);

    //휴대폰 번호 유효성 검사
    $check_number = preg_match("/^(010|011|016|017|018|019)-[0-9]{3,4}-[0-9]{4}$/", $youPhone);

    if($check_number == false){
        msg("번호가 정확하지 않습니다. 올바른 번호(000-0000-0000) 형식으로 작성해주세요!");
        exit;
    }

    // 이메일 중복 검사
    $isEmailCheck = false;

    $sql = "SELECT youEmail FROM members WHERE youEmail = '$youEmail'";
    $result = $connect -> query($sql);

    if($result){
        $count = $result -> num_rows;

        if($count == 0){
            $isEmailCheck = true;
        } else {
            msg("이미 회원가입이 되어 있습니다. 로그인 해주세요!");
            exit;
        }
    } else {
        msg("에러발생1: 관리자에게 문의하세요!");
        exit;
    }

    // 핸드폰 중복 검사
    $isPhonecheck = false;

    $sql = "SELECT youPhone FROM members WHERE youPhone = '$youPhone'";
    $result = $connect -> query($sql);

    if($result){
        $count = $result -> num_rows;

        if($count == 0){
            $isPhonecheck = true;
        } else {
            msg("이미 회원가입이 되어 있습니다. 로그인 해주세요!");
            exit;
        }
    } else {
        msg("에러발생2: 관리자에게 문의하세요!");
        exit;
    }

    //회원가입 
    if($isEmailCheck == true && $isPhonecheck == true){
        // 데이터 입력하기
        $sql = "INSERT INTO members(youEmail, youName, youPass, youPhone, regTime) VALUES('$youEmail', '$youName', '$youPass', '$youPhone', '$regTime')";
        $result = $connect -> query($sql);

        if($result){
            msg("회원가입을 축하합니다! 로그인 해주세요! <br><div class='intro__btn'><a href='../login/login.php'>로그인</a></div>");
            exit;
        } else {
            msg("에러발생3: 관리자에게 문의하세요!");
            exit;
        }
    } else {
        msg("이미 회원가입이 되어 있습니다. 로그인 해주세요!");
        exit;
    }



    //데이터 입력하기
    // $sql = "INSERT INTO members(youEmail, youName, youPass, youPhone, regTime) VALUES('$youEmail', '$youName', '$youPass', '$youPhone', '$regTime')";
    // $connect -> query($sql);
?>

        </div>
    </main>
    <!-- //main -->

</body>
</html>

include 문을 통해 connect.php 파일을 불러옵니다. 이 파일은 데이터베이스 연결 정보를 가지고 있습니다.
사용자가 입력한 회원 정보를 $_POST 배열에서 가져옵니다.
msg 함수를 정의합니다. 이 함수는 입력된 메시지를 출력하는 역할을 합니다.
사용자가 입력한 이메일 주소를 유효성 검사합니다. 이메일 주소가 유효하지 않을 경우 msg 함수를 호출하여 메시지를 출력하고 스크립트를 종료합니다.
사용자가 입력한 이름을 유효성 검사합니다. 이름이 유효하지 않을 경우 msg 함수를 호출하여 메시지를 출력하고 스크립트를 종료합니다.
사용자가 입력한 비밀번호와 비밀번호 확인 값이 일치하지 않을 경우 msg 함수를 호출하여 메시지를 출력하고 스크립트를 종료합니다.
사용자가 입력한 휴대폰 번호를 유효성 검사합니다. 휴대폰 번호가 유효하지 않을 경우 msg 함수를 호출하여 메시지를 출력하고 스크립트를 종료합니다.
데이터베이스에서 입력된 이메일 주소와 휴대폰 번호가 중복되지 않는지 검사합니다. 중복된 경우 msg 함수를 호출하여 메시지를 출력하고 스크립트를 종료합니다.
회원 정보를 데이터베이스에 저장합니다. 저장에 성공하면 msg 함수를 호출하여 회원가입을 축하하는 메시지를 출력하고, 실패하면 에러 메시지를 출력합니다.

 

로그인을 위한 페이지 입니다.

<!DOCTYPE html>
<html lang="ko">
<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>

    <?php include "../include/head.php" ?>
    <!-- //head -->
</head>
<body class="gray">

    <?php include "../include/skip.php" ?>
    <!-- //skip -->

    <?php include "../include/header.php" ?>
    <!-- //header -->

    <main id="main" class="container">
        <div class="login__inner">
            <h2>로그인</h2>
            <p>로그인을 하시면 게시글 및 댓글 작성이 가능합니다.<br>회원가입을 하면 로그인이 가능합니다.<br>admin@admin.com/1234</p>
            <div class="login__form btStyle bmStyle">
                <form action="loginSave.php" name="loginSave" method="post">
                    <fieldset>
                        <legend class="blind">로그인 영역</legend>
                        <div>
                            <label for="youEmail" class="blind required">이메일</label>
                            <input type="email" id="youEmail" name="youEmail" class="inputStyle" placeholder="이메일" required>
                        </div>
                        <div>
                            <label for="youPass" class="blind required">비밀번호</label>
                            <input type="password" id="youPass" name="youPass" class="inputStyle" placeholder="비밀번호" required>
                        </div>
                        <button type="submit" class="btnStyle2 mt20">로그인</button>
                    </fieldset>
                </form>
            </div>
            <div class="login__footer">
                <ul class="listStyle">
                    <li>회원가입을 하지 않았다면 회원가입을 먼저 해주세요!<a href="join.html">회원가입</a></li>
                    <li>아이디가 기억이 나지 않는다면! 아이디 찾기 <a href="#">아이디 찾기</a></li>
                    <li>비밀번호가 기억이 나지 않는다면! 비밀번호 찾기 <a href="#">비밀번호 찾기</a></li>
                </ul>
            </div>
        </div>
    </main>
    <!-- //main -->
</body>
</html>

 

<?php ... ?> : PHP 코드를 나타내며, include 문을 사용하여 다른 PHP 파일에서 코드를 가져옵니다.
이 코드에서는 head.php, skip.php, header.php 파일을 가져옵니다.
로그인 폼이 작성됩니다.
<form> : 폼 요소를 나타내며, 로그인을 처리할 loginSave.php로 데이터를 보냅니다.
<input> : 입력 필드를 나타내며, 여기에서는 이메일과 비밀번호를 입력 받습니다.
<button> : 버튼 요소를 나타내며, 이 경우 로그인 버튼으로 사용됩니다.
마지막으로, 문서의 나머지 부분이 작성됩니다.
<ul> : 리스트를 나타내며, 여기에서는 회원가입, 아이디 찾기, 비밀번호 찾기 링크를 제공합니다.

 

로그인 완료를 위한 폼입니다.

<!DOCTYPE html>
<html lang="ko">
<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>PHP 블로그 만들기</title>

    <?php include "../include/head.php" ?>
</head>
<body class="gray">
    
    <?php include "../include/skip.php" ?>
    <!-- //skip -->

    <?php include "../include/header.php" ?>
    <!-- //header -->


    <main id="main" class="container">
        <div class="intro__inner center bmStyle">
            <picture class="intro__images">
                <source srcset="../assets/img/join01.png, ../assets/img/join01@2x.png 2x, ../assets/img/join01@3x.png 3x" />
                <img src="../assets/img/join01.png" alt="회원가입 이미지">
            </picture>
<?php
    include "../connect/connect.php";
    include "../connect/session.php";

    $youEmail = $_POST['youEmail'];
    $youPass = $_POST['youPass'];

    // echo $youEmail, $youPass;

    // 데이터 출력
    function msg($alert){
        echo "<p class='intro__text'>$alert</p>";
    }

    // 데이터 조회
    $sql = "SELECT memberID, youEmail, youName, youPass FROM members WHERE youEmail = '$youEmail' AND youPass = '$youPass'";
    $result = $connect -> query($sql);

    if($result){
        $count = $result -> num_rows;

        if($count == 0){
            msg("이메일 또는 비밀번호가 틀렸습니다. 다시 한번 확인해주세요.<br><div class='intro__btn'><a href='../login/login.php'>로그인</a></div>");
        } else {
            // 로그인 성공
            $memberInfo = $result -> fetch_array(MYSQLI_ASSOC);

            // echo "<pre>";
            // var_dump($memberInfo);
            // echo "</pre>";

            // 세션 생성
            $_SESSION['memberID'] = $memberInfo['memberID'];
            $_SESSION['youEmail'] = $memberInfo['youEmail'];
            $_SESSION['youName'] = $memberInfo['youName'];


            Header("Location: ../main/main.php");
        }
    }
?>

        </div>
    </main>
    <!-- //main -->

</body>
</html>

head.php, skip.php, header.php와 같은 다른 파일을 include하여 웹페이지를 구성합니다.

main 태그 안에는 intro__inner 클래스를 가진 div 태그와 이미지 태그가 있습니다. 그리고 그 아래에는 PHP 코드가 포함되어 있습니다.

PHP 코드의 주요 내용은 다음과 같습니다.

connect.php 파일과 session.php 파일을 include하여 데이터베이스 연결과 세션 설정을 합니다.
로그인 폼에서 입력한 이메일과 비밀번호 값을 POST 방식으로 받아옵니다.
$sql 변수에 입력된 이메일과 비밀번호가 데이터베이스에서 일치하는지 조회하는 쿼리를 저장합니다.
$result 변수에 쿼리를 실행한 결과를 저장합니다.
$result가 유효하면 조회된 데이터의 개수를 $count 변수에 저장합니다.
$count 값이 0일 경우, "이메일 또는 비밀번호가 틀렸습니다. 다시 한번 확인해주세요." 메시지와 함께 로그인 페이지로 이동하는 링크를 출력합니다.
$count 값이 0이 아닐 경우, 로그인 성공을 의미하므로 $memberInfo 변수에 회원 정보를 저장합니다.
$memberInfo 변수에 저장된 회원 정보를 세션으로 저장합니다.
Header 함수를 사용하여 ../main/main.php 페이지로 이동합니다.
즉, 이 코드는 입력된 이메일과 비밀번호가 데이터베이스에 일치하면 로그인 성공 처리를 하고, 그렇지 않은 경우 로그인 페이지로 이동하는 기능을 수행합니다.

댓글