PHP注册/登录/发邮件--【强撸项目】

news2024/11/25 0:45:28

强撸项目系列总目录在000集

PHP要怎么学–【思维导图知识范围】

文章目录

    • 本系列校训
    • 本项目使用技术
  • 上效果图
  • phpStudy 设置
  • 导数据库
  • 程序基本流程
  • 项目目录如图:
  • 注册zhuce.html
  • 配套资源
  • 作业:

本系列校训

用免费公开视频,卷飞培训班哈人!打死不报班,赚钱靠狠干!
只要自己有电脑,前后项目都能搞!N年苦学无人问,一朝成名天下知!

本项目使用技术

PHP无类PHP类写法ThinkPHP框架其它框架
*

环境

PHP版本mysql版本运行工具编辑工具
5.4.45+Apache5.5(phpStudy自带)phpStudy2018VSCode

上效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注册,登录两个功能一起,而且都可是完全好用
手机号校验是有的。
验证码不能通过点击刷新,可以用刷新页面的方法,刷新。

phpStudy 设置

网站目录,不能有中文或空格,就乖乖的用C语言能识别的变量名
在这里插入图片描述

导数据库

打开mysql-front 或navicat
注意:数据库名:email 超级用户:root 密码:123456
运行本例附件即可。最后导入数据库成功的截图如下:

在这里插入图片描述

程序基本流程

系统运行起来之后,
登录页面为:
http://localhost/denglu.html
初始帐号为: 用户名:wangaihua 密码 123456
只有这一个用户有数据。(有邮件)
其它的用户需要先注册假定A,然后用其它的用户给这个A发邮件。
然后再用A登陆打开收件箱,即可看到
在这里插入图片描述

项目目录如图:

在这里插入图片描述
颜色方案
在这里插入图片描述

注册zhuce.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<link type="text/css" rel="stylesheet" href="zhuce.css" />
<script type="text/javascript">
function validate(){
  var psd1=document.getElementById('psd1');	
  var psd2=document.getElementById('psd2');
  var psd1Val=psd1.value;
  var psd2Val=psd2.value;
  if(psd1Val!=psd2Val){
	alert("两次输入密码不一致,请重新输入");
	psd2.focus();
	return false;  
  }
}
//更换验证码的函数
function yzmupdate(){
	document.yzm.src="yzm.php?"+Math.random();
}
//document.getElementsByTagName('span')[0].onclick = yzmupdate();
//定义函数创建XMLHttpRequest对象实例
function createXML(){
	var xml=false;
	if(window.ActiveXObject){
		try{xml=new ActiveXObject("Msxml2.XMLHTTP");}
		catch(e){
			try{xml=new ActiveXObject("Microsoft.XMLHTTP");}
			catch(e){
				xml=false;
			}
		}
	}
	else if(window.XMLHttpRequest){
		xml=new XMLHttpRequest;
	}
	return xml;
}
function check(){
	var xml=createXML();
	var emailAddr=document.getElementById('emailaddr').value;
	var url="check.php";
	var postStr="emailaddr="+emailAddr;
	xml.open("POST",url,true);
  xml.setRequestHeader("Content-type", "Application/x-www-form-urlencoded;charset=utf8");
  xml.send(postStr);
  xml.onreadystatechange=function(){
   	if(xml.readyState==4 && xml.status==200){
      if(xml.responseText!=''){
      	alert(xml.responseText);
      }
  	}
	}
}
</script>
<script src="jquery-1.11.3.min.js"></script>
<script type="text/javascript">
	//下面使用jQuerypost方法
	/*function check(){
		var emailaddr=$("#emailaddr").val();
		var res=$.ajax({
			type:"post",
			url:"check.php",
			data:"emailaddr="+emailaddr,
			async:true,
			success:function(result){
				alert(result);
			}
		});
		//alert(res.responseText);//在方法内部使用success和外部使用alert效果一样
	}*/
	//下面使用get方法,check.php中必须改为$_GET
	/*function check(){
		var emailaddr=$("#emailaddr").val();
		var res=$.ajax({
			type:"get",
			url:"check.php?emailaddr="+emailaddr,
			async:true,
			success:function(result){
				alert(result);
			}
			//只能在方法内部使用success,不能在外部使用alert
		});
	}*/
</script>
</head>

<body>
<div class="divshang"></div>
<div class="divzhong">
  <form method="post" onsubmit="return validate()" action="zhuce.php">
    <table width="600" border="0" cellspacing="0" cellpadding="0" align="center">
      <tr>
        <td class="td1">邮件地址:</td>
        <td class="td2">
          <input type="text" name="emailaddr" id="emailaddr" required="required" pattern="[a-zA-Z][a-zA-Z0-9_]{4,16}[a-zA-Z0-9]" onchange="check()" />@163.com
          <p>6~18个字符,包括字母、数字、下划线,字母开头、字母或数字结尾</p>
        </td>
      </tr>
      <tr>
        <td class="td1">密码:</td>
        <td class="td2">
          <input type="password" name="psd1" id="psd1" required="required" pattern="[a-zA-Z0-9!@#$%^&*_]{6,16}" />
          <p>6~16个字符,区分大小写</p>
        </td>
      </tr>
      <tr>
        <td class="td1">确认密码:</td>
        <td class="td2">
          <input type="password" name="psd2" id="psd2" />
          <p>请再次输入密码</p>
        </td>
      </tr>
      <tr>
        <td class="td1">手机号:</td>
        <td class="td2">
          <input type="text" name="phoneno" id="phoneno" pattern="1[3|5|7|8][0-9]{9}" />
          <p>密码遗忘或被盗时,可通过手机短信取回密码</p>
        </td>
      </tr>
      <tr>
        <td class="td1">验证码:</td>
        <td class="td2">
          <input type="text" name="useryzm" id="useryzm"/><img src="yzm.php" name="yzm" id="yzm" align="top" />
          <p>请输入图片中的字符 <span onclick="yzmupdate()">看不清楚?换一张</span></p>
        </td>
      </tr>
      <tr>
        <td class="td1">&nbsp;</td>
        <td class="td2">
          <input type="submit" value="立即注册" />
        </td>
      </tr>
    </table>
  </form>
  </div>
  <div class="divxia"></div>
</body>
</html>

注册的后台:zhuce.php

<?php
  session_start();
  $emailaddr=$_POST['emailaddr'];
  $psd=$_POST['psd1'];
  $psd1=md5($psd);
  $phoneno=$_POST['phoneno']; 
  $zhucedate=date("Y-m-d H:i:s");
  $useryzm=$_POST['useryzm'];
  $yzmchar=$_SESSION['string'];
  if(strtoupper($useryzm)==strtoupper($yzmchar)){
  	echo "尊敬的用户您好,您注册的信息如下:<br />";
  	echo "邮件地址是:$emailaddr<br />";
  	echo "密码是:$psd<br />";
  	echo "手机号码是:$phoneno<br />";
  	echo "你输入的验证码字符是:{$useryzm}<br />";
  	echo "系统生成的验证码字符是:{$yzmchar}<br />";
	  $conn=mysqli_connect('localhost','root','123456','email');
	  $sql="insert into usermsg values('$emailaddr','$psd1','$phoneno','$zhucedate')";
	  if(mysqli_query($conn,$sql)){
	  	echo "注册数据已经写入数据表中<br />";
	  }else{
	  	echo "插入未成功,请检查insert语句<br />";
	  }
	  mysqli_close($conn);
  }else{
  	include 'zhuce.html';
	  echo "<script>";
	  echo "document.getElementById('emailaddr').value='$emailaddr';";
	  echo "document.getElementById('psd1').value='$psd';";
	  echo "document.getElementById('psd2').value='$psd';";
	  echo "document.getElementById('phoneno').value='$phoneno';";
	  
	  echo "document.getElementById('useryzm').placeholder='验证码输入错误,请重新输入';";
	  echo "document.getElementById('useryzm').className='inp';";
	  echo "</script>";
  }
  
 ?>

登录前台denglu.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
	.divw {
	width: 370px;
	height: 200px;
	padding: 50px 0 0;
	margin: 0 auto;
	border: 1px solid #00f;
}

#errormsg {
	width: 200px;
	height: 40px;
	padding: 0;
	margin: 0 auto;
	display: none;
	/*visibility:hidden;*/
	font-size: 10pt;
	color: #f00;
}

#cont {
	width: 320px;
	height: 160px;
	padding: 0;
	margin: 0 auto;
	font-size: 10pt;
	font-family: calibri;
}

#cont p {
	margin: 20px 0;
}

#emailaddr,
#psd {
	width: 180px;
	height: 16px;
	padding: 2px 0;
	margin: 0;
	border: #aaf 1px solid;
	outline:none;
}

input {
	border-radius: 5px;
}
</style>

</head>

<body>
<form method="post" action="denglu.php">
  <div class="divw">
    <div id="errormsg">账号或密码错误,请重新输入</div>
    <div id="cont">
      <p>用户名:<input type="text" name="emailaddr" id="emailaddr" pattern="[a-zA-Z][a-zA-Z0-9_]{4,16}[a-zA-Z0-9]" />@163.com</p>
      <p>&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="password" name="psd" id="psd" />忘了密码?</p>
      <p align="center"><input type="submit" value="  登  录  " />&nbsp;&nbsp;
         <input type="button" value="  注  册  " onclick="window.open('zhuce.html');" /></p>
    </div>
  </div>
</form>
</body>
</html>


登录后台denglu.php

<?php
	
	session_start();
	$emailaddr=$_POST['emailaddr'];
	$_SESSION['emailaddr']=$emailaddr;
	if(isset($_COOKIE[$emailaddr])){
		echo "<script>";
		echo "alert('账号已经锁定,请耐心等待');";
		echo "</script>";
		exit();		
	}
	$psd=md5($_POST['psd']);
	$conn=mysqli_connect('localhost','root','123456','email');
	//对输入的账号进行转义防止SQL注入
	$emailaddr1 = mysqli_real_escape_string($conn, $emailaddr);
	$sql="select * from usermsg where emailaddr='{$emailaddr1}' and psd='{$psd}'";
	if($res=mysqli_query($conn,$sql)){
		$num=mysqli_num_rows($res);
		if($num==0){
			if(isset($_SESSION[$emailaddr])){
				$count=$_SESSION[$emailaddr];
				$count++;
			}else{
				$count=1;
			}
			$_SESSION[$emailaddr]=$count;//将变化后的计数值写入session
			if($count==3){
				setcookie($emailaddr,$emailaddr,time()+1800);//30分钟
				echo "<script>";
				echo "alert('3次输入错误,锁定账号,30分钟后再尝试');";
				echo "</script>";
				exit();
			}else{
				$chance=3-$count;
				echo "<script>";
				echo "alert('你还有{$chance}次机会');";
				echo "</script>";
			}
			include 'denglu.html';
			echo "<script>";
			echo "document.getElementById('errormsg').style.display='block';";
			echo "</script>";
		}else{
			include 'email.php';
		}
	}
?>

其它代码下资源包好了
整体代码在本文资源包里,这里不贴全部了。

配套资源

PHP注册/登录/发消息–【强撸项目】:
https://download.csdn.net/download/dearmite/88084785

作业:

功能没啥可以加的了:
把前台的页面美化美化就行了。比如说,给首页加个底图?
登陆,注册,都可以优化,化妆美颜一下

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

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

相关文章

Oracle物化视图刷新和物化视图日志

Oracle物化视图刷新和物化视图日志 Oracle的物化视图是包括一个查询结果的数据库对像&#xff0c;它是远程数据的的本地副本&#xff0c;或者用来生成基于数据表求和的汇总表。 测试物化视图的刷新&#xff0c;参考物化视图日志&#xff0c;一个源表对应多个物化视图刷新。 物…

【Linux工具篇】项目自动构建化工具-make/Makefile

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 &#x1f4ab…

matlab cross()函数叉乘 计算过程详解

向量叉乘 在数学上&#xff0c;两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。在Matlab中&#xff0c;用函数cross实现。 函数 cross() 格式 C cross(A,B) %若A、B为向量&#xff0c;则返回A与B的叉乘&#xff0c;即CAB&#xff0c;A、B必须是3个…

c#封装bool到cpp

c#那边传一个结构体&#xff0c;结构体里包含两个bool&#xff0c;封送到cpp&#xff0c;结果发现cpp那边读取有问题。一看cpp接收变量的内存&#xff0c;两个bool占的内存都不是一个字节了&#xff0c;再次记录原因。 封送的时候&#xff0c;默认是占4个字节&#xff0c;如果…

Pycharm----导入库文件夹不在py文件的目录下

问题描述&#xff1a; 想在不同目录下导入根目录的包&#xff0c;直接写会报错。如下边object_detect.py在function文件夹下&#xff0c;导入包默认在这个文件下&#xff0c;但我想导入根目录models和utils下的包 解决方法&#xff1a; 将根目录设置为源代码根目录&#xff0…

linux静态库,动态库总结

1.介绍 使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据&#xff0c;这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化&#xff0c;更容易重新编译&#xff…

【Spring Cloud】Hystrix熔断机制

文章目录 前言什么是hystrix的熔断&#xff1f;使用hystrix熔断功能的配置Hystrix 工作原理Hystrix工作流 前言 什么是hystrix的熔断&#xff1f; hystrix熔断主要是指在一定的时间窗口内&#xff0c;当请求的次数达到一定的失败比率后&#xff0c;hystrix就会主动拒绝服务&a…

【图像分割】基于浣熊优化算法COA的Otsu(大津法)多阈值电表数字图像分割 电表数字识别【Matlab代码#52】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】1. 原始COA算法1.1 开发阶段1.2 探索阶段 2. 多阈值Otsu原理3. 部分代码展示4. 仿真结果展示5. 资源获取 【可更换其他算法&#xff0c;获取资源请见文章第5节&#xff1a;资源获取】 1. 原始…

长尾式差分放大电路

3.3.2差分放大电路 电路 条件 静态分析 对共模信号的抑制作用 当产生温度变化时&#xff0c;也类似加入了共模信号&#xff0c;由于负反馈电阻 的存在&#xff0c;会产生如下变化。 对差模信号的放大作用 电路 交流等效电路 具体分析 具有恒流源的差分放大电路 电路 详细分析…

STM32 OLED显示汉字及屏幕滚动(I2C协议)

文章目录 一、任务目标二、材料准备硬件&#xff1a;软件&#xff1a; 三、AHT20温湿度传感器的使用四、OLED的使用1.硬件2.字模汉字编码原理取字模 3.工程4.电路连接5.实验效果 五、总结六、参考资料 一、任务目标 理解OLED屏显和汉字点阵编码原理&#xff0c;使用STM32F103的…

Linux下基本指令 -> ls指令

​ Linux - ls 1 简介2 简介3 语法4 常用选项4.1 -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件4.2 -l 列出文件的详细信息4.3 -d 将目录象文件一样显示&#xff0c;而不是显示其下的文件4.4 -i 输出文件的 i 节点的索引信息4.5 -n 用数字的 UID,GID 代替名称4.…

Qt学习14:Designer设计师

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 Qt项目地址及源码&#xff1a;点击这里 什么是Designer设计师&#xff1f; 简单来说就是通过拖拖拽拽就可以实现窗口上控件的布局。 1. 创建带UI文件的项目 我们在之前的学习中都是不用这个按钮的&#xff0c;现在我们需…

富文本CKEditor5简易入门,包括自定义上传图片(html版+vue.js)

一、安装及引入 官网&#xff1a;https://ckeditor.com/ckeditor-5/download/ 我这边使用的是自定义构建&#xff0c;然后下载下来。 二、简单使用 引入js <script src"../../../assets/plugins/ckeditor5/ckeditor.js"></script>html&#xff1a;…

【PWN · ret2libc】[BJDCTF 2020]babyrop

这题是经典的ret2libc&#xff0c;而且保护开的也不多&#xff0c;实际上&#xff0c;这篇博客的意义更大&#xff1a; 【PWN ret2libc】[2021 鹤城杯]babyof_Mr_Fmnwon的博客-CSDN博客 目录 前言 一、题目 二、思路 三、exp具体编写 总结 前言 简单而纯粹的ret2libc&am…

《DocRED: A Large-Scale Document-Level Relation Extraction Dataset》阅读笔记

引言 近期关注篇章级关系抽取&#xff0c;两个原因&#xff0c;一是之前做大规模知识抽取&#xff0c;遗留的一块内容就是篇章级关系抽取和事件抽取&#xff1b;另一个是大模型目前在抽取任务&#xff0c;特别是复杂抽取任务上表现不如其他NLP任务&#xff0c;这也引起我的研究…

5.2.6.字符设备驱动工作原理1

什么是模块&#xff1f;什么是驱动&#xff1f; 模块 驱动的雏形&#xff0c; 你要能操控硬件才叫驱动 在空的模块的基础上&#xff0c;安装驱动 5.2.6.1、系统整体工作原理 (1)应用层->API->设备驱动->硬件 (2)API&#xff1a;open、read、write、close等 (3)驱动…

20230720今天youtube上的中文字幕自动翻译成为英文的功能失效!

20230720今天youtube上的中文字幕自动翻译成为英文的功能失效&#xff01; 2023/7/20 12:42 &#xff1f;做YouTube挣钱吗&#xff1f; 115网盘 满了。最新 张家界 旅游的视频 放到 youtube就是 60岁/老了的时候的回忆&#xff01; 放到 大陆不保险&#xff01; 如需使用自动翻…

智能合约安全审计

智能合约安全审计的意义 智能合约审计用于整个 DeFi 生态系统&#xff0c;通过对协议代码的深入审查&#xff0c;可以帮助解决识别错误、低效代码以及这些问题。智能合约具有不可篡改的特点&#xff0c;这使得审计成为任何区块链项目安全流程的关键部分。 代码审计对任何应用…

Spring(二):更简单的存储与读取 Bean

通过上一章的Spring&#xff0c;我们基本实现了Spring 的读取与存储&#xff0c;但是在操作过程中&#xff0c;读取与存储并没有那么得“简单” 一套流程还是很复杂&#xff0c;所以&#xff0c;本章来介绍更加简单得读取与存储。 在 Spring 中想要更简单的存储和读取对象的核…

【C++】继承基础知识及简单应用,使用reportSingleClassLayout(在Visual Studio开发人员命令提示窗口)查看派生类详细信息

author&#xff1a;&Carlton tag&#xff1a;C topic&#xff1a;【C】继承基础知识及简单应用&#xff0c;使用reportSingleClassLayout&#xff08;在Visual Studio开发人员命令提示窗口&#xff09;查看派生类详细信息 website&#xff1a;黑马程序员C date&#xf…