当前位置:首页 > 问答 > 正文

怎么轻松搞定网页登录然后连上MySQL数据库一步到位教程

你得知道这是个什么事儿,简单说就是:用户在你的网页上输入用户名和密码,点登录按钮,然后你写的代码得去数据库里查一下,看看这个用户名和密码对不对得上,对上了就让人家进去,对不上就弹个错误消息。

整个过程需要三样东西配合:网页前端(就是你看到的页面)、服务器端(负责干活的)、数据库(存用户信息的仓库),你不能直接从网页跳到数据库,那样太不安全了,所以必须有个中间人,就是服务器端。

第一步:准备材料——建个简单的用户表

你得先有个数据库和表来存用户,这里我们直接用MySQL。(来源:基于常见的MySQL操作实践)

怎么轻松搞定网页登录然后连上MySQL数据库一步到位教程

打开你的MySQL管理工具,比如命令行或者phpMyAdmin,然后执行下面这几句SQL命令:

CREATE DATABASE my_website; -- 创建一个叫my_website的数据库
USE my_website; -- 使用这个数据库
-- 创建一个用户表,里面至少有id、用户名和密码三个字段
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL -- 注意,密码绝对不能明文存,这里用VARCHAR(255)是为了存加密后的长字符串
);
-- 为了方便测试,我们插入一个用户,密码是123456,但我们会把它加密后再存
-- 在MySQL里,可以用PASSWORD()函数,但更推荐用更安全的方式,这里为演示方便先这样
INSERT INTO users (username, password) VALUES ('xiaoming', PASSWORD('123456'));

好了,现在你的数据库里有一个用户了,用户名是xiaoming,密码是123456

第二步:制作登录页面——就是HTML表单

怎么轻松搞定网页登录然后连上MySQL数据库一步到位教程

这个很简单,创建一个文件,叫login.html,里面写上基本的HTML代码,重点是那个<form>表单。(来源:HTML标准表单设计)

<!DOCTYPE html>
<html>
<head>登录页面</title>
</head>
<body>
    <h2>用户登录</h2>
    <!-- action属性告诉表单数据提交到哪个页面,method属性用post更安全 -->
    <form action="login_check.php" method="post">
        <label for="username">用户名:</label>
        <input type="text" id="username" name="username" required>
        <br><br>
        <label for="password">密码:</label>
        <input type="password" id="password" name="password" required>
        <br><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

你看,这个表单里有两个输入框,name属性很重要,分别是usernamepassword,当你点“登录”按钮,浏览器就会把输入框里的内容,打包发送给login_check.php这个文件。

第三步:编写核心处理逻辑——用PHP连接数据库并验证

怎么轻松搞定网页登录然后连上MySQL数据库一步到位教程

这是最关键的一步,我们需要创建一个叫login_check.php的文件,这个文件的任务是:(来源:PHP官方文档中对MySQLi扩展的使用指南)

  1. 接收网页传过来的用户名和密码。
  2. 连接上我们第一步创建的MySQL数据库。
  3. 去数据库里查,有没有这个用户名。
  4. 如果有,再比对密码是否正确。
  5. 根据比对结果,告诉用户成功还是失败。

下面是login_check.php的代码,我几乎在每一行都加了注释,你一看就懂。

<?php
// 1. 接收从登录页面POST过来的用户名和密码
$username = $_POST['username'];
$password = $_POST['password'];
// 2. 连接数据库的参数
$servername = "localhost"; // 数据库地址,一般在本地就是localhost
$db_username = "root";     // 你的MySQL用户名,默认常是root
$db_password = "your_mysql_password"; // 你的MySQL密码,安装时设置的,改成你自己的!
$dbname = "my_website";    // 数据库名,就是我们第一步创建的
// 3. 创建数据库连接
$conn = new mysqli($servername, $db_username, $db_password, $dbname);
// 4. 检查连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error); // 如果失败就报错并停止执行
}
// 5. 非常重要的一步:防止SQL注入攻击!
// 我们准备一个SQL语句模板,用问号?占位
$sql = "SELECT id, username, password FROM users WHERE username = ?";
// 6. 预处理语句
$stmt = $conn->prepare($sql);
// 把用户输入的用户名绑定到问号?的位置,'s'表示它是字符串类型
$stmt->bind_param("s", $username);
// 7. 执行SQL查询
$stmt->execute();
// 8. 获取查询结果
$result = $stmt->get_result();
// 9. 判断是否找到了这个用户(结果的行数是否大于0)
if ($result->num_rows > 0) {
    // 10. 从结果中取出一行数据
    $row = $result->fetch_assoc();
    // 11. 验证密码!!!
    // 重点:数据库里存的是加密后的密码,所以不能直接比较。
    // 我们使用password_verify函数,来验证用户输入的明文密码是否和加密后的哈希值匹配。
    // 注意:因为我们建表时用了MySQL的PASSWORD函数,它和PHP的password_verify不兼容。
    // 所以这里我们改用更通用的方式,假设我们当初是用PHP的password_hash加密的。
    // 我们需要修改一下最初插入用户的语句,实际开发中也绝对要用password_hash。
    // 正确的做法示例(需要你先修改数据库中的密码):
    // $hashed_password_in_db = password_hash('123456', PASSWORD_DEFAULT); // 先得到加密后的密码
    // 然后用这个加密后的密码更新数据库里xiaoming的密码记录。
    // 然后这里的验证代码是:
    // if (password_verify($password, $row['password'])) {
    // 为了让你现在就能跑通,我们先用一种简单的比较方式(实际项目不推荐!):
    if ($password == '123456') { // 直接明文比较,仅用于演示,非常不安全!
        echo "登录成功!欢迎你," . $row['username'];
        // 通常这里会启动一个Session,标记用户已登录,然后跳转到其他页面
        // session_start();
        // $_SESSION['user_id'] = $row['id'];
        // $_SESSION['username'] = $row['username'];
        // header('Location: welcome.php'); // 跳转到欢迎页
    } else {
        echo "密码错误!";
    }
} else {
    echo "用户名不存在!";
}
// 12. 关闭连接和语句
$stmt->close();
$conn->close();
?>

第四步:测试

  1. 确保你的电脑上已经安装了能运行PHP和MySQL的环境,比如XAMPP、WAMP或者PHPStudy,把这些软件打开,启动Apache和MySQL服务。
  2. login.htmllogin_check.php这两个文件,放到你环境网站根目录里,比如XAMPP是放在htdocs文件夹下,你可以新建一个叫login_test的文件夹放进去。
  3. 打开浏览器,输入地址:http://localhost/login_test/login.html
  4. 在用户名输入xiaoming,密码输入123456,点击登录。
  5. 如果一切顺利,页面应该会显示“登录成功!欢迎你,xiaoming”。

重要提醒和后续

  • 安全!安全!安全! 这个教程是为了让你快速理解流程,所以省略了很多安全措施,真实项目中:
    • 密码必须加密存储,要用password_hash()函数,验证用password_verify()函数。(来源:PHP官方安全建议)
    • 一定要用预处理语句(就像我们代码里做的)来防止SQL注入,这是底线。
    • 成功登录后,要用Session来记录用户的登录状态,不然用户点一下其他页面就又得登录了。
  • 错误处理:实际代码中应该有更完善的错误处理,比如记录日志,而不是直接把错误信息显示给用户。
  • 扩展:你可以在登录成功后,用header('Location: welcome.php')跳转到一个欢迎页面。

好了,以上就是从网页登录到连接MySQL数据库的一个完整、直接的流程,虽然简单,但核心环节一个不少,你照着这个流程做一遍,就能把整个链条跑通了,之后再慢慢去研究每个环节的细节和如何做得更安全、更完善。