📜  PHP-MySQL登录(1)

📅  最后修改于: 2023-12-03 15:18:32.637000             🧑  作者: Mango

PHP-MySQL登录

在Web开发中,登录系统是必不可少的功能之一。本文将介绍如何使用PHP和MySQL创建一个简单的登录系统。

准备工作

在开始之前,我们需要确保本地电脑上已经安装好了PHP和MySQL,并且已经创建好了相应的数据库。

我们需要创建一个用户表,用于存储用户登录信息。表结构如下:

CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `password` varchar(255) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

其中,id为自增长主键,username和password为用户输入的用户名和密码,email为用户的邮箱。

登录界面

首先,我们需要创建一个登录界面,用于用户输入用户名和密码。代码如下:

<!DOCTYPE html>
<html>
<head>
	<title>登录</title>
</head>
<body>
	<h1>登录</h1>
	<form method="post" action="login.php">
		<label>用户名:</label>
		<input type="text" name="username"><br><br>
		<label>密码:</label>
		<input type="password" name="password"><br><br>
		<input type="submit" value="登录">
	</form>
</body>
</html>

上面的代码使用了form标签和input标签创建了一个登录表单,form的method属性为post,action属性为login.php,表示登录表单的提交将会发送到login.php文件进行处理。

处理登录请求

当用户提交登录表单后,login.php文件将会接收到请求并进行处理。我们需要验证用户的用户名和密码是否正确,如果正确,则将用户重定向到主页,否则显示错误信息。

<?php
// 建立数据库连接
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = '123456';
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$options = [
	PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
	PDO::ATTR_EMULATE_PREPARES => false,
	PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
	PDO::ATTR_PERSISTENT => true
];
try {
	$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
	die('数据库连接失败:' . $e->getMessage());
}

// 处理登录请求
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
	$username = $_POST['username'];
	$password = $_POST['password'];
	$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
	$stmt->execute(['username' => $username]);
	$user = $stmt->fetch();
	if ($user && password_verify($password, $user['password'])) {
		// 登录成功,将用户信息存储到Session中,并重定向到主页
		session_start();
		$_SESSION['user_id'] = $user['id'];
		header('Location: index.php');
		exit();
	} else {
		// 登录失败,显示错误信息
		$error_msg = '用户名或密码错误!';
	}
}

// 显示登录界面
?>
<!DOCTYPE html>
<html>
<head>
	<title>登录</title>
</head>
<body>
	<h1>登录</h1>
	<?php if (isset($error_msg)) { ?>
		<p><?php echo $error_msg; ?></p>
	<?php } ?>
	<form method="post" action="login.php">
		<label>用户名:</label>
		<input type="text" name="username"><br><br>
		<label>密码:</label>
		<input type="password" name="password"><br><br>
		<input type="submit" value="登录">
	</form>
</body>
</html>

上面的代码使用了PDO来建立数据库连接,并编写了处理登录请求的逻辑。首先,从数据库中查询出用户名为用户输入的用户名的用户信息。然后,使用password_verify函数验证用户输入的密码是否与数据库中存储的密码匹配。如果匹配,则登录成功,将用户信息存储到Session中,并重定向到主页;否则,登录失败,显示错误信息。

验证登录状态

当用户已经登录后,我们需要验证用户的登录状态,并且在数据库中查询出用户的信息,用于显示在主页上。代码如下:

<?php
// 建立数据库连接
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = '123456';
$dsn = "mysql:host=$host;dbname=$dbname;charset=utf8mb4";
$options = [
	PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
	PDO::ATTR_EMULATE_PREPARES => false,
	PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
	PDO::ATTR_PERSISTENT => true
];
try {
	$pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
	die('数据库连接失败:' . $e->getMessage());
}

// 验证登录状态
session_start();
if (!isset($_SESSION['user_id'])) {
	header('Location: login.php');
	exit();
}

// 在数据库中查询出用户信息
$user_id = $_SESSION['user_id'];
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => $user_id]);
$user = $stmt->fetch();

// 显示主页
?>
<!DOCTYPE html>
<html>
<head>
	<title>主页</title>
</head>
<body>
	<h1>欢迎 <?php echo $user['username']; ?> 登录</h1>
	<p>您的邮箱是:<?php echo $user['email']; ?></p>
	<a href="logout.php">退出登录</a>
</body>
</html>

上面的代码使用了Session来验证用户的登录状态,然后在数据库中查询出用户的信息,用于显示在主页上。如果用户没有登录,则重定向到登录界面。当用户单击退出链接时,我们需要清除Session,并重定向到登录界面。

总结

本文介绍了如何使用PHP和MySQL创建一个简单的登录系统,包括登录界面、处理登录请求、验证登录状态以及退出登录。在实际开发中,我们需要对代码进行优化和完善,包括对输入进行验证、对密码进行加密、防止SQL注入等安全性问题。我们也可以使用框架来简化开发流程和提高安全性。