X

PHP Registration, login and logout with MySQL


다음의 예는 database 에 등록된 사용자들의 login 을 허용하는 웹사이트 구축입니다.
필요한 웹페이지들은
  • login.php : form 으로부터 사용자 정보를 입력받아 users_db.users 의 사용자 목록과 비교하여, 있으면 content.php 로,  새로운 사용자면 registration.php 를 통해서 등록 후 content.php 로 이동
  • logout.php :
  • registration.php :
  • content.php  : 실제 웹사이트 .
  • MySQL : database "users_db" 와 table "users"
                 e.g.) CREATE TABLE users (
                        id INT NOT NULL AUTO_INCREMENT,
                        PRIMARY KEY(id),
                        name varchar(40), pass varchar(40), email varchar(50) );
  • Extra (관리도구)
    • admin.php : 관리자 로그인 페이지
    • admin_users.php : 사용자 리스트 표시 및 제거 버튼 제공
    • delete.php : 사용자 제거
    • MySQL : users_db.admin table
                   e.g.) CREATE TABLE admin(
                          id INT NOT NULL AUTO_INCREMENT,
                          PRIMARY KEY(id),
                          name varchar(40), pass varchar(40) );

login.php

아래의 코드(login.php)는 사용자로부터 username 과 password 를 입력받아 인증 후 content.php 로 이동한다.

<!DOCTYPE html>
<?php
session_start();

$con = mysqli_connect('localhost','root','123123','users_db');

if (isset($_POST['submit'])) {
    $username = $_POST['username'];
    $password = $_POST['password'];

    if (empty($_POST['username'])) {
        echo "<script> alert('Please enter your name!')</script>";
        }
    if (empty($_POST['password'])) {
        echo "<script> alert('Please enter your password!')</script>";
        }
   
    $query = "SELECT name, pass FROM users WHERE name='$username' AND pass='$password' ";
    $result = mysqli_query($con,$query);
   
    if ( mysqli_num_rows($result) > 0 ) {
            $_SESSION['login']=$username;
            header("Location: content.php");
    } else {
        echo "Wrong username or password !";
    }

}
?>
<html>
<head>
    <title> Login Page </title>
</head>
<body>
<center>
    <form method="post" action="login.php">
    <table border="2" >
        <tr>
            <td colspan="2" align="center"> Login </td>
        </tr>
        <tr>
            <td width="100" align="center"> Username </td>
            <td> <input type="text" name="username" > </td>
        </tr>
        <tr>
            <td width="100" align="center"> Password </td>
            <td> <input type="password" name="password" > </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
            <input type="submit" name="submit" value="Login" > </td>
        </tr>
        </table>
    </form>
    <b> Not registered yet? <a href="registration.php"> Registeration </a></b>
</center>
</body>
</html>

registration.php

아래의 코드(registration.php)는 사용자로부터 username, password 와 email 들를 입력받아 users_db.users 에 저장하고, content.php 로 이동한다.

<!DOCTYPE html>
<?php

session_start();

$con = mysqli_connect('localhost','root','123123','users_db');

if (isset($_POST['submit'])) {

    $username = $_POST['username'];
    $password = $_POST['password'];
    $email = $_POST['email'];

if (empty($_POST['username']) || empty($_POST['password']) || empty($_POST['email'])) {
    echo "<script> alert('Please enter all required field!')</script>";
} else {
    $query = "SELECT * FROM users WHERE name='$username' OR email='$email' ";
    $result = mysqli_query($con,$query);
   
    if ( mysqli_num_rows($result) > 0 ) {
        header("Location: registration.php?MSG=Username:$username or E-mail:$email is already exist, please use another one!");
    } else {
        $query = "INSERT INTO users (name, pass, email)
        VALUES ('$username','$password','$email')";
        if (mysqli_query($con,$query)) {
            $_SESSION['login']=$username;
            header("Location: content.php");
            }       
    }
}
}

?>
<html>
<head>
    <title> Registration Page </title>
</head>
<body>
<?php
if(isset($_GET['MSG'])) {
echo $_GET['MSG'];
}
?>
<center>
    <form method="post" action="registration.php">
    <table border="2" >
        <tr>
            <td colspan="2" align="center"> Registration </td>
        </tr>
        <tr>
            <td width="100" align="center"> UserName </td>
            <td> <input type="text" name="username" > </td>
        </tr>
        <tr>
            <td width="100" align="center"> Password </td>
            <td> <input type="password" name="password" > </td>
        </tr>
        <tr>
            <td width="100" align="center"> E-mail </td>
            <td> <input type="text" name="email" > </td>
        </tr>
        <tr>
            <td colspan="2" align="center">
            <input type="submit" name="submit" value="Sign-up" > </td>
        </tr>
        </table>
    </form>
    <b> Already registered ?  <a href="login.php"> Login </a> <b>
</center>

</body>
</html>


logout.php

아래의 코드(logout.php)는 session 을 삭제하고, login.php 로 이동 시킨다 .

<?php
session_start();
session_destroy();
header('Location: login.php');
?>


content.php

아래의 코드(content.php)는 session 을 살펴보아 로그인 여부를 확인 후에 페이지를 보여준다. 로그인 하지 않은 경우에는 login.php로 이동 한다.

<!DOCTYPE html>
<?php
session_start();
if (!isset($_SESSION['login'])) {
        header("Location: login.php");
    }
?>
<html>
<head>
    <title> Content Page </title>
</head>
<body>
<h1> Content Page </h1>
<h2> Welcome <?=$_SESSION['login']?> </h2>
<hr>
<b> <a href="./logout.php" align="right"> Logout </a> </b>
</body>
</html>


admin_login.php

Extra : 아래의 코드(admin_login.php)는 admin 권한으로 로그인 하게 해주며, 성공시 사용자 리스트를 보여준다. (추가로 admin 테이블이 필요)



<?php

?>

admin_users.php

Extra : 아래의 코드(admin_users.php)는 admin 권한으로 로그인한 경우에  users_db.users 테이블 자료를 테이블 형식으로 보여주며, 버튼으로 사용자 제거 가능하게 한다.  



<?php

?>

delete.php

Extra : 아래의 코드(delete.php)는  users_db.users 테이블 에서 전달 받은 id 에 해당하는 레코드를 지우고, admin_users.php를 다시 표시한다. 

<?php

?>