登录功能设计(php+mysql)
一 登录功能
1. 创建一个登录页面(login.php),包含一个表单,用户输入用户名和密码。
2. 在表单的提交事件中,使用PHP代码处理用户输入的用户名和密码。
3. 首先,连接MySQL数据库。然后,使用查询语句检查用户输入的用户名和密码是否匹配数据库中的记录。
4. 如果匹配成功,将用户ID和用户名存储在会话变量中,表示用户已登录。
5. 重定向用户到另一个页面,比如主页(home.php)。
示例代码:
// login.php
<?php
session_start();// 处理表单提交事件
if ($_SERVER['REQUEST_METHOD'] == 'POST') {// 获取用户输入的用户名和密码$username = $_POST['username'];$password = $_POST['password'];// 连接MySQL数据库$conn = mysqli_connect('数据库主机', '用户名', '密码', '数据库名');// 查询用户名和密码是否匹配$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";$result = mysqli_query($conn, $query);if (mysqli_num_rows($result) > 0) {// 匹配成功,将用户ID和用户名存储在会话变量中$row = mysqli_fetch_assoc($result);$_SESSION['user_id'] = $row['id'];$_SESSION['username'] = $row['username'];// 重定向用户到主页header('Location: home.php');exit();} else {// 匹配失败,显示错误消息echo '用户名或密码错误';}// 关闭数据库连接mysqli_close($conn);
}
?><!-- 登录页面表单 -->
<form method="POST" action=""><input type="text" name="username" placeholder="用户名" required><input type="password" name="password" placeholder="密码" required><button type="submit">登录</button>
</form>
```
二、 退出功能
1. 创建一个退出页面(logout.php)。
2. 在该页面的代码中,删除当前会话中的用户ID和用户名。
3. 重定向用户到另一个页面,比如登录页面(login.php)。
示例代码:
// logout.php
<?php
session_start();// 删除会话中的用户ID和用户名
unset($_SESSION['user_id']);
unset($_SESSION['username']);// 重定向用户到登录页面
header('Location: login.php');
exit();
?>
三 客户身份确定
这里是指一个网站或应用程序的功能,包括登录、退出等,可以通过权限控制来实现。
1. 创建一个数据库表,用于存储用户信息和权限等级。表结构如下:
CREATE TABLE users (id INT(11) AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,password VARCHAR(255) NOT NULL,role ENUM('admin', 'user') NOT NULL DEFAULT 'user'
);
2. 在登录功能的代码中,查询出用户的权限等级。
示例代码:
// login.php
if (mysqli_num_rows($result) > 0) {$row = mysqli_fetch_assoc($result);$_SESSION['user_id'] = $row['id'];$_SESSION['username'] = $row['username'];// 获取用户的权限等级$role = $row['role'];// 根据用户权限等级重定向到不同的页面if ($role == 'admin') {header('Location: admin.php');exit();} else {header('Location: user.php');exit();}
}
3. 创建不同的页面(如admin.php和user.php),根据用户的权限等级来显示不同的内容或功能。
示例代码:
// admin.php
<?php
session_start();// 检查用户是否登录
if (!isset($_SESSION['user_id'])) {header('Location: login.php');exit();
}// 检查用户的权限等级
if ($_SESSION['role'] != 'admin') {header('Location: user.php');exit();
}// 显示管理员功能
echo '欢迎管理员' . $_SESSION['username'];// 其他管理员功能代码...?>// user.php<?php
session_start();// 检查用户是否登录
if (!isset($_SESSION['user_id'])) {header('Location: login.php');exit();
}// 检查用户的权限等级
if ($_SESSION['role'] != 'user') {header('Location: admin.php');exit();
}// 显示普通用户功能
echo '欢迎用户' . $_SESSION['username'];// 其他用户功能代码...?>
以上是一个简单的实现思路和示例代码,其中的数据库连接、查询和权限控制等可能还需要根据具体需求进行修改和完善。
四、 跳蚤市场登录模块
1. 效果
效果如下所示:

2. 登录
完整代码如下:
<?php
session_start(); //启动会话
include "conn.php"; //引入数据库文件
//获取数据
if(isset($_POST['nickname']) && isset($_POST['pwd'])){//客户身份确定$nickname=$_POST['nickname'];$pwd=$_POST['pwd'];$sql="select * from custom where nickname='".$nickname."'";$result=$conn->query($sql);if($result->num_rows==0){echo "<script>alert('抱歉,你还不是我们的会员!请先注册')</script>";echo "<script>location.href='register.php'</script>";} else {$row=$result->fetch_array();if($pwd==$row['password']){$_SESSION['nickname']=$row['nickname'];$_SESSION['id']=$row['custom_id'];$_SESSION['sex']=$row['sex'];echo "<script>location.href='index.php'</script>";} else {echo "<script>alert('密码有误!');</script>";echo "<script>location.href='login.php'</script>";}}//关闭数据库连接$conn->close();
}
?>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>我的登录页面</title>
<script>function login(){var nickname=document.loginform.nickname.value;var pwd=document.loginform.pwd.value;if(nickname==''){alert('请输入呢称!');return false;}if(pwd==''){alert('请输入密码!');return false;}return true;}
</script>
<style>a { color:#00f;text-decoration: none;font-size:14px;}img {border-width: 0px 0px 0px 0px;}#middle {position: relative;background-color: #cccccc;}#fm {position: absolute;top:100px;left:150px;}#fm h1{color:red;}#fm p{color:blue;}#logintable {background-color: #ffffff;margin-right:40px;}#logintable h1{color:red;}.input_label{color:blue;font-size:20px;font-weight: bold;padding-left:40px;}.input{border:solid 1px blue;font-size:16px;height:30px;width:240px;}.button{background-color: blue;color:white;font-size:18px;font-weight:bold;height:30px;width:240px;border-width:0px;}
</style>
</head>
<body>
<div align="center">
<iframe src='top.html' style='border:none;width:1020px; margin-bottom:-10px;'>
</iframe>
</div><div align="center">
<!--登录表单-->
<table width='1000' height='500' id='middle'><tr><td><div id='fm'><h1>省钱、省力、省时间</h1><p>限时抢购、特惠热卖、配送上门、满百包邮</p><img src='image\login.png' width='160' height='160' ></div><table width='430' height='360' align='right' id='logintable'><form name='loginform' action='' method='post' onsubmit="return login()"><caption><h1>跳蚤市场用户登录</h1></caption><tr height='20'><td colspan="3"></td></tr><tr><td><span class='input_label'>呢称</span></td><td colspan='2'><input type='text' name='nickname' class='input'></td></tr><tr><td><span class='input_label'>密码</span></td><td colspan='2'><input type='password' name='pwd' class='input'></td></tr><tr><td colspan='3' align='center'><input type='submit' value='登录' class='button'></td></tr><tr align='center'><td width="20%"><a href="index.php">首页</a></td><td><a href="logout.php">退出</a></td><td><a href="register.php">注册</a></td></tr></form></table></td> </tr>
</table>
</div><div align="center"><iframe src='bottom.html' style='border:none;width:1020px; margin-bottom:-10px;'>
</div>
</body>
</html>
3. 头部
top.html 代码 如下所示:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>网站头部</title>
</head>
<style>#top{position: relative;background-color:#ccc;height:100px;}#title_1{position:absolute;top:10px;left:200px;color:red;font-size:48px;}#title_2{position:absolute;top:10px;left:400px;color:red;font-size:64px;}#title_3{position:absolute;top:10px;left:600px;color:red;font-size:48px;}#title_4{position:absolute;top:10px;left:800px;color:red;font-size:64px;}#login_reg{height:100px;text-align: right;}a { font-size:16px;text-decoration:none; padding-right:20px;}</style>
<body>
<div id='top'><div id='login_reg'><a href='login.php' target='_parent'>登录</a> <a href='register.php' target='_parent'>注册</a></div><span id='title_1'>跳</span><span id='title_2'>蚤</span><span id='title_3'>市</span><span id='title_4'>场</span><table width='980' align='center' border='0'><tr align="center"><td><a href="index.php" target='_parent'>首页</a></td><td><a href="publish_sell.php" target='_parent'>发布出售信息</a></td><td><a href="publish_buy.php" target='_parent'>发布求购信息</a></td><td><a href="product.php" target='_parent'>商品管理</a></td><td><a href="shopping_cart.php" target='_parent'>我的购物车</a></td></tr></table>
</div>
</body>
</html>
4 . 底部
bottom.html 代码如下所:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>网站底部</title>
<style>#bottom{background-color:#ccc;padding:20px;color:blue;font-size:16px;}.footer-a{padding-left:30px;}
</style>
</head>
<body>
<div id='bottom'><div align='center' id=''><span class='footer-a'>我要投诉</span><span class='footer-a'>|</span><span class='footer-a'>联系我们</span><span class='footer-a'>|</span><span class='footer-a'>版权所有</span></div><p align='center'>制作者:***,制作日期:2023年11月15日</p>
</div></body>
</html>
5. 退出
logout.php 代码如下:
<?php
session_start();
session_destroy();
echo "<script>location.href='index.php'</script>";
?>
相关文章:
登录功能设计(php+mysql)
一 登录功能 1. 创建一个登录页面(login.php),包含一个表单,用户输入用户名和密码。 2. 在表单的提交事件中,使用PHP代码处理用户输入的用户名和密码。 3. 首先,连接MySQL数据库。然后&a…...
从0开始学习Linux——远程连接工具
往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 Linux 远程连接工具是指用于从远程计算机连接到 Linux 系统并进行操作的各种工具。它们可以帮助管理员或…...
Java线程6种生命周期及转换
多线程技术是我们后端工程师在面试的时候必问的一个知识点,今天就来盘点一下多线程的相关知识, 先来说下进程,线程及线程的生命周期: 进程:进程就是正在进行中的程序,是没有生命的实体,只有在运…...
关于STM32在代码中的而GPIO里面的寄存器(ODR等)不需要宏定义的问题
1.GPIO为什么需要宏定义地址 在 STM32 这样的微控制器中,硬件寄存器的地址是固定的并且特定于每个外设(比如 GPIOA、GPIOB 等)。为了方便代码访问这些硬件寄存器,我们通常会使用宏定义来指定每个外设的基地址。这样做有几个理由&a…...
【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十七章 交叉编译QT工程
iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…...
高效率的快捷回复软件 —— 客服宝聊天助手
在电商行业日益繁荣的今天,高效的客户沟通对于企业的成功至关重要。无论是电商平台、居家客服还是其他各类客服行业,都需要一款强大的工具来提升工作效率。今天,我们就来介绍一款高效率的快捷回复软件 —— 客服宝聊天助手。 一、跨平台跨店铺…...
Node.js + MongoDB + Vue 3 全栈应用项目开发
🌈个人主页:前端青山 🔥系列专栏:node.js篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来node.js篇专栏内容:Node.js MongoDB Vue 3 全栈应用项目开发 在前几篇文章中,我们已经为 Node.j…...
【云原生开发】如何通过client-go来操作K8S集群
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
CSS基础知识六(浮动的高度塌陷问题及解决方案)
目录 1.浮动高度塌陷概念 2.下面是几种解决高度塌陷的几种方案: 解决方案一: 解决方案二: 解决方案三: 1.浮动高度塌陷概念 在CSS中,高度塌陷问题指的是父元素没有正确地根据其内部的浮动元素或绝对定位元素来计…...
开源模型应用落地-glm模型小试-glm-4-9b-chat-vLLM集成(四)
一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异&a…...
.net为什么要在单独的项目中定义扩展方法?C#
使用 扩展方法(Extension Methods) 和创建 扩展类(Extension Class) 在 C# 中有几个特定的目的,主要是为了提高代码的可扩展性、灵活性和可读性。让我们来详细解释这些概念以及为什么扩展类需要是静态的。 为什么使用…...
动态规划 —— dp 问题-打家劫舍II
1.打家劫舍II 题目链接: 213. 打家劫舍 II - 力扣(LeetCode)https://leetcode.cn/problems/house-robber-ii/ 2. 题目解析 通过分类讨论,将环形问题转换为两个线性的“打家劫舍|” 当偷第一个位置的时候,rob1在&#…...
Java基础-组件及事件处理(上)
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 Swing 概述 MVC 架构 Swing 特点 控件 SWING UI 元素 JFrame SWING 容器 说明 常用方法 示例&a…...
Python实例:爱心代码
前言 在编程的奇妙世界里,代码不仅仅是冰冷的指令集合,它还可以成为表达情感、传递温暖的独特方式。今天,我们将一同探索用 Python 语言绘制爱心的神奇之旅。 爱心,这个象征着爱与温暖的符号,一直以来都在人类的情感世界中占据着特殊的地位。而通过 Python 的强大功能,…...
图解大模型训练系列:序列并行3,Ring Attention
在序列并行系列中,我们将详细介绍下面四种常用的框架/方法: Megatron Sequence Parallelism:本质是想通过降低单卡激活值大小的方式,尽可能多保存激活值,少做重计算,以此提升整体训练速度,一般…...
pyspark基础准备
1.前言介绍 学习目标:了解什么是Speak、PySpark,了解为什么学习PySpark,了解课程是如何和大数据开发方向进行衔接 使用pyspark库所写出来的代码,既可以在电脑上简单运行,进行数据分析处理,又可以把代码无缝…...
Netty报错
问题:因客户反馈Netty版本低,影响性能,建议提升。于是,我将所有Netty版本从4.1.82.Final到4.1.114.Final后,报下面的错误,java.lang.NoClassDefFoundError: io/netty/util/Recycler$EnhancedHandle…...
Kafka 之顺序消息
前言: 在分布式消息系统中,消息的顺序性是一个重要的问题,也是一个常见的业务场景,那 Kafka 作为一个高性能的分布式消息中间件,又是如何实现顺序消息的呢?本篇我们将对 Kafka 的顺序消息展开讨论。 Kafk…...
Kafka 之批量消息发送消费
前言: 前面我们分享了 Kafka 的一些基础知识,以及 Spring Boot 集成 Kafka 完成消息发送消费,本篇我们来分享一下 Kafka 的批量消息发送消费。 Kafka 系列文章传送门 Kafka 简介及核心概念讲解 Spring Boot 整合 Kafka 详解 Kafka Kafka…...
【大数据学习 | kafka】kafka的偏移量管理
1. 偏移量的概念 消费者在消费数据的时候需要将消费的记录存储到一个位置,防止因为消费者程序宕机而引起断点消费数据丢失问题,下一次可以按照相应的位置从kafka中找寻数据,这个消费位置记录称之为偏移量offset。 kafka0.9以前版本将偏移量信…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...
高保真组件库:开关
一:制作关状态 拖入一个矩形作为关闭的底色:44 x 22,填充灰色CCCCCC,圆角23,边框宽度0,文本为”关“,右对齐,边距2,2,6,2,文本颜色白色FFFFFF。 拖拽一个椭圆,尺寸18 x 18,边框为0。3. 全选转为动态面板状态1命名为”关“。 二:制作开状态 复制关状态并命名为”开…...
