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

目录

版本说明

数据库连接

登录页面:login.html

登录处理实现:login.php

用户欢迎页面:welcome.php

用户注册页面:register.html

注册执行:DoRegister.php


版本说明

v1实现功能:

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

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

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

欢迎页面(*欢迎用户)

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

数据库连接

基于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>

用户注册页面: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>";  }      
}

待开发:

用户密码修改

用户密码查找

引入sessio机制

CSS样式调整

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

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

相关文章

SOCKS5代理与网络安全的舞蹈

在这个信息爆炸的时代&#xff0c;网络安全成为了每个网民乃至每个软件工程师的头等大事。今天&#xff0c;我们要聊的是如何使用SOCKS5代理和代理IP来保护我们的网络安全&#xff0c;同时还不失趣味性。这听起来可能有点枯燥&#xff0c;但别担心&#xff0c;我们会用一种轻松…

自定义限流注解

自定义注解 /*** 速率限制注解** author: 张定辉* date: 2024/3/5 21:29* description: 速率限制注解*/ Target({ElementType.TYPE,ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface RateLimit {/*** SPEL表达式* <p>* 1.使用方法的基本类型参…

SpringAOP面向切面编程-代理

目录 1.静态代理 2.动态代理 代理在开发中实现的方式具体有两种&#xff1a;静态代理&#xff0c;[动态代理技术] 1.静态代理 主动创建代理类 public class CalculatorStaticProxy implements Calculator {// 将被代理的目标对象声明为成员变量private Calculator target;…

面试问答之MySQL数据库进阶

文章目录 &#x1f412;个人主页&#xff1a;信计2102罗铠威&#x1f3c5;JavaEE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380; MySQL架构&#x1f415;数据库引擎&#x1f415; InnoDB存储存储引擎&#x1f415;MYISAM &#x1f3e8;索引&#x1f415;哪些情况需要创建…

vue3+element-plus el-input 自动获取焦点

虽然element有提供input的autofocus属性&#xff0c;但是当我们第二次进入页面就会发现autofocus已经不再生效&#xff0c;需要通过onMounted去触发input的focus解决这个问题。 1.先给el-input绑定一个ref&#xff1a;<el-input ref"inputRef" v-model"inp…

景联文科技:专业提供高质量大语言模型训练数据

2024年&#xff0c;数字经济被再次写入政府工作报告中&#xff0c;报告指出要深化大数据、人工智能等研发应用&#xff0c;打造具有国际竞争力的数字产业集群。 大模型作为生成式人工智能的基础&#xff0c;日益成为国际科技竞争的焦点。人大代表杨剑宇指出&#xff0c;尽管我国…

008-slot插槽

slot插槽 1、插槽 slot 的简单使用2、插槽分类2.1 默认插槽2.2 具名插槽2.3 作用域插槽 插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&…

老阳分享:视频号带货的四大技巧

视频号带货作为新兴的电商模式&#xff0c;在微信这个庞大的社交平台上展现出了巨大的潜力。要想在视频号带货领域取得成功&#xff0c;需要掌握一定的技巧。本文将为您详细解析视频号带货的四大技巧&#xff0c;感兴趣的朋友一起去看看吧。 一、内容创新 内容创新是视频号带货…

【深度学习笔记】5_11 残差网络ResNet

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 5.11 残差网络&#xff08;ResNet&#xff09; 让我们先思考一个问题&#xff1a;对神经网络模型添加新的层&#xff0c;充分训练后的…

Express框架的产生

Express框架的产生&#xff0c;解决的痛点是什么&#xff1f; 1.优化Node.js在Web的开发 Express框架是一个基于Node.js的Web应用程序开发框架&#xff0c;它的产生主要是为了解决Node.js在Web开发中的一些痛点。 在Node.js出现之前&#xff0c;Web开发主要是基于传统的后端…

springboot项目集成,项目流程概述

一、项目介绍 二、项目设计原则 2.1整体原则 2.2持久层 2.3业务逻辑层 具体分析 三、实战 3.1项目搭建 <dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-crypto</artifactId></dependency>&l…

双链表的实现(数据结构)

链表总体可以分为三大类 一、无头和有头 二、单向和双向 三、循环和不循环 从上面分类得知可以组合成8种不同类型链表&#xff0c;其中单链表最为简单&#xff0c;双联表最为复杂&#xff0c;两种链表都实现后其余链表都不成问题。 我们前期博客已将完成了单向无头不循环链表…

基于PHP的景点数据分析系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 关键理论与技术 3 1.1 框架技术 3 1.1.1 QueryList 3 1.1.2 ThinkPHP 3 1.1.3 Amaze UI 3 1.2 数据可视化技术 4 1.3 数据库技术 4 1.4 本章小结 4 2 需求分析 5 2.1 业务流程分析 5 2.2 功能需求分析 5 2.3 用例分析 7 2.4 非功能性需求…

it-tools工具箱

it-tools 是一个在线工具集合&#xff0c;包含各种实用的开发工具、网络工具、图片视频工具、数学工具等 github地址&#xff1a;https://github.com/CorentinTh/it-tools 部署 docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:lat…

gradle 相关

aar 不加 aar 以及 transitive true library可以通过多种格式上传到远程仓库&#xff0c;比如大部分情况下用到的.jar或.aar。当没有指定后缀的话&#xff0c;依赖的时候将会下载它的默认格式&#xff08;由上传方定义&#xff0c;如果没有定义则默认为.jar&#xff09;的Lib…

yolov8多batch推理,nms后处理

0. 背景 在高速公路监控视频场景下&#xff0c;图像分辨率大都是1920 * 1080或者2560 * 1440&#xff0c;远处的物体&#xff08;车辆和行人等&#xff09;都比较小。考虑需要对图像进行拆分&#xff0c;然后把拆分后的数据统一送入模型中&#xff0c;推理的结果然后再做nms&am…

redis centos7 单点搭建

redis centos 安装步骤 下载源文件编译Redis拷贝编译后文件修改配置文件启动redis 下载源文件 wget https://download.redis.io/redis-stable.tar.gz编译Redis tar -xzvf redis-stable.tar.gz cd redis-stable make如果编译成功&#xff0c;你会在src目录中找到几个 Redis 二…

Android Selinux详解[一]---整体介绍

Android 使用安全增强型 Linux (SELinux) 对所有进程强制执行强制访问控制 (MAC)&#xff0c;甚至包括以 Root/超级用户权限运行的进程&#xff08;Linux 功能&#xff09;。 借助 SELinux&#xff0c;Android 可以更好地保护和限制系统服务、控制对应用数据和系统日志的访问、…

【微前端乾坤】 vue2主应用、vue2+webpack子应用,vue3+webpack子应用、vue3+vite子应用的配置

因公司需求 需要将原本vue2iframe 形式的项目改成微前端乾坤的方式。 之前iframe都是直接嵌套到vue2项目的二级目录或者三级目录下的(反正就是要随处可嵌) 用乾坤的原因&#xff1a; 1、iframe嵌套的方式存在安全隐患&#xff1b; 2、项目是联合开发的&#xff0c; 乾坤的方便…

Doris画像存储实践系列二

上一篇: Doris画像存储系列一(https://editor.csdn.net/md/?articleId120416295) 六、画像宽表bitmap倒排表 重复一下bitmap倒排表的优点和缺点 标签类型标签值user_ids性别男1,2性别发3 优点: doris bitmap聚合表在对做用户画像群体计算时很友好,交集/并集/差集因为数据…