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)

Related Posts

PHP / Session / 세션 값 출력하는 방법

PHP / Session / 세션 값 출력하는 방법

세션(Session)에 값을 저장했을 때, 그 값을 출력하는 방법을 간단한 예제로 알아보겠습니다. 세션을 초기화합니다. 이때 id가 하나 발급됩니다. session_start(); 세션의 no에 123을, username에 abc를 저장합니다. $_SESSION = 123; $_SESSION = 'abc'; 세션의 id를 출력합니다. echo session_id(); 세션의 no의 값을 출력합니다. echo $_SESSION; 세선의 username의 값을 출력합니다. echo $_SESSION; 세션의 모든 값을 출력합니다. var_dump( $_SESSION ); 다음은 전체 ...

PHP / 함수 / empty() / 비어있는 변수인지 검사하는 함수

PHP / 함수 / empty() / 비어있는 변수인지 검사하는 함수

개요 empty로 변수가 비어있는지 검사합니다. PHP 4 이상에서 사용할 수 있습니다. 문법 empty( $var ) $var가 비어있는지 검사하고, 비어있다면 TRUE, 비어있지 않다면 FALSE를 반환합니다. 다음을 비어있는 것으로 판단합니다. "" (빈 문자열) 0 (정수 0) "0" (문자열 0) NULL FALSE array() (빈 배열) var $var; (클래스 안에서 값 없이 선언된 변수) 예제 <!doctype html> <html lang="ko">   <head>     <meta charset="utf-8">     <title>Coding Factory</title>     <style>       p {         font-family: "Times New ...

PHP / 회원 관리 / 비밀번호 변경 페이지

PHP / 회원 관리 / 비밀번호 변경 페이지

change-password.php $_SESSION의 값으로 로그인 여부를 판단합니다. 로그인 상태가 아니라면 로그인 페이지로 이동합니다. 로그인 상태라면 $current_password의 값으로 새 비밀번호를 입력했는지 확인합니다. 새 비밀번호를 입력했다면 현재 비밀번호가 맞는지 확인합니다. 맞지 않다면 '현재 비밀번호가 틀렸습니다.'를 출력합니다. 현재 비밀번호가 맞다면 새로 입력한 비밀번호 두 개가 일치하는지 확인합니다.일치하지 않는다면 '새 비밀번호가 일치하지 않습니다.'를 출력합니다. 새 비밀번호 두 개가 ...

PHP / SQL Server / Ubuntu 18.04에서 연결하는 방법

PHP / SQL Server / Ubuntu 18.04에서 연결하는 방법

PHP에서 SQL Server에 연결하는 방법입니다. 서버 OS는 Ubuntu 18.04이고 Apache, PHP는 설치되어 있는 상태에서 시작합니다. 아래의 내용은 꼭 필요한 것만 모은 요약이며, 자세한 내용은 Microsoft 홈페이지에서 보실 수 있습니다. 소프트웨어 설치 다음의 명령을 차례대로 실행하여 필요한 소프트웨어를 설치합니다. curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list apt-get update ACCEPT_EULA=Y apt-get install msodbcsql17 apt-get install unixodbc-dev apt install ...

PHP / 반복문 / foreach

PHP / 반복문 / foreach

foreach foreach는 배열의 각 값에 대하여 반복 작업을 합니다. 문법 foreach ( array_expression as $value ) { statement; } foreach ( array_expression as $value ) : statement; endforeach; 예제 배열 jba의 각 값을 변수 jbv에 넣습니다. 변수 jbv를 두 배하고 1을 뺀 값을 변수 jbr에 넣습니다. 변수 jbr을 출력합니다. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> ...

PHP / 메모

PHP / 메모

HTML 확장자에서도 PHP 코드 실행시키는 방법 PHP는 보통 확장자가 php인 파일에서 실행됩니다. 하지만 설정을 추가하여 다른 확장자 파일에서도 php가 실행되도록 할 수 있습니다. 만약 아파치 웹서버에서, 확장자가 html인 파일에서도 php가 실행되도록 하려면, 설정 파일에 다음 코드를 추가합니다. AddType application/x-httpd-php .html

PHP / 연산자 / 산술 연산자

PHP / 연산자 / 산술 연산자

PHP의 산술 연산자에는 +, -, *, /, %, **이 있습니다. - $a $a의 부호를 반대로 바꿉니다. <?php   $a = 10;   echo - $a; ?> -10을 출력합니다. $a + $b $a와 $b를 더합니다. <?php $a = 10; $b = 4; echo $a + $b; ?> 14를 출력합니다. $a - $b $a에서 $b를 뺍니다. <?php $a = 10; $b = ...

PHP / 함수 / explode() / 문자열을 분할하여 배열로 저장하는 함수

PHP / 함수 / explode() / 문자열을 분할하여 배열로 저장하는 함수

개요 explode()는 문자열을 분할하여 배열로 저장하는 함수입니다. PHP 4 이상에서 사용할 수 있습니다. 문법 explode ( delimiter, string ) delimiter : 문자열을 분할할 기준을 정합니다. string : 분할할 문자열입니다. limit : 옵션으로, 분할할 개수를 정합니다. 정수를 입력합니다. $jbstring = 'one two three four'; $jbexplode = explode( ' ', $jbstring ); 문자열 jbsrting을 공백을 기준으로 구분하여 배열 jbexplode에 ...

PHP / Ubuntu / Apache / HTML 확장자에도 PHP 코드 인식되도록 설정하는 방법

PHP / Ubuntu / Apache / HTML 확장자에도 PHP 코드 인식되도록 설정하는 방법

Ubuntu에 Apache로 웹서버를 만들고 PHP를 사용할 수 있게 만든 경우, 기본적으로 확장자가 php인 경우에만 PHP 코드를 인식합니다. 만약 확장자가 html일 때로 PHP 코드가 인식되도록 하고 싶다면, Apache 설정을 바꿔줘야 합니다. /etc/apache2/mods-enabled/mime.conf 파일을 엽니다. 다음 코드를 추가합니다. AddType application/x-httpd-php .html 확장자가 htm인 경우에도 PHP를 인식하도록 하고 싶다면 다음처럼 합니다. AddType application/x-httpd-php .html .htm 웹서버를 다시 로드합니다. service apache2 ...

PHP / 함수 / md5() / 문자열에서 md5 해시값 생성하는 함수

PHP / 함수 / md5() / 문자열에서 md5 해시값 생성하는 함수

개요 md5()는 문자열에서 md5 해시값을 생성하는 함수입니다. 해시값에서 원래의 문자열을 만들지는 못합니다. 문자열이 같다면 같은 해시값을 만드므로, 비밀번호를 암호화하여 저장하는 용도로는 맞지 않습니다. It is not recommended to use this function to secure passwords, due to the fast nature of this hashing algorithm. 문법 md5( string $str ) str : ...