零基础学php实战教程:用户登录功能开发+常见错误解决全解析

admin PHP教程 4


是不是刚学 PHP 的新手,想做个用户登录功能却处处碰壁?写了登录表单提交后没反应,连接数据库时总提示 “访问被拒绝”,好不容易能提交了,密码输对了也登录失败,更不知道怎么给用户显示错误提示。用户登录功能是网站的基础,也是新手入门 PHP 的必练项目,但数据库连接、密码验证、错误处理这些环节,稍不注意就会出问题。今天兔子哥就带零基础的朋友手把手开发登录功能,每个步骤都讲透,还会揪出常见错误的解决办法,跟着做,你也能做出能正常登录的 PHP 功能!

基础问题:用户登录功能到底要做啥?难不难?


可能有朋友会问:“一个登录框而已,为啥还要专门学?” 其实登录功能看着简单,背后要做的事可不少:得有表单让用户输账号密码,得连接数据库查账号是否存在,得验证密码对不对,还得给用户显示 “账号不存在”“密码错误” 这些提示,少一步都不行。
对零基础来说,登录功能是练手的好项目,能一次性学会表单处理、数据库操作、条件判断这些核心技能。网友 “刚学 PHP 的小琳” 说:“刚开始觉得登录功能好复杂,跟着步骤做完后,突然就懂了 PHP 怎么和数据库互动,原来没那么难!” 真的,把大功能拆成小步骤,一步步做,你会发现其实很简单。


第一步:准备工作,环境和数据库先搞定


开发登录功能前,得把 “舞台” 搭好,也就是环境和数据库,这俩没准备好,后面代码写得再好也跑不起来。

环境检查:确保 PHP 和 MySQL 能正常工作


咱们用 XAMPP 集成环境最方便,新手不用自己配服务器。打开 XAMPP 控制面板,启动 Apache 和 MySQL,变绿色就说明启动成功了。然后在浏览器输 “http://localhost/phpmyadmin”,能打开数据库管理页面,就说明环境没问题。要是启动失败,大概率是端口被占用,在 Apache 和 MySQL 的 “Config” 里改个端口就行,比如把 Apache 的 80 改成 8080。

数据库设计:建个用户表存账号密码


登录功能得有地方存用户信息,所以要先建数据库和表。打开 phpMyAdmin,点 “新建” 创建数据库,名字叫 “user_system” 就行;然后在这个数据库里建表,表名叫 “users”,字段这样设:
  • id:INT 类型,主键,自动增长(存用户唯一 ID);
  • username:VARCHAR (50),不允许为空,设为唯一(存用户名,不能重复);
  • password:VARCHAR (255),不允许为空(存密码,后面要加密)。

建表 SQL 代码可以直接复制执行:
sql
CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50) NOT NULL UNIQUE,password VARCHAR(255) NOT NULL);

建完表后,手动加条测试数据:username 填 “testuser”,password 先填 “123456”(后面会教加密,这里先方便测试)。


第二步:开发登录功能,分三步走


登录功能可以拆成 “显示登录表单→接收并验证数据→给出结果反馈” 三步,一步一步来,思路更清晰。

步骤 1:写登录表单,让用户能输入账号密码


新建 “login.html” 文件,放 XAMPP 的 “htdocs” 文件夹里,代码如下:
html
DOCTYPE html><html><body><h2>用户登录h2><form action="login_process.php" method="post"><p>用户名:<input type="text" name="username" required>p><p>密码:<input type="password" name="password" required>p><p><input type="submit" value="登录">p>form>body>html>

  • action="login_process.php":表单数据提交到这个 PHP 文件处理;
  • method="post":用 post 方式传数据,比 get 安全,密码不会暴露在 URL 里;
  • required:让浏览器自带验证,用户没填就提交会提示。

步骤 2:处理登录数据,连接数据库验证


新建 “login_process.php”,这是核心文件,负责接收表单数据、查数据库、验证密码:
php
// 1. 接收表单数据$username = $_POST['username'] ?? ''; // 用??防止未定义错误$password = $_POST['password'] ?? '';// 2. 连接数据库$servername = "localhost";$dbusername = "root"; // XAMPP默认用户名$dbpassword = ""; // XAMPP默认密码为空$dbname = "user_system";// 创建连接$conn = new mysqli($servername, $dbusername, $dbpassword, $dbname);// 检查连接是否成功if ($conn->connect_error) {die("数据库连接失败:" . $conn->connect_error);}// 3. 查数据库有没有这个用户$sql = "SELECT * FROM users WHERE username = '$username'";$result = $conn->query($sql);if ($result->num_rows > 0) {// 找到用户,验证密码$row = $result->fetch_assoc();// 这里先用简单对比,后面教加密if ($password == $row['password']) {echo "登录成功!欢迎回来," . $username;} else {echo "密码错误,请重新输入!";}} else {// 没找到用户echo "用户名不存在!";}// 关闭连接$conn->close();?>

步骤 3:测试登录功能,看看效果


把两个文件都放 “htdocs” 里,浏览器输 “http://localhost/login.html”,输入刚才加的测试账号 “testuser” 和密码 “123456”,点登录,应该显示 “登录成功”;输错密码会提示密码错误,输不存在的用户名会提示不存在,这样基本功能就成了。


第三步:常见错误解决,这些坑别再踩


新手开发登录功能,总会遇到各种 “奇奇怪怪” 的错误,兔子哥总结了几个高频错误,附解决办法。

错误 1:数据库连接失败,提示 “Access denied”


现象:打开登录页面提交后,显示 “数据库连接失败:Access denied for user 'root'@'localhost'”。
原因:十有八九是数据库密码错了。XAMPP 默认密码是空,但如果之前改过 MySQL 密码,代码里的dbpassword 改成你设的新密码;要么在 phpMyAdmin 里把 root 用户的密码改回空(点 “用户→root@localhost→编辑权限→修改密码→空密码→执行”)。

错误 2:表单提交后没反应,白屏或 404


现象:点登录按钮后,页面白屏,或者显示 “404 Not Found”。
原因:表单的 action 属性写错了,比如文件名拼错(login_process.php 写成 log_process.php),或者文件没放在 “htdocs” 里。
解决:检查 action 里的文件名是否和实际文件名一致,文件是否在 “htdocs” 根目录或正确的子目录里。

错误 3:密码验证失败,明明输对了也登不上


现象:用户名正确,密码也对,却总提示 “密码错误”。
原因:可能是数据库里的密码有空格,或者表单传过来的密码被转义了。比如你在数据库里手动输密码时多打了个空格,或者 PHP 配置里开启了自动转义。
解决:在数据库里重新改密码,确保没空格;接收密码时用 trim () 去掉首尾空格:$password = trim($_POST['password'] ?? '');

错误 4:SQL 语法错误,提示 “You have an error in your SQL syntax”


现象:提交后显示 SQL 语法错误,指向查询语句那一行。
原因:SQL 语句里的字符串没加单引号,比如SELECT * FROM users WHERE username = $usernameusername'`,确保字符串值前后有单引号。
常见错误典型提示解决办法
数据库连接失败Access denied检查密码是否正确,数据库名是否存在
表单提交无反应404 或白屏检查 action 文件名是否正确,文件路径是否对
密码验证失败密码错误(实际正确)去除密码首尾空格,检查数据库密码是否有多余字符
SQL 语法错误You have an error in your SQL syntax字符串值加单引号,检查表名、字段名是否写错



自问自答:新手最关心的几个问题


密码直接存数据库安全吗?会不会被偷看?


肯定不安全!上面的例子为了简单没加密,实际开发中必须加密存储。用 PHP 的 password_hash () 函数加密,验证时用 password_verify ():
php
// 存密码时加密$hashed_password = password_hash('123456', PASSWORD_DEFAULT);// 存到数据库的是加密后的字符串,不是明文// 验证时if (password_verify($password, $row['password'])) {// 密码正确}

这样就算数据库被攻破,别人也看不到明文密码,这是必须做的安全措施。

怎么记住用户登录状态?关闭浏览器再打开不用重新登录?


可以用 session 实现。登录成功后启动 session,存用户信息:
php
// 登录成功后session_start();$_SESSION['username'] = $username;$_SESSION['user_id'] = $row['id'];

然后在其他页面开头加session_start();,就能通过$_SESSION['username']判断用户是否登录,没登录就跳回登录页。


最后说点实在话


零基础开发登录功能,刚开始出错很正常,兔子哥第一次做的时候,因为数据库密码记错,折腾了一上午才连上。但只要把每个步骤拆解开,先保证环境和数据库没问题,再写表单和处理逻辑,最后解决错误,就能慢慢掌握。
建议新手把这个登录功能一步步敲一遍,别复制代码。敲的时候注意细节:引号是不是成对,分号有没有漏,变量名有没有拼错。遇到错误别慌,看看错误提示里的关键词,比如 “Access denied” 就查密码,“SQL syntax” 就查 SQL 语句,大部分问题都能在网上找到答案。
登录功能是很多网站功能的基础,学会它后,你可以试着加注册功能、密码找回功能,慢慢扩展。记住,PHP 开发没有捷径,多动手、多测试、多解决错误,你会越来越熟练,很快就能独立开发简单的网站功能了!

标签: 控制面板 phpmyadmin

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~