PHP - MySQL 登录:初学者指南

你好,有抱负的网页开发者们!今天,我们将踏上一段激动人心的旅程,进入 PHP 和 MySQL 的世界,来创建一个简单而强大的登录系统。作为一个教这门课程多年的人,我可以告诉你,掌握这项技能就像是打开了网页开发世界中的一扇神秘之门。那么,让我们卷起袖子,开始吧!

PHP - MySQL Login

理解全局

在我们开始编码之前,让我们花点时间理解我们要实现什么。想象你正在建造一个树屋。你需要一个坚固的基础、墙壁、屋顶以及一个进出通道。我们的 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