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!
了解全局
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