PHP / 회원 관리 / 회원 가입 페이지, 회원 가입 완료 페이지
환경
- 로컬 서버에 설치된 MariaDB를 사용합니다.(특별한 케이스가 아니라면 MySQL에서도 잘 작동합니다.)
- 데이터베이스 이름은 codingfactory.net_example, 사용자이름은 codingfactory, 비밀번호는 1234qwer입니다.
테이블 만들기
- id, username, password 세 개의 열을 가진 member 테이블을 만듭니다.
- id는 자동 증가하는 고유값을 가지는 키입니다.
MariaDB [codingfactory.net_example]> create table member ( -> id INT AUTO_INCREMENT PRIMARY KEY, -> username varchar(100), -> password varchar(100) -> ); Query OK, 0 rows affected (0.01 sec)
회원 가입 페이지 / register.php
- 페이지를 로드하면 POST 방식으로 넘어온 username, password, password_confirm을 받습니다. username에 값이 있으면 회원 가입 버튼을 클릭한 것이므로 이후의 PHP 코드를 실행합니다.
- [회원 가입] 버튼을 클릭하여 페이지가 로드되었다면 회원 DB에서 같은 username을 가진 회원이 있나 검사합니다. 같은 이름의 회원이 있다면 '사용자이름이 중복되었습니다.'를 출력합니다.
- 사용자이름이 중복되지 않았다면 입력한 두 비밀번호가 같은지 검사합니다. 같지 않다면 '비밀번호가 일치하지 않습니다.'를 출력합니다.
- 사용자이름이 중복되지 않고, 두 비밀번호가 일치한다면 DB에 회원 정보를 저장하고 register-ok.php로 넘어갑니다.
<?php $username = $_POST[ 'username' ]; $password = $_POST[ 'password' ]; $password_confirm = $_POST[ 'password_confirm' ]; if ( !is_null( $username ) ) { $jb_conn = mysqli_connect( 'localhost', 'codingfactory', '1234qwer', 'codingfactory.net_example' ); $jb_sql = "SELECT username FROM member WHERE username = '$username';"; $jb_result = mysqli_query( $jb_conn, $jb_sql ); while ( $jb_row = mysqli_fetch_array( $jb_result ) ) { $username_e = $jb_row[ 'username' ]; } if ( $username == $username_e ) { $wu = 1; } elseif ( $password != $password_confirm ) { $wp = 1; } else { $encrypted_password = password_hash( $password, PASSWORD_DEFAULT); $jb_sql_add_user = "INSERT INTO member ( username, password ) VALUES ( '$username', '$encrypted_password' );"; mysqli_query( $jb_conn, $jb_sql_add_user ); header( 'Location: register-ok.php' ); } } ?> <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>회원 가입</title> <style> body { font-family: sans-serif; font-size: 14px; } input, button { font-family: inherit; font-size: inherit; } </style> </head> <body> <h1>회원 가입</h1> <form action="register.php" method="POST"> <p><input type="text" name="username" placeholder="사용자 이름" required></p> <p><input type="password" name="password" placeholder="비밀번호" required></p> <p><input type="password" name="password_confirm" placeholder="비밀번호 확인" required></p> <p><input type="submit" value="회원 가입"></p> <?php if ( $wu == 1 ) { echo "<p>사용자이름이 중복되었습니다.</p>"; } if ( $wp == 1 ) { echo "<p>비밀번호가 일치하지 않습니다.</p>"; } ?> </form> </body> </html>

회원 가입 페이지

사용자이름이 중복된 경우

비밀번호가 일치하지 않은 경우
회원 가입 완료 페이지 / register-ok.php
<!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>회원 가입</title> <style> body { font-family: sans-serif; font-size: 14px; } </style> </head> <body> <h1>회원 가입이 완료되었습니다.</h1> </body> </html>
DB에 잘 저장되었는지 확인합니다.
MariaDB [codingfactory.net_example]> SELECT * FROM member; +----+----------+--------------------------------------------------------------+ | id | username | password | +----+----------+--------------------------------------------------------------+ | 1 | user-01 | $2y$10$SxClxXVp.6i1Xq.s23W7euUgkyKavGVAvI7s0JgDgws0QcgocITmS | +----+----------+--------------------------------------------------------------+ 1 row in set (0.00 sec)