PHP - MySQL 登录:初学者指南
你好,有抱负的网页开发者们!今天,我们将踏上一段激动人心的旅程,进入 PHP 和 MySQL 的世界,来创建一个简单而强大的登录系统。作为一个教这门课程多年的人,我可以告诉你,掌握这项技能就像是打开了网页开发世界中的一扇神秘之门。那么,让我们卷起袖子,开始吧!
理解全局
在我们开始编码之前,让我们花点时间理解我们要实现什么。想象你正在建造一个树屋。你需要一个坚固的基础、墙壁、屋顶以及一个进出通道。我们的 PHP-MySQL 登录系统也是如此:
- 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("错误:无法连接。 " . 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 = "无效的用户名或密码。";
}
}
} else{
$login_err = "无效的用户名或密码。";
}
} else{
echo "哎呀!出了点问题。请稍后再试。";
}
mysqli_stmt_close($stmt);
}
mysqli_close($conn);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<h2>登录</h2>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<div>
<label>用户名</label>
<input type="text" name="username" required>
</div>
<div>
<label>密码</label>
<input type="password" name="password" required>
</div>
<div>
<input type="submit" value="登录">
</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>欢迎</title>
</head>
<body>
<h1>嗨,<b><?php echo htmlspecialchars($_SESSION["username"]); ?></b>。欢迎来到我们的网站。</h1>
<p>
<a href="logout.php">退出登录</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