PHP - MySQL 登入:初學者指南

Hello there, aspiring web developers! Today, we're going to embark on an exciting journey into the world of PHP and MySQL to create a simple yet powerful login system. As someone who's been teaching this stuff for years, I can tell you that mastering this skill is like unlocking a secret door in the world of web development. So, let's roll up our sleeves and dive in!

PHP - MySQL Login

了解全局

Before we start coding, let's take a moment to understand what we're trying to achieve. Imagine you're building a treehouse. You need a sturdy foundation, walls, a roof, and a way to get in and out. Our PHP-MySQL login system is similar:

  • Config.php: 這是我們的基礎,連接我們到數據庫。
  • Login.php: 想象這是我們樹屋的門。
  • Session.php: 這個負責追蹤誰在樹屋內。
  • Welcome.php: 授权用戶聚集的舒適內部空間。
  • Logout.php: 退出標誌,指引用戶出去。

現在,讓我們一步一步建立每一部分!

Config.php:鋪設基礎

這個文件就像PHP和MySQL之間的秘密握手。這是我們存儲數據庫連接詳情的地方。

<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'login_demo');

$conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);

if($conn === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
?>

讓我們分解這個:

  • 我們使用 define() 來設置我們數據庫詳情的常量。
  • mysqli_connect() 建立到我們MySQL數據庫的連接。
  • 如果連接失敗,我們使用 die() 來停止執行並顯示錯誤信息。

專業提示:千萬不要分享你的真實數據庫憑據!這個示例使用默認值,但在實際項目中,請保持這些信息秘密!

Login.php:守門人

這裡發生魔法。用戶輸入他們的憑據,然後我們檢查他們是否被允許進入。

<?php
session_start();
require_once "config.php";

if($_SERVER["REQUEST_METHOD"] == "POST"){
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);

$sql = "SELECT id, username, password FROM users WHERE username = ?";

if($stmt = mysqli_prepare($conn, $sql)){
mysqli_stmt_bind_param($stmt, "s", $param_username);
$param_username = $username;

if(mysqli_stmt_execute($stmt)){
mysqli_stmt_store_result($stmt);

if(mysqli_stmt_num_rows($stmt) == 1){
mysqli_stmt_bind_result($stmt, $id, $username, $hashed_password);
if(mysqli_stmt_fetch($stmt)){
if(password_verify($password, $hashed_password)){
session_start();
$_SESSION["loggedin"] = true;
$_SESSION["id"] = $id;
$_SESSION["username"] = $username;
header("location: welcome.php");
} else{
$login_err = "Invalid username or password.";
}
}
} else{
$login_err = "Invalid username or password.";
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>Username</label>
<input type="text" name="username" required>
</div>
<div>
<label>Password</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="Login">
</div>
</form>
</body>
</html>

哇,這有很多要吸收的!讓我們分解它:

  • 我們開始會話並包含我們的配置文件。
  • 我們檢查表單是否使用POST提交。
  • 我們使用預處理語句來防止SQL注入(一種常見的安全漏洞)。
  • 我們使用 password_verify() 來驗證密碼(在實際項目中總是加密密碼!)。
  • 如果登錄成功,我們設置會話變量並重定向到 welcome.php。
  • 我們還有一個簡單的HTML表單供用戶輸入他們的憑據。

記住,在真實世界的應用程序中,你會想要添加更多的安全措施和錯誤處理!

Session.php:保鏢

這個文件檢查用戶是否登錄。如果不是,它會把他們發回到登錄頁面。

<?php
session_start();

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
header("location: login.php");
exit;
}
?>

簡潔而甜蜜!這段代碼:

  • 開始會話。
  • 檢查用戶是否登錄。
  • 如果不是,它會重定向他們到登錄頁面。

Welcome.php:VIP區域

這是成功登錄後用戶會到達的地方。

<?php
require_once "session.php";
?>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome</title>
</head>
<body>
<h1>Hi, <b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>. Welcome to our site.</h1>
<p>
<a href="logout.php">Sign Out</a>
</p>
</body>
</html>

這裡發生的事情是:

  • 我們包含 session.php 來確保只有登錄的用戶能夠訪問這個頁面。
  • 我們顯示一個使用會話中存儲的用戶名個性化的歡迎信息。
  • 我們提供一個退出鏈接。

Logout.php:出口

最後,我們需要一種方式讓用戶安全地登出。

<?php
session_start();
$_SESSION = array();
session_destroy();
header("location: login.php");
exit;
?>

這個腚本:

  • 開始會話。
  • 取消設置所有會話變量。
  • 销毁會話。
  • 重定向用戶回到登錄頁面。

汇總所有部分

現在我們已經建立了所有部分,讓我們總結一下它們是如何一起工作的:

文件 目的 关键功能
Config.php 數據庫連接 mysqli_connect()
Login.php 用戶认证 mysqli_prepare(), password_verify()
Session.php 会话管理 session_start(), $_SESSION 檢查
Welcome.php 授权用户页面 显示个性化内容
Logout.php 结束用户会话 session_destroy()

就这样!你剛剛建立了一個基本的PHP-MySQL登錄系統。記住,這只是開始。在真實世界的應用程序中,你會想要添加更多的功能,如:

  • 密碼重置功能
  • 記住我選項
  • 更健壯的錯誤處理
  • 增強的安全措施

继續练习,保持好奇心,不久之後,你將能夠輕鬆地构建复杂的網絡應用程序。祝你好運,未來的網絡巫師!

Credits: Image by storyset