基于php的用户登录实现(v2版)(持续迭代)

目录

版本说明

数据库连接

登录页面:login.html

登录处理实现:login.php

用户欢迎页面:welcome.php

密码修改页面:change_password.html

 修改执行:change_password.php

用户注册页面:register.html

注册执行:DoRegister.php


版本说明

v2实现功能:

数据库连接(*用户匹配)

用户登录(*前后端判断输入是否为空(弹窗))

用户注册(*前后端判断注册用户是否是新/旧用户(弹窗))

欢迎页面(*欢迎用户)

用户密码修改

用户注销(*返回登录页)

数据库连接

基于php的MySQL数据库联动代码模板

属于公有文件,可用文件包含:include 'session_conn.php';

(以下代码都是)

登录页面:login.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登录</title><style type="text/css">form{position: absolute;top: 20%;left: 39%;     }/* 控制input:name=login的元素居中 */input[name='login']{/* 配置其为块级元素 */width: 173px;display: block;margin-left: 28%;margin-top: 3%;}input[name='register']{/* 配置其为块级元素 */width: 173px;display: block;margin-left: 28%;margin-top: 3%;}  </style><script type="text/javascript">function redirectToPage(){window.location.href = 'register.html';}function checkForm(form){if(form.username.value == "" || form.username.value == null){//表单名.文本域名.value == ""alert("用户名不能为空");form.username.focus();// 验证完用户名后,如果没有填写,会弹出alert提示,并自动把光标定位到username的输入框return false;     }if(form.password.value == "" || form.password.value == null){alert("密码不能为空");form.password.focus();return false;       }return true;}</script>
</head><body>  <form action="login.php" method="post">  <!-- onsubmit事件在表单提交时触发 --><!-- fieldset标签:表单分区/分组--><fieldset><legend>用户登录-php登录系统测试</legend><ul><li><label>用户名:</label><input type="text" name="username"/></li><li><label>密&emsp;码:</label><input type="password" name="password"/></li><label></label><input  type="submit" name="login" value="登录" onclick="checkForm(form)" />                          <input type="button"  name="register" value="注册"  onclick="redirectToPage()"/>                 </ul></fieldset></form>  
</body>
</html>

登录处理实现:login.php

*注释部分用于调测,可忽略。

<?php
include 'session_conn.php';$username = htmlspecialchars($_POST['username']);   //使用这个函数将用户名转为html实体
$password = md5($_POST['password']);  // MD5加密$conn = mysqli_connect($host,$db_username,$db_pwd,$db_name);     //打开一个mysql连接
if(!$conn){die('连接数据库失败!请检查数据库是否开启'.mysqli_connect_error());     //die()输出一条消息并结束脚本
}
else{if(isset($username) && !empty($username)){if(isset($_POST['password']) && !empty($_POST['password'])){$check_query = mysqli_query($conn,"select * from login_user where username = '$username' limit 1");$arr = mysqli_fetch_assoc($check_query);   //获取结果集作为关联数据if($password == $arr['password']){if($arr){$_SESSION['username'] = $username;$_SESSION['id'] = $arr['id'];echo "<script language = 'javascript'>;location = 'welcome.php'</script>";}}else{echo "<script language = 'javascript'>alert('账户或密码错误');location = 'login.html'</script>";}}else{echo "<script language = 'javascript'>alert('请输入密码信息。');location = 'login.html'</script>";}    }else{  echo "<script language = 'javascript'>alert('请完善登录信息!');location = 'login.html'</script>";}} 
//mysqli_free_result($check_query);//释放内存
//mysqli_close($conn);//关闭连接

用户欢迎页面:welcome.php

*注释部分用于调测,可忽略。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>welcome</title><style>.table{text-align: center;width: 70%;padding: 15px;background-color: skyblue;border: 5px solid green;border-collapse: collapse;margin-left: 17%;}input[type='button']{margin-left: 50%;}.change_password{margin-left: 70%;}</style><script>function redirectToPage(){window.location.href = "login.html";}</script></head><body>
<br/><br/><br/><br/><br/><br/><br/><br/><?php include 'session_conn.php';   //session引入             if(!isset($_SESSION['id'])){ echo "<script language = 'javascript'>alert('请先登录');location='login.html</script>";//echo '登录超时';exit();}else{$username = $_SESSION['username'];$conn = mysqli_connect($host,$db_username,$db_pwd,$db_name);if(!$conn){die("数据库连接失败!请检查数据库是否开启".mysqli_connect_errno());}else{if(isset($_SESSION['username']) && $_SESSION['username'] == true){echo "<h2 class='table'>登录成功,欢迎用户:".$username."</h2>";echo "<a class = 'change_password' href = 'change_password.html'/>修改密码</a>";}else{$_SESSION['username'] = false;die('请登录');}}echo " <input type='button' name='back_login' value='返回登录' onclick='redirectToPage()'/>";echo "<a href = 'close_login.php'/>用户注销</a>";//mysqli_free_result($check_query);    //释放内存//mysqli_close($conn);    //关闭连接      }          ?> 
</body>
</html>

密码修改页面:change_password.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>账户修改</title><style type="text/css">.title{text-align: center;}input[type='password']{margin-left:auto ;}</style><script type="text/javascript">function redirectToPage(){window.location.href='login.html';}function check(form){if(form.OldPassword.value == "" || form.OldPassword.value == null){alert("请输入原密码");form.OldPassword.focus();return false;               }if(form.NewPassword.value == "" || form.NewPassword.value == null){alert("请输入新密码");form.NewPassword.focus();return false;               }if(form.ConfirmNewPassword.value == "" || form.ConfirmNewPassword.value == null){alert("请确认密码");form.ConfirmNewPassword.focus();return false;}return true;}   </script>
</head>
<body><div class="box"><div class="title">change your password</div><form action="change_password.php" method="post">      <table class="change_password"><tr><th>用户名:</th><td><input type="text" name="username"/></td></tr><tr><th>原密码:</th><td><input type="password" name="OldPassword"></td></tr><tr><th>新密码:</th><td><input type="password" name='NewPassword' /></td></tr><tr><th>确认密码:</th><td><input type="password" name="ConfirmNewPassword" /></td></tr></table><input type="submit" name='confirm' value="确认修改"  onclick="check(form)" /><input type="button" name='back' value="返回登录"  onclick="redirectToPage()"/>  </form>
</body>
</html>

 修改执行:change_password.php

*注释部分用于调测,可忽略。

<?php
include 'session_conn.php';$change_password=[];$change_password['username'] = htmlspecialchars($_POST['username']);$change_password['old_password'] = md5($_POST['OldPassword']);  $change_password['new_password'] = md5($_POST['NewPassword']);$change_password['confirm_NewPassword'] = md5($_POST['ConfirmNewPassword']);$NewPasswordConn = mysqli_connect($host,$db_username,$db_pwd,$db_name);$Old_password = $_POST['OldPassword'];$New_password = $_POST['NewPassword'];$Confirm_NewPassword = $_POST['ConfirmNewPassword'];$NewPasswordConn = mysqli_connect($host,$db_username,$db_pwd,$db_name);// echo $old_password;if(!$NewPasswordConn){die('数据库连接失败!'.mysqli_connect_error());// echo "数据库连接失败";}else{if(isset($Old_password) && !empty($Old_password)){if(isset($New_password)  && !empty($New_password)){if(isset($Confirm_NewPassword) && !empty($Confirm_NewPassword)){if( $Confirm_NewPassword == $New_password){// $new_password = $change_password['new_password'];$MD5_NewPassword = md5($_POST['NewPassword']);// $username = $change_password['username'];$username = htmlspecialchars($_POST['username']);$sql_update = "update login_user set password = '$MD5_NewPassword' where username = '$username' ";if(mysqli_query($NewPasswordConn,$sql_update)){echo "<script language='javascript'>alert('修改成功,请重新登录!');location='login.html'</script>";}else{echo "<script language='javascript'>alert('密码修改失败,请重新修改!');location='change_password.html'</script>";}}else{echo "<script language='javascript'>alert('密码确认错误');location='change_password.html'</script>";}                   }else{echo "<script language='javascript'>alert('请确认密码!');location = 'change_password.html'</script>";}} else{echo "<script language='javascript'>alert('请输入新密码!');location='change_password.html'</script>";}       }else{echo "<script language='javascript'>alert('请输入原密码信息!');location='change_password.html'</script>";}}   
?>

用户注册页面:register.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>新用户注册</title>
</head>
<style type='text/css'>.title{text-align:center;line-height: 8;}.login {display: block;position: absolute;transform: translate(-50%,-61.8%);left: 56%;top:20%;width: 450px;border-radius:8px ;         /*登陆框4个角设置为圆角*/background:rgba(255, 255,255, 0.9);    /*白色背景,不透明度90%  */}input[type='submit']{width: 173px;display: block;margin-left: auto;/* 输入框与表头之间的距离 */margin-top: 3%;}</style>
<script>function redirectToPage(){window.location.href = 'login.html';}
</script><body><div class='box'><div class="title">new user register</div><form action="DoRegister.php"  method="post"><table class="login"><tr><th>用户名:</th><td><input type="text"  name="username" required/></td></tr><tr><th>密码:</th><td><input type="password"  name="password"/></td></tr><tr><th>确认密码:</th><td><input type="password"  name="repassword" /></td></tr><tr><th></th><td><input type="submit"  value="注册完成"/></td><td><input type="button"  value="返回登录" onclick="redirectToPage()"/></td></tr></table></form></div></body>
</html>

注册执行:DoRegister.php

*注释部分用户调测,可忽略。

<?php
// 连接参数
include 'session_conn.php';
$dsn = "$dbms:host=$host;dbname=$db_name";   //$dsn是PDO连接字符串,包括数据库类型、主机名、数据名称和字符集try{$conn = new PDO($dsn,$db_username,$db_pwd);
}
catch(PDOException $e){echo '连接失败'.$e->getMessage();    //getMessage定位详细报错信息
}// 接受前端数据
$data=[];
$data['username'] = htmlspecialchars($_POST['username']);
$username = $data['username'];$data['password'] = md5($_POST['password']); 
//$password= $data['password']; $data['repassword'] = md5($_POST['repassword']);
//$repassword = $data['repassword'];//print_r($data);
$conn = mysqli_connect($host,$db_username,$db_pwd,$db_name);// echo "var_dump(die($data(['password'])))";
// echo "var_dump(die($data(['repassword'])))";// 准备SQL语句
// $sql_select = "select * from login_user where username = '$username';";
$sql_select = "select * from login_user where username = '$username' limit 1";  
$sql_id = "select id from login_user";
// $select = $conn->prepare($sql_select);
// $selelct -> execute();   //执行sql语句
// $arr = $select -> fetch(PDO::FETCH_BOUN  
$result_select = mysqli_query($conn,$sql_select);
//$result_new_id = mysqli_num_rows($result_id);
//$result_new_id = $result_id + 1; if(mysqli_num_rows($result_select) != 0){ echo  "<script language='javascript'>alert('该用户已存在,请更换用户名!');location='register.html'</script>";}else{//先判断是否存在在判断是否为空if(!empty($data['password']) && !empty($data['repassword'])){//die ($data['password']);if($data['repassword'] === $data['password']){    //判断两次密码是否相同$password = $data['repassword'];                    $result_sql_id = mysqli_query($conn,$sql_id);                     $result_id = mysqli_num_rows($result_sql_id);                      $result_new_id = $result_id + 1;                      $sql_insert = "insert into login_user(id,username,password) values('$result_new_id','$username','$password');";if(mysqli_query($conn,$sql_insert)){//echo "注册成功";echo "<script language='javascript'>alert('注册成功请返回登录!');location='login.html'</script>";}else{echo "<script language='javascript'>alert('注册失败请重新注册!');location='register.html'</script>";}//$sql_insert = "insert into login_user valuse(NULL,".$data['username'].",".$dsata['md5(password)'].")";    //插入SQL语句}                //}else{echo "<script language='javascript'>alert('确认密码错误!');location='register.html'</script>";  }                           }else{//echo '密码:'.$data['password']; echo "<script language='javascript'>alert('请完善密码。');location='register.html'</script>";  }      
}

待开发:

用户密码修改 :
基于php的用户登录实现(v2版)(持续迭代)-CSDN博客

用户密码查找

引入sessio机制

CSS样式调整

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/733708.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

远程连接Linux系统

图形化、命令行 对于操作系统的使用&#xff0c;有2种使用形式&#xff1a; 图形化页面使用操作系统 图形化&#xff1a;使用操作系统提供的图形化页面&#xff0c;以获得图形化反馈的形式去使用操作系统。 以命令的形式使用操作系统 命令行&#xff1a;使用操作系统提供的各…

React-路由导航

1.声明式路由导航 1.1概念 说明&#xff1a;声明式导航是指通过在模版中通过<Link/>组件描述出要跳转到哪里去&#xff0c;比如后台管理系统的左侧菜单通常使用这种方式进行。 import {Link} from "react-router-dom" const Login()>{return (<div>…

物联网云原生云边协同

文章目录 一、物联网平台设计1.物联网平台设计2.物联网平台实现 二、部署环境1.节点配置2.版本信息 三、物联网平台部署1.部署 Kubernetes 集群2.部署 KubeEdge3.部署 ThingsBoard 集群4.部署 ThingsBoard Edge4.1.创建 Edge 实例4.2.部署 PostgreSQL4.3.创建数据库4.4.部署 Th…

在Blender中清理由Instant-NGP等几何学习技术生成的网格

使用布尔运算: 创建一个大的立方体或其他简单几何体包裹住全部网格。使用布尔修改器对两个网格进行“差集”运算。这将移除超出包裹体之外的多余网格部分。 手动选择并删除: 进入编辑模式&#xff08;按Tab键&#xff09;。按A键取消选择所有顶点。按B键并拖动以选择您想要删除…

11. 搭建较通用的GoWeb开发脚手架

文章目录 导言一、加载配置二、初始化日志三、初始化MySQL连接四、初始化Redis连接五、初始化gin框架内置的校验器使用的翻译器六、注册路由七、 启动服务八、测试运行九&#xff1a;注意事项 代码地址&#xff1a;https://gitee.com/lymgoforIT/bluebell 导言 有了前述知识的…

最简单的基于 FFmpeg 的内存读写的例子:内存转码器

最简单的基于 FFmpeg 的内存读写的例子&#xff1a;内存转码器 最简单的基于 FFmpeg 的内存读写的例子&#xff1a;内存转码器正文源程序结果工程文件下载参考链接 最简单的基于 FFmpeg 的内存读写的例子&#xff1a;内存转码器 参考雷霄骅博士的文章&#xff0c;链接&#xf…

Chrome中如何导出和导入书签

导出书签 如下图所示&#xff1a; 右上角三点->书签和清单->书签管理器->右上角三点->导出书签 然后你选择保存地址即可。打开后如下&#xff1a; 导入书签 如下图所示&#xff1a; 右上角三点->书签和清单->导入书签和设置->选择以前导出的书签&…

【Node.js】-闲聊:前端框架发展史

前端框架的发展史是一个不断演进和创新的过程&#xff0c;旨在提高开发效率、优化用户体验&#xff0c;并推动前端技术的不断发展。以下是前端框架发展的主要阶段和关键里程碑&#xff1a; 早期阶段&#xff1a; 在这个阶段&#xff0c;前端主要由HTML、CSS和JavaScript等基础技…

LLM Drift(漂移), Prompt Drift Cascading(级联)

原文地址&#xff1a;LLM Drift, Prompt Drift & Cascading 提示链接可以手动或自动执行&#xff1b;手动需要通过 GUI 链构建工具手工制作链。自治代理在执行时利用可用的工具动态创建链。这两种方法都容易受到级联、LLM 和即时漂移的影响。 2024 年 2 月 23 日 在讨论大型…

什么是自动化测试?什么情况下使用?

什么是自动化测试? 自动化测试是指把以人为驱动的测试行为转化为机器执行的过程。实际上自动化测试往往通过一些测试工具或框架&#xff0c;编写自动化测试脚本&#xff0c;来模拟手工测试过程。比如说&#xff0c;在项目迭代过程中&#xff0c;持续的回归测试是一项非常枯燥…

如何在Mapbox GL中处理大的GEOJSON文件

Mapbox GL可以将 GeoJSON 数据由客户端(Web 浏览器或移动设备)即时转换为 Mapbox 矢量切片进行显示和处理。本文的目的是教大家如何有效加载和渲染大型 GeoJSON 源,并优化渲染显示速度,增强用户体验,减少客户端卡顿问题。本文以Mapbox 为例,至于其它框架原理大致相同,可…

【HarmonyOS】ArkTS-枚举类型

枚举类型 枚举类型是一种特殊的数据类型&#xff0c;约定变量只能在一组数据范围内选择值 定义枚举类型 定义枚举类型&#xff08;常量列表&#xff09; enum 枚举名 { 常量1 值, 常量2 值,......}enum ThemeColor {Red #ff0f29,Orange #ff7100,Green #30b30e}使用枚举…

报错Importing ArkTS files to JS and TS files is not allowed. <etsLint>

ts文件并不支持导入ets文件&#xff0c;为了方便开发应用卡片&#xff0c;entryformAbility创建的时候默认是ts文件&#xff0c;这里只需要把ts文件改成ets便可以轻松的导入所需要的ets即可 我创建了一个鸿蒙开发的交流群&#xff0c;喜欢的鸿蒙朋友可以扫码或者写群号&#xf…

微服务自动化管理初步认识与使用

目录 一、ETCD 1.1、ETCD简介 对于实施工程师&#xff1a; 1.2、特点 1.3. 使用场景 1.4、 关键字 1.5 工作原理 二、ETCD的安装 2.1、下载路径 2.2、介绍 2.3、具体操作 安装服务端 安装etcd客户端 测试 三、ETCD使用 3.1、前奏具体操作 3.2、 常用操作 一、ET…

ROS——Ubuntu环境搭建

Ubuntu安装 首先下载 Ubuntu 的镜像文件&#xff0c;链接如下:ubuntu-releases-20.04安装包下载_开源镜像站-阿里云ubuntu-releases-20.04安装包是阿里云官方提供的开源镜像免费下载服务&#xff0c;每天下载量过亿&#xff0c;阿里巴巴开源镜像站为包含ubuntu-releases-20.04…

【Android 内存优化】KOOM 快手开源框架线上内存监控方案-源码剖析

文章目录 前言OOMMonitorInitTask.INSTANCE.initOOMMonitor.INSTANCE.startLoopsuper.startLoopcall() LoopState.Terminate dumpAndAnalysisdumpstartAnalysisService回到startLoop方法总结 前言 这篇文章主要剖析KOOM的Java层源码设计逻辑。 使用篇请看上一篇: 【Android …

使用阿里云服务器搭建网站简单吗?超简单教程

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

Pytorch学习 day08(最大池化层、非线性激活层、正则化层、循环层、Transformer层、线性层、Dropout层)

最大池化层 最大池化&#xff0c;也叫上采样&#xff0c;是池化核在输入图像上不断移动&#xff0c;并取对应区域中的最大值&#xff0c;目的是&#xff1a;在保留输入特征的同时&#xff0c;减小输入数据量&#xff0c;加快训练。参数设置如下&#xff1a; kernel_size&#…

Linux网络基础2之协议

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 1.协议 1.序列化与反序列换 2.协议定制 二…

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2

KEIL 5.38的ARM-CM3/4 ARM汇编设计学习笔记10 - STM32的SDIO学习2 一、问题回顾二、本次的任务三、 需要注意的问题3.1 Card Identification Mode时的时钟频率3.2 CMD0指令的疑似问题3.3 发送带参数的ACMD41时要注意时间时序和时效3.4 CPSM的指令发送问题3.5 调试过程中的SD卡的…