[Normaltic's 취업반 과제] 로그인 DB 연동

2024. 4. 26. 11:12정보보안 및 해킹/Normaltic's 취업반 과제

index.php - Login  상태가 아니면 바로 login.php로 redirect

<?php
require_once ('connect_db.php');

  if ($_GET['login_id'] == "") {
    header("location: login.php");
    exit;
  }
?>

[생략]

  <?php
  $user_id = $_GET['login_id'];
?>
    
    <h1> <?php echo $user_id?>님 환영합니다</h1>

[생략]

login.php - connect_db.php와 login_func.php를 include 후, 로그인 시도한 id와 비밀번호가 맞는지 체크

<?php
require_once ('login_func.php');

function login_check()
{
  $login_res = try_check_login($_POST['id'], $_POST['pass']);
   echo $login_res;
  if ($login_res) {
    header("location: index.php?login_id=" . $login_res);
    exit;
  } else {
    echo "<script>alert('아이디 혹은 비밀번호가 틀렸습니다.');
location.href='index.php'
</script>";
    exit;
  }
}
?>

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Rame's Website Login</title>

  <link rel="preconnect" href="https://fonts.googleapis.com">
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  <link
    href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100..900&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
    rel="stylesheet">
  <link rel="stylesheet" href="style.css" />
  <link rel="stylesheet" href="font.css" />
</head>

<body class="header">
  <div class="info">
    <form action="" method="POST">
      <h1 class="title-text ">Sign In</h1>
      <h3 class="login-text">LOGIN</h3>
      <label for="id"> ID : </label><br>
      <input type="text" name="id" placeholder="User ID" /><br>
      <label for="pass"> PASSWORD : </label><br>
      <input type="password" name="pass" placeholder="User Password" /><br><br>
      <button class="submit-button" name="submit" value="Login">Sign in </button>
      <?php
      if (isset($_POST['submit'])) {
        login_check();
      }
      
      ?>
    </form>
  </div>
</body>

</html>

connect_db.php - DB와 연결 및 로그인 시도한 id와 비밀번호를 가지고 DB와 비교

<?php

define("DB_SERVER", [DB_SERVER]);
define("DB_USERNAME", [DB_USERNAME]);
define("DB_PASSWORD", [DB_PASSWORD]);
define("DB_NAME", [DB_NAME]);

function connect_db()
{
$db_conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

return $db_conn;
}

function find_name_use_sql($username, $userpass)
{
  $table_name = "rame_table";
  $sql_query = "select * from $table_name where name='$username' and password='$userpass'";

  $sql_res =  mysqli_query(connect_db(), $sql_query);
  return $sql_res;
}
?>

login_func.php - 로그인 성공 시 id를 return

<?php
require_once ('connect_db.php');

function try_check_login($username, $userpass)
{

  $sql_row = mysqli_fetch_array(find_name_use_sql($username, $userpass));
  
  $db_id = $sql_row['name'];
  $db_pass = $sql_row['password'];
  if ($username == $db_id && $userpass == $db_pass) {
    return $username;
  } else {
    echo "LOGIN FAILED <br>";
  }
}
?>