登录功能设计(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以前版本将偏移量信…...

实景三维赋能森林防灭火指挥调度智慧化
森林防灭火工作是保护森林资源和生态环境的重要任务。随着信息技术的发展,实景三维技术在森林防灭火指挥调度中的应用日益广泛,为提升防灭火工作的效率和效果提供了有力支持。 一、森林防灭火面临的挑战 森林火灾具有突发性强、破坏性大、蔓延速度快、…...

【C++课程学习】:string的模拟实现
🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一.string的主体框架: 二.string的分析: 🍔构造函数和析构函数&a…...

Linux(VMware + CentOS )设置固定ip
需求:设置ip为 192.168.88.130 先关闭虚拟机 启动虚拟机 查看当前自动获取的ip 使用 FinalShell 通过 ssh 服务远程登录系统,更换到 root 用户 修改ip配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 重启网卡 systemctl restart network …...

安卓 android studio各版本下载地址(官方)
https://developer.android.google.cn/studio/archive 别用中文,右上角的语言切换成英文...

如何在一个 Docker 容器中运行多个进程 ?
在容器化的世界里,Docker 彻底改变了开发人员构建、发布和运行应用程序的方式。Docker 容器封装了运行应用程序所需的所有依赖项,使其易于跨不同环境一致地部署。然而,在单个 Docker 容器中管理多个进程可能具有挑战性,这就是 Sup…...

poetry 配置多个cuda环境心得
操作系统:ubuntu22.04 LTS python版本:3.12.7 最近学习了用poetry配置python虚拟环境,当为不同的项目配置cuda时,会遇到不同的项目使用的cuda版本不一致的情况。 像torch 这样的库,它们会对cuda-toolkit有依赖&…...

网络编程入门
目录 1.网络编程入门 1.1 网络编程概述【理解】 1.2 网络编程三要素【理解】 1.3 IP地址【理解】 1.4InetAddress【应用】 1.5端口和协议【理解】 2.UDP通信程序 2.1 UDP发送数据【应用】 2.2UDP接收数据【应用】 2.3UDP通信程序练习【应用】 3.TCP通信程序 3.1TCP…...

Linux-socket详解
Linux-socket详解_socket linux-CSDN博客...

SQL Server 2022安装要求(硬件、软件、操作系统等)
SQL Server 2022安装要求 1、硬件要求2、软件要求3、操作系统支持4、Server Core 支持5、跨语言支持6、磁盘空间要求 1、硬件要求 以下内存和处理器要求适用于所有版本的 SQL Server: 组件要求存储SQL Server 要求最少 6 GB 的可用硬盘驱动器空间。 磁盘空间要求随…...

“众店模式”:创新驱动下的商业新生态
在数字化浪潮的推动下,传统商业模式正经历着前所未有的转型。“众店模式”作为一种新兴的商业模式,以其独特的商业逻辑和创新的玩法,为商家和消费者构建了一个共赢的商业新生态。 一、“众店模式”的核心构成 “众店模式”的成功࿰…...