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

强撸项目系列总目录在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

作业:

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# Modbus通信从入门到精通(21)——Modbus TCP协议原理

Modbus TCP是走网口的&#xff0c;也可以在同一时间内有多个从站访问主站&#xff0c;并且通过Modbus事务处理标识来区分同一时刻的不同Modbus事务&#xff0c;这是区别于Modbus ASCII和Modbus RTU的地方。 1、访问模式&#xff1a; Modbus客户端通常输入Modbus服务器的IP地址…

两个小封装电机驱动芯片:MLX813XX、A4950

一&#xff0e;MLX813XX MELEXIS的微型电机驱动MLX813XX系列芯片集成MCU、预驱动以及功率模块等能够满足10W以下的电机驱动。 相对于普通分离器件的解决方案&#xff0c;MLX813XX系列电机驱动芯片是一款高集成度的驱动控制芯片&#xff0c;可以满足汽车系统高品质和低成本的要…

flutter开发实战-Stagger Animation实现水波纹动画

flutter开发实战-实现水波纹动画&#xff0c;使用到了交织动画&#xff0c;实现三个圆逐渐放大与渐变的过程。 一、效果图 二、实现水波纹效果 实现水波纹动画&#xff0c;使用到了交织动画&#xff0c;实现三个圆逐渐放大与渐变的过程。 交织动画 有些时候我们可能会需要一些…

珠海市黄杨山之旅游

西湾村 早上6点半出门&#xff0c;买点五人份的早餐 A点 第一个点&#xff0c;冲 C点 D岛 到d点休息 B点 高度&#xff1a;229米 到这里有人吐了&#xff0c;建议早餐不要吃超过三个包子&#xff08;他吃了四个包子&#xff0c;1个鸡蛋&#xff0c;1个火腿&#xff09; 记…

pytest 第三方插件

目录 前言&#xff1a; 顺序执行&#xff1a;pytest-ordering 失败重试&#xff1a;pytest-rerunfailures 并行执行&#xff1a;pytest-xdist 前言&#xff1a; pytest 是一个广泛使用的 Python 测试框架。它具有强大的测试运行器、测试驱动开发和测试结果可视化等功能。除…

什么是神经网络?

我们常常使用深度学习来指训练神经网络的过程。 在这里举一个房屋价格预测的例子&#xff1a;假设有一个数据集&#xff0c;它包含了六栋房子的信息。所以&#xff0c;你知道房屋的面积是多少平方米&#xff0c;并且知道这个房屋的价格。这是&#xff0c;你想要拟合一个根据房屋…

vue3项目,vite和vue-cli,开发和生产环境。index.html里面设置项目图标

可以在vite的根文件夹中创建public文件夹&#xff0c;vite默认把这个文件夹当作静态资源文件夹&#xff0c;会把里面的文件复制到根文件夹里面&#xff0c;所以你在index.html文件中导入public文件夹里面的文件时&#xff0c;可以直接写/xxx。在根文件夹中找复制的文件 注意&a…

Visual Studio 2022 cmake配置opencv开发环境

1. 环境与说明 这里我用的是 widnows 10 64位&#xff0c;Visual Studio 用的 Visual Studio Community 2022 (社区版) 对于Android开发工程师来说&#xff0c;为什么要使用Visual Studio 呢 ? 因为在Visual Studio中开发调试OpenCV方便&#xff0c;可以开发调试好后&#xf…

微服务Day4——Docker

一、什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环境不一定一致&#xff0c;会…

springboot快速整合腾讯云COS对象存储

1、导入相关依赖 <!--腾讯云COS--><dependency><groupId>com.tencentcloudapi</groupId><artifactId>tencentcloud-sdk-java</artifactId><version>3.0.1</version></dependency><dependency><groupId>com…

flask介绍、快速使用、配置文件、路由系统

前言: Flask框架和Django框架的区别&#xff1a; Django框架&#xff1a; 大而全&#xff0c;内置的app的很多&#xff0c;第三方app也很多Flask框架&#xff1a; 小而精&#xff0c;没有过多的内置app&#xff0c;只能完成web框架的基本功能&#xff0c;很多功能都需要借助第三…

【python】在matlab中调用python

参考 Matlab调用Python - 知乎 (zhihu.com) 说一下我犯的错误&#xff1a; 1、电脑上有没有python都可以&#xff0c;我以为anaconda里的python不行&#xff0c;又重新下了一个python3.8 实际上导入的时候可以用 pyversion(D:\myDownloads\anaconda\envs\pytorch38\pytho…

C++笔记之STL的sort使用第三个参数来自定义排序

C笔记之STL的sort使用第三个参数来自定义排序 code review! 文章目录 C笔记之STL的sort使用第三个参数来自定义排序1.方法一&#xff1a;使用比较函数(其实是使用函数指针)作为std::sort()的第三个参数来排序2.方法二&#xff1a;使用lambda表达式作为std::sort()的第三个参数…

C++OpenCV(2):图像处理基础概念与操作

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 &#x1f506; OpenCV项目地址及源代码&#xff1a;点击这里 文章目录 图形读取与显示加载图片显示图片打印图片信息保存图片 色彩模型转换RGB颜色模型HSV颜色模型HLS模型LAB模型 图像像素读写操作像素算数运…

MySQL数据库第十一课---------SQl语句的拔高-------水平提升

作者前言 个人主页::小小页面 gitee页面:秦大大 一个爱分享的小博主 欢迎小可爱们前来借鉴 ______________________________________________________ 目录 SQL提高 日期函数 length round reverse substring ifnull case when cast grouping sets 排序函数 开窗函…

计算机视觉(二)图像特征提取

文章目录 颜色特征量化颜色直方图适用颜色空间&#xff1a;RGB、HSV等颜色空间操作 几何特征边缘 Edge边缘定义边缘提取 基于关键点的特征描述子引入几何特征&#xff1a;关键点几何特征&#xff1a;Harris角点FAST角点检测几何特征&#xff1a;斑点局部特征&#xff1a;SIFT预…

【Linux从入门到精通】进程的控制(进程替换)

本篇文章会对进程替换进行讲解。希望本篇文章会对你有所帮助 文章目录 一、进程替换概念 二、进程替换函数 2、1 execl 2、2 execlp 2、3 execv 2、3 execle 2、4 execve 三、总结 &#x1f64b;‍♂️ 作者&#xff1a;Ggggggtm &#x1f64b;‍♂️ &#x1f440; 专栏&…

视频讲解Codeforces Round 887 (Div. 2)(A--C)

文章目录 A. Desorting1、板书2、代码 B. Fibonaccharsis1、板书2、代码 C. Ntarsis Set1、板书2、代码 视频讲解Codeforces Round 887 (Div. 2)&#xff08;A–C&#xff09; A. Desorting 1、板书 2、代码 #include<bits/stdc.h> #define endl \n #define INF 0x3f…

区间预测 | MATLAB实现基于QRF随机森林分位数回归时间序列区间预测模型

区间预测 | MATLAB实现基于QRF随机森林分位数回归时间序列区间预测模型 目录 区间预测 | MATLAB实现基于QRF随机森林分位数回归时间序列区间预测模型效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于QRF随机森林分位数回归时间序列区间预测模型&#xff1…

从零到一nvm、npm、cnpm、yarn、vue全套安装和环境配置以及创建新项目和如何运行人家的项目大全,最详细,保姆级

NVM 1.下载 下载地址&#xff1a;Releases coreybutler/nvm-windows GitHub 可能需要开启魔法 划到下面。找到如图所示的文件下载即可2. 2.安装&#xff08;要记住安装的路径&#xff09; 基本一键默认即可&#xff0c;你要修改路径也可以&#xff0c;但不建议 下载好…