php用户注册、登录、安全退出session

1.数据库users.sql

-- phpMyAdmin SQL Dump
-- version 4.7.9
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1:3306
-- Generation Time: 2018-12-22 08:08:49
-- 服务器版本: 5.7.21
-- PHP Version: 5.6.35

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `users`
--

-- --------------------------------------------------------

--
-- 表的结构 `account`
--

DROP TABLE IF EXISTS `account`;
CREATE TABLE IF NOT EXISTS `account` (
  `userName` text NOT NULL,
  `password` text NOT NULL,
  `email` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- 转存表中的数据 `account`
--

INSERT INTO `account` (`userName`, `password`, `email`) VALUES
('123', '123456', '123@qq.com'),
('111', '111111', '11@qq.com');
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

2.注册前台register.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>注册前台页面</title>
</head>

<body>
	<form method="post" action="clregister.php">
    	用户名:<input type="text" name="userName"><br/>
        注册密码:<input type="password" name="password"><br/>
        注册邮箱:<input type="text" name="email"><br/>
        <input type="submit" value="注册">
    </form>
</body>
</html>

注册处理页面后台clregister.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>处理前台注册页面</title>
</head>

<body>
<?php //(mysqli-面向过程)
//建立数据库说明:数据库名:users,表名:account,字段名(列)userName 类型text长度20,password类型text长度20,email类型text
	
	//第一种连接方法
	//$dbServername="localhost";
	//$dbUserName="root";
	//$dbPassword="123";//如果密码没有的话:$dbPassword="";
	//$dbName="users";	
	//连接数据库   mysql是数据库,i代表improvement,相当于mysql的增强版  
    //$conn=mysqli_connect($dbServername,$dbUserName,$dbPassword,$dbName);


	//一般使用如下连接:
		
	//创建连接   
	//mysql是数据库,i代表improvement,相当于mysql的增强版
	$conn=mysqli_connect('localhost','root','123','users'); 
	
	//检测连接
	if(!$conn)
	{
		//die输出错误,connect failed是自定义的错误信息,.mysqli_connect_error()是系统自身的错误信息,可以不写只用自己的
		die("connect failed".mysqli_connect_error());	
	}
	else
	{	
		echo "连接成功(connect success)!";	//连接成功就提示connect success
	}
	
	//插入数据
	//定义一个 $sql 变量,用来存放写的sql语句
	//插入到account数据表,account()里面是字段名,也可以不写,values不要忘了加s     
	//$sql="insert into account(userName,password,email) values('xiaoming','123456','123@qq.com')";//注意:外面用了双引号里面就要用单引号,为了好看在values前可以加个换行
	
	//也可以用变量$userName
	//$userName="xiaohua";
	//用变量 values()里面也要用单引号'$userName'	
	//$sql="insert into account(userName,password,email) values('$userName','123456','123@qq.com')";
	
	//接收网页提交过来的form表单
	//$_POST是超全局变量,['']里面的值是form表单内控件的name的命名
	//$_POST['userName']
	$userName=$_POST['userName'];//前面的$userName的名字可以和后面的$_POST['userName']的名字不一样,她不是同一个东西,起一样的名字可以一目了然,一看就知道传给哪一个
	$password=$_POST['password'];
	$email=$_POST['email'];	
	if(empty($userName) || empty($password) || empty($email) ){
		echo "<script>alert ('用户名或密码或邮箱不能为空');window.location.href='register.php'</script>";
	}
	else{
		//定义一个 $sql 变量,用来存放写的sql语句
		$sql="insert into account(userName,password,email) 
		values('$userName','$password','$email')";
		
		//使用query()函数把$sql传到数据库里,query请求的意思
		//query的第一个参数是已经建立的连接($conn),用来区分连接的哪个数据库,连接里面已经指定了users,就会在users这个数据库里面找account数据表,增加这样一条记录
		//query的第二个参数是sql语句,也可以直接把 insert into account(userName,password,email) values('xiaoming','123456','123@qq.com') 加到里面,不过不好修改
		//如果插入成功
		if(mysqli_query($conn,$sql))
		{
			echo "insert success";	
		}
		else 
		{
			echo "insert failed";	
		}
		
	}
?>
</body>
</html>

3.注册和处理在一个页面,代替上面的整个2   registerAndClRegister.php

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>注册前台和提交给自己处理后台</title>
</head>

<body>
<?php //(mysqli-面向过程)

	//PHP里面是不用声明的,但是不初始化后面可能会出现未定义的变量
	//6.
	//初始化一个变量	
	$isInfoCanUse=false;//是信息可用=否
	//8.
	初始化变量
	$userName=$password=$email="";
	$userNameErr=$passwordErr=$emailErr="*必填项目*";
	//9.
	//处理信息函数
	function dealInfo($data)
	{
		//trim()函数用来去掉字符串里的空格
		$data=trim($data);
		//把返回值在赋给$data
		$data=htmlspecialchars($data);
		//slashes斜杠的意思(\)
		$data=stripslashes($data);
		return $data;
	}
	//7.
	//检测提交信息是否为空
	if($_SERVER['REQUEST_METHOD']=="POST")
	{
		$isInfoCanUse=true;
		//empty()这个函数用来检验变量是否为空
		if(empty($_POST['userName']))//判断信息是否完整
		{
			$isInfoCanUse=false;
			$userNameErr="*用户名不能为空*";
		}
		else
		{
			//PHP里面使用preg_match()函数来使用正则表达式,第一个参数是正则表达式的字符串,第二个参数是要匹配的变量
			if(!preg_match("/^[\w]*$/",$_POST['userName']))
			{
				$userNameErr="*只允许字母和数字*";
				$isInfoCanUse=false;
			}
			else
			{
				//$userName=$_POST['userName'];
				//9.
				$userName=dealInfo($_POST['userName']);
			}
	
		}
		if(empty($_POST['password']))
		{
			$isInfoCanUse=false;
			$passwordErr="*密码不能为空*";
		}
		else
		{
			if(!preg_match("/(\w{6,14})/",$_POST['password']))
			{
				$passwordErr="*密码长度6~14*";
				//必须要有下面的这句话,阻止提交
				$isInfoCanUse=false;
			}
			else
			{
				//$password=$_POST['password'];
				//9.
				$password=dealInfo($_POST['password']);
			}
	
		}
		if(empty($_POST['email']))
		{
			$isInfoCanUse=false;
			$emailErr="*邮箱不能为空*";
		}
		else
		{
			if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$_POST['email']))
			{
				$emailErr="*非法邮箱格式*";
				$isInfoCanUse=false;
			}
			else
			{
				
				//$email=$_POST['email'];
				//9.
				$email=dealInfo($_POST['email']);
			}
	
		}
	}
	
	
	
	//$_SERVER超全局变量,SERVER服务的意思
	//REQUEST_METHOD请求方式
	//如果以POST方式提交才执行
	//5.
	if($_SERVER['REQUEST_METHOD']=="POST" && $isInfoCanUse==true)
	{
		//1.
		//创建连接
		$conn=mysqli_connect('localhost','root','123','users'); 
		//2.
		if(!$conn)
		{
			die("connect failed".mysqli_connect_error());	
		}
		else//连接成功
		{
			echo "connect success!";	
		}
		
		//10.
		//检测用户名是否存在
		//查找userName字段从account表里,条件是userName='$userName',前面的userName是数据库里面的字段名,后面的$userName'是填入的注册数据
		$sql="select userName from account where userName='$userName'";//注意:查找到和查找不到都是执行成功了
		//$result变量接受结果,来判断数据库里面是否有
		$result=mysqli_query($conn,$sql);//无论查找成功与否,都是执行成功,返回的是结果集
		//mysqli_fetch_还有别的,这里只是 转换成关联数组
		$test=mysqli_fetch_assoc($result);//返回false代表查找失败
		if($test !=false)
		{
			$userNameErr="用户名已存在";
		}
		else
		{
			$sql="insert into account(userName,password,email) 
			values('$userName','$password','$email')";
			
			//4.
			//如果插入成功
			if(mysqli_query($conn,$sql))
			{
				echo "insert success";	
			}
			else 
			{
				echo "insert failed";	
			}
		}
	
		
		//3.
		//获取网页信息
		//$userName=$_POST['userName'];//前面的$userName的名字可以和后面的$_POST['userName']的名字不一样,她不是同一个东西,起一样的名字可以一目了然,一看就知道传给哪一个
		//$password=$_POST['password'];
		//$email=$_POST['email'];	
		//定义一个 $sql 变量,用来存放写的sql语句
		//$sql="insert into account(userName,password,email) 
		//values('$userName','$password','$email')";
		
		//4.
		//如果插入成功
		//if(mysqli_query($conn,$sql))
		//{
		//	echo "insert success";	
		//}
		//else 
		//{
		//	echo "insert failed";	
		//}
	}	
?>
	<!-- htmlspecialchars 用来防止黑客利用表单攻击服务器-->
	<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"><!--1.提交给自己registerAndTest.php 2.<\?php echo $_SERVER['PHP_SELF'];?> 不知道自己的文件名是什么用['PHP_SELF']-->
    	用户名:<input type="text" name="userName">
        <?php echo $userNameErr;?><br/>
        注册密码:<input type="password" name="password">
        <?php echo $passwordErr;?><br/>
        注册邮箱:<input type="text" name="email">
        <?php echo $emailErr;?><br/>
        <input type="submit" value="注册">
    </form>
</body>
</html>

4.登录前台和处理界面于一体login.php  (加有session)

<?php session_start();?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>登录前台交给自己处理后台</title>
<style>
.error {color: red;}
</style>
</head>

<body>
<?php
//处理信息函数
	function dealInfo($data)
	{
		//trim()函数用来去掉字符串里的空格
		$data=trim($data);
		//把返回值在赋给$data
		$data=htmlspecialchars($data);
		//slashes斜杠的意思(\)
		$data=stripslashes($data);
		return $data;
	}
	
	$userName=$password="";//初始化,防止出现未定义就是用的错误
	$userNameErr=$passwordErr="";
	$isInfoCanUse=false;//信息是否能用
	
	
	//提交表单之后,是post提交过来的
	if($_SERVER['REQUEST_METHOD']=="POST")
	{
		//用户名
		$isInfoCanUse=true;
		//用户名是否是空的
		if(empty($_POST["userName"]))
		{
			$userNameErr="用户不能名为空";
			$isInfoCanUse=false;
		}
		else
		{
			$userName=dealInfo($_POST["userName"]);	
		}
		
		//密码名是否是空的
		if(empty($_POST["password"]))
		{
			$passwordErr="密码不能名为空";
			$isInfoCanUse=false;
		}
		else
		{
			$password=dealInfo($_POST['password']);	
		}
	}
	//连接数据库
	$conn=mysqli_connect('localhost','root','123','users');
	
	if(!$conn)
	{
		die("连接失败:".mysqli_connect_error());	
	}
	else
	{
		//echo "连接成功";	
	}
	
	//用户名是否存在
	if($isInfoCanUse)//信息是否完整
	{
		$sql="select userName from account where userName='$userName'";
		$result=mysqli_query($conn,$sql);
		$test=mysqli_fetch_assoc($result);
		if($test == false)//关联数组失败
		{
			$userNameErr="用户名不存在";	
		}
		else
		{
			//密码是否正确
			$sql="select userName,password from account 
			where userName='$userName' and password='$password'";
			$result=mysqli_query($conn,$sql);
			$test=mysqli_fetch_assoc($result);
			if($test == false)//关联数组失败
			{
				$passwordErr="密码不正确";	
			}
			else
			{
				//存入session会话
				//把用户名存入session
				$_SESSION['userName']=$userName;
				
				
				//echo "成功登陆";
				//这里写登陆成功要做的事情,例如
				
				//页面跳转
				echo "<script type=\"text/javascript\">";
				echo "window.location.href='homepage.php';";//返回上一个页面
				echo "</script>";
					
			}
		}
	}
	
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
  <p>用户名:
    <input type="text" name="userName">
  <?php echo "<span class=error>*".$userNameErr."</span>";?>
  <br/>
    密码:<input type="password" name="password">
  <?php echo "<span class=error>*".$passwordErr."</span>";?></p>
    <input type="submit" value="登录">
  </p>
</form>
</body>
</html>

5.主页homepage.php

<?php session_start();?>
<!-- 如果使用session要在每个页面的 ht最ml 的前面加上 -->
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>测试主页</title>
</head>

<body>
<?php
	if(isset($_SESSION['userName']))//如果登录成功
	{
		$userName=$_SESSION['userName'];
		echo "欢迎您:".$userName;
		echo '<a href="logout.php"><input type="button" value="注销"/></a>';	
	}
	else
	{
		echo '<a href="login.php"><input type="button" value="登陆"></a>';
		echo '<a href="registerAndTest.php"><input type="button" value="注册"></a>';	
	}
?>
</body>
</html>

6.安全退出页面logout.php (利用session)

<?php session_start();?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>session安全退出</title>
</head>

<body>
<?php
	if(isset($_SESSION["userName"]))
	{
		session_unset();
		session_destroy();
	}
	header("location:homepage.php");//跳转回去
?>
</body>
</html>

 

 

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值