PHP / 회원 관리 / 로그인 페이지, 로그인 완료 페이지

로그인 페이지 - login.php

  • 페이지를 열면 POST 방식으로 넘어온 username과 password를 저장합니다.
  • $username에 값이 없다면 이후의 PHP 코드는 실행되지 않습니다.
  • 양식에 값을 입력하고 로그인 버튼을 클릭하면 $username에 값이 있으므로 이후의 PHP 코드가 실행됩니다.
  • $username에 값이 있다면 DB에서 username에 해당하는 password를 가져와서 $encrypted_password에 저장합니다.
  • 일치하는 username이 존재하지 않는다면 $encrypted_password의 값이 없으므로 '사용자이름이 존재하지 않습니다.'를 출력합니다.
  • 일치하는 username이 존재하면 $password와 $encrypted_password를 비교하고, 일치하면 login-ok.php 페이지도 이동하고, 일치하지 않으면 '비밀번호가 틀렸습니다.'를 출력합니다.
<?php
  $username = $_POST[ 'username' ];
  $password = $_POST[ 'password' ];
  if ( !is_null( $username ) ) {
    $jb_conn = mysqli_connect( 'localhost', 'codingfactory', '1234qwer', 'codingfactory.net_example' );
    $jb_sql = "SELECT password FROM member WHERE username = '" . $username . "';";
    $jb_result = mysqli_query( $jb_conn, $jb_sql );
    while ( $jb_row = mysqli_fetch_array( $jb_result ) ) {
      $encrypted_password = $jb_row[ 'password' ];
    }
    if ( is_null( $encrypted_password ) ) {
      $wu = 1;
    } else {
      if ( password_verify( $password, $encrypted_password ) ) {
        header( 'Location: login-ok.php' );
      } else {
        $wp = 1;
      }
    }
  }
?>
<!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="login.php" method="POST">
      <p><input type="text" name="username" placeholder="사용자이름" required></p>
      <p><input type="password" name="password" 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>

로그인 성공 페이지 - login-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>
  </body>
</html>

스크린샷

로그인 페이지

사용자 이름이 존재하지 않는 경우

비밀번호가 틀린 경우

로그인에 성공한 경우

Related Posts

PHP / 함수 / strlen(), mb_strlen() / 문자열의 길이 구하는 함수

PHP / 함수 / strlen(), mb_strlen() / 문자열의 길이 구하는 함수

개요 strlen()와 mb_strlen()은 문자열의 길이를 구하는 함수입니다. strlen()은 바이트 기준, mb_strlen()은 문자셋 기준입니다. 한글 등에서는 값이 다릅니다. 문법 - strlen() strlen( string ) string : 길이를 구할 문자열입니다. echo strlen( '123 abc' ); 는 7을 출력합니다. echo strlen( '가나다' ); 는 9를 출력합니다. 문법 - mb_strlen() mb_strlen( string ) string : 길이를 구할 문자열입니다. encoding : 인코딩 방식을 정합니다. 정하지 않으면 ...

PHP / addslashes(), stripslashes()

PHP / addslashes(), stripslashes()

addslashes() 작은 따옴표, 큰 따옴표, 백슬래시 앞에 백슬래시를 추가한다. 즉, PHP 'PHP' "PHP"를 PHP \'PHP\' \"PHP\"로 변경한다. <!doctype html> <html lang="ko"> <head> <meta charset="utf-8"> <title>PHP</title> <style> * { font-family: "Consolas", monospace; ...

PHP / MariaDB / 데이터베이스에서 데이터 삭제하기

PHP / MariaDB / 데이터베이스에서 데이터 삭제하기

이 강좌에서 사용하는 데이터베이스는 employees입니다. (employees 설치 하기) 직원 추가 데이터베이스에 데이터 입력하기 강좌에 있는 방식으로 직원을 추가합니다. 연봉, 직책 등이 연결된 기존 직원을 삭제하면 문제가 생길 수 있으므로, 새로 직원을 추가한 후 그 직원을 삭제합니다. 직원 삭제하기 - employees.php 직원 정보를 출력하는 페이지에 직원을 삭제하는 기능을 추가해보겠습니다. Delete 버튼을 클릭하면 바로 삭제되고 페이지가 다시 ...

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 / 회원 관리 / 회원 가입 페이지, 회원 가입 완료 페이지

PHP / 회원 관리 / 회원 가입 페이지, 회원 가입 완료 페이지

환경 로컬 서버에 설치된 MariaDB를 사용합니다.(특별한 케이스가 아니라면 MySQL에서도 잘 작동합니다.) 데이터베이스 이름은 codingfactory.net_example, 사용자이름은 codingfactory, 비밀번호는 1234qwer입니다. 테이블 만들기 id, username, password 세 개의 열을 가진 member 테이블을 만듭니다. id는 자동 증가하는 고유값을 가지는 키입니다. MariaDB > create table member ( -> id INT AUTO_INCREMENT PRIMARY KEY, -> username ...

PHP / MariaDB / 데이터베이스에 데이터 입력하기

PHP / MariaDB / 데이터베이스에 데이터 입력하기

이 강좌에서 사용하는 데이터베이스는 employees입니다. (employees 설치 하기) 폼(Form) 만들기 - employees_add.php 데이터를 입력할 폼을 만듭니다.(number, date 타입과 required는 HTML5부터 지원합니다.) 값은 employees_insert.php로 전송됩니다. <form action="employees_insert.php" method="POST"> <p><input type="number" name="emp_no" placeholder="NO" required></p> <p><input type="date" name="birth_date" required></p> <p><input type="text" name="first_name" placeholder="First Name" required></p> <p><input type="text" name="last_name" placeholder="Last Name" required></p> <p><select name="gender" ...

PHP / 함수 / substr() / 문자열의 일부분을 추출하는 함수

PHP / 함수 / substr() / 문자열의 일부분을 추출하는 함수

개요 substr()은 문자열의 일부분을 추출하는 함수입니다. PHP 4 이상에서 사용할 수 있습니다. 문법 substr( string, start ) string : 추출의 대상이 되는 문자열입니다. start : 추출을 시작하는 위치입니다. length : 추출할 문자의 개수입니다. 값이 없으면 문자열의 끝까지 추출합니다. 음수일 때는 위치를 뜻하고, 그 위치 앞까지의 문자를 추출합니다. substr( 'abcdefg', 3 ); abcdefg에서 3 위치의 문자는 d입니다. ...

PHP / 함수 / strpos() / 문자열 안에서 특정 문자열 위치 반환하는 함수

PHP / 함수 / strpos() / 문자열 안에서 특정 문자열 위치 반환하는 함수

strpos()는 문자열 안에서 특정 문자열의 위치를 반환하는 함수이다. 문법 strpos(string $haystack, string $needle, int $offset = 0) haystack : 검색 대상이 되는 문자열 needle : 찾을 문자열 offset : 검색 시작 위치 찾을 문자열이 있다면 그 위치를 반환하고, 없다면 false를 반환한다. 예제 123456789에서 1의 위치를 반환한다. 값은 0이다. strpos( "123456789", "1" ) 123456789에서 2의 위치를 반환한다. 값은 1이다. strpos( "123456789", "2" ...

PHP / MariaDB / 데이터베이스 값 가져와서 출력하기

PHP / MariaDB / 데이터베이스 값 가져와서 출력하기

이 강좌에서 사용하는 데이터베이스는 employees입니다. (employees 설치 하기) employees 출력하기 employees 테이블에는 직원 목록이 있습니다. 그 목록을 가져와서 출력해보겠습니다. 데이터베이스 연결 정보 employees 데이터베이스에 연결하기 위한 정보를 입력합니다. localhost, username, password는 적절히 변경합니다. $jb_conn = mysqli_connect( 'localhost', 'username', 'password', 'employees' ); 쿼리 작성하기 쿼리를 만듭니다. 아래는 employees 테이블에서 5개의 레코드를 가져오는 쿼리입니다. $jb_sql = "SELECT * FROM employees LIMIT ...

PHP / 연산자 / 할당 연산자

PHP / 연산자 / 할당 연산자

PHP의 할당 연산자는 =입니다. 등호 오른쪽을 등호 왼쪽에 저장합니다.(같다를 표현할 때는 ==를 사용합니다.  비교 연산자를 참고하세요.) $a = 10; 변수 a에 10을 할당합니다. $a = 10; $a = 20; 여러 번 할당하면 마지막에 할당된 것이 값이 됩니다. 즉 변수 a의 값은 20입니다. $a = 10; $a = $a + 10; 기존 값을 사용할 수 있습니다. 변수 a의 값은 ...