当前位置:   article > 正文

php用户注册、登录、安全退出session_php添加导航菜单,注册,登陆与退出

php添加导航菜单,注册,登陆与退出

1.数据库users.sql

  1. -- phpMyAdmin SQL Dump
  2. -- version 4.7.9
  3. -- https://www.phpmyadmin.net/
  4. --
  5. -- Host: 127.0.0.1:3306
  6. -- Generation Time: 2018-12-22 08:08:49
  7. -- 服务器版本: 5.7.21
  8. -- PHP Version: 5.6.35
  9. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
  10. SET AUTOCOMMIT = 0;
  11. START TRANSACTION;
  12. SET time_zone = "+00:00";
  13. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
  14. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
  15. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
  16. /*!40101 SET NAMES utf8mb4 */;
  17. --
  18. -- Database: `users`
  19. --
  20. -- --------------------------------------------------------
  21. --
  22. -- 表的结构 `account`
  23. --
  24. DROP TABLE IF EXISTS `account`;
  25. CREATE TABLE IF NOT EXISTS `account` (
  26. `userName` text NOT NULL,
  27. `password` text NOT NULL,
  28. `email` text NOT NULL
  29. ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
  30. --
  31. -- 转存表中的数据 `account`
  32. --
  33. INSERT INTO `account` (`userName`, `password`, `email`) VALUES
  34. ('123', '123456', '123@qq.com'),
  35. ('111', '111111', '11@qq.com');
  36. COMMIT;
  37. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
  38. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
  39. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

2.注册前台register.php

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>注册前台页面</title>
  6. </head>
  7. <body>
  8. <form method="post" action="clregister.php">
  9. 用户名:<input type="text" name="userName"><br/>
  10. 注册密码:<input type="password" name="password"><br/>
  11. 注册邮箱:<input type="text" name="email"><br/>
  12. <input type="submit" value="注册">
  13. </form>
  14. </body>
  15. </html>

注册处理页面后台clregister.php

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>处理前台注册页面</title>
  6. </head>
  7. <body>
  8. <?php //(mysqli-面向过程)
  9. //建立数据库说明:数据库名:users,表名:account,字段名(列)userName 类型text长度20,password类型text长度20,email类型text
  10. //第一种连接方法
  11. //$dbServername="localhost";
  12. //$dbUserName="root";
  13. //$dbPassword="123";//如果密码没有的话:$dbPassword="";
  14. //$dbName="users";
  15. //连接数据库 mysql是数据库,i代表improvement,相当于mysql的增强版
  16. //$conn=mysqli_connect($dbServername,$dbUserName,$dbPassword,$dbName);
  17. //一般使用如下连接:
  18. //创建连接
  19. //mysql是数据库,i代表improvement,相当于mysql的增强版
  20. $conn=mysqli_connect('localhost','root','123','users');
  21. //检测连接
  22. if(!$conn)
  23. {
  24. //die输出错误,connect failed是自定义的错误信息,.mysqli_connect_error()是系统自身的错误信息,可以不写只用自己的
  25. die("connect failed".mysqli_connect_error());
  26. }
  27. else
  28. {
  29. echo "连接成功(connect success)!"; //连接成功就提示connect success
  30. }
  31. //插入数据
  32. //定义一个 $sql 变量,用来存放写的sql语句
  33. //插入到account数据表,account()里面是字段名,也可以不写,values不要忘了加s
  34. //$sql="insert into account(userName,password,email) values('xiaoming','123456','123@qq.com')";//注意:外面用了双引号里面就要用单引号,为了好看在values前可以加个换行
  35. //也可以用变量$userName
  36. //$userName="xiaohua";
  37. //用变量 values()里面也要用单引号'$userName'
  38. //$sql="insert into account(userName,password,email) values('$userName','123456','123@qq.com')";
  39. //接收网页提交过来的form表单
  40. //$_POST是超全局变量,['']里面的值是form表单内控件的name的命名
  41. //$_POST['userName']
  42. $userName=$_POST['userName'];//前面的$userName的名字可以和后面的$_POST['userName']的名字不一样,她不是同一个东西,起一样的名字可以一目了然,一看就知道传给哪一个
  43. $password=$_POST['password'];
  44. $email=$_POST['email'];
  45. if(empty($userName) || empty($password) || empty($email) ){
  46. echo "<script>alert ('用户名或密码或邮箱不能为空');window.location.href='register.php'</script>";
  47. }
  48. else{
  49. //定义一个 $sql 变量,用来存放写的sql语句
  50. $sql="insert into account(userName,password,email)
  51. values('$userName','$password','$email')";
  52. //使用query()函数把$sql传到数据库里,query请求的意思
  53. //query的第一个参数是已经建立的连接($conn),用来区分连接的哪个数据库,连接里面已经指定了users,就会在users这个数据库里面找account数据表,增加这样一条记录
  54. //query的第二个参数是sql语句,也可以直接把 insert into account(userName,password,email) values('xiaoming','123456','123@qq.com') 加到里面,不过不好修改
  55. //如果插入成功
  56. if(mysqli_query($conn,$sql))
  57. {
  58. echo "insert success";
  59. }
  60. else
  61. {
  62. echo "insert failed";
  63. }
  64. }
  65. ?>
  66. </body>
  67. </html>

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

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>注册前台和提交给自己处理后台</title>
  6. </head>
  7. <body>
  8. <?php //(mysqli-面向过程)
  9. //PHP里面是不用声明的,但是不初始化后面可能会出现未定义的变量
  10. //6.
  11. //初始化一个变量
  12. $isInfoCanUse=false;//是信息可用=否
  13. //8.
  14. 初始化变量
  15. $userName=$password=$email="";
  16. $userNameErr=$passwordErr=$emailErr="*必填项目*";
  17. //9.
  18. //处理信息函数
  19. function dealInfo($data)
  20. {
  21. //trim()函数用来去掉字符串里的空格
  22. $data=trim($data);
  23. //把返回值在赋给$data
  24. $data=htmlspecialchars($data);
  25. //slashes斜杠的意思(\)
  26. $data=stripslashes($data);
  27. return $data;
  28. }
  29. //7.
  30. //检测提交信息是否为空
  31. if($_SERVER['REQUEST_METHOD']=="POST")
  32. {
  33. $isInfoCanUse=true;
  34. //empty()这个函数用来检验变量是否为空
  35. if(empty($_POST['userName']))//判断信息是否完整
  36. {
  37. $isInfoCanUse=false;
  38. $userNameErr="*用户名不能为空*";
  39. }
  40. else
  41. {
  42. //PHP里面使用preg_match()函数来使用正则表达式,第一个参数是正则表达式的字符串,第二个参数是要匹配的变量
  43. if(!preg_match("/^[\w]*$/",$_POST['userName']))
  44. {
  45. $userNameErr="*只允许字母和数字*";
  46. $isInfoCanUse=false;
  47. }
  48. else
  49. {
  50. //$userName=$_POST['userName'];
  51. //9.
  52. $userName=dealInfo($_POST['userName']);
  53. }
  54. }
  55. if(empty($_POST['password']))
  56. {
  57. $isInfoCanUse=false;
  58. $passwordErr="*密码不能为空*";
  59. }
  60. else
  61. {
  62. if(!preg_match("/(\w{6,14})/",$_POST['password']))
  63. {
  64. $passwordErr="*密码长度6~14*";
  65. //必须要有下面的这句话,阻止提交
  66. $isInfoCanUse=false;
  67. }
  68. else
  69. {
  70. //$password=$_POST['password'];
  71. //9.
  72. $password=dealInfo($_POST['password']);
  73. }
  74. }
  75. if(empty($_POST['email']))
  76. {
  77. $isInfoCanUse=false;
  78. $emailErr="*邮箱不能为空*";
  79. }
  80. else
  81. {
  82. if(!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$_POST['email']))
  83. {
  84. $emailErr="*非法邮箱格式*";
  85. $isInfoCanUse=false;
  86. }
  87. else
  88. {
  89. //$email=$_POST['email'];
  90. //9.
  91. $email=dealInfo($_POST['email']);
  92. }
  93. }
  94. }
  95. //$_SERVER超全局变量,SERVER服务的意思
  96. //REQUEST_METHOD请求方式
  97. //如果以POST方式提交才执行
  98. //5.
  99. if($_SERVER['REQUEST_METHOD']=="POST" && $isInfoCanUse==true)
  100. {
  101. //1.
  102. //创建连接
  103. $conn=mysqli_connect('localhost','root','123','users');
  104. //2.
  105. if(!$conn)
  106. {
  107. die("connect failed".mysqli_connect_error());
  108. }
  109. else//连接成功
  110. {
  111. echo "connect success!";
  112. }
  113. //10.
  114. //检测用户名是否存在
  115. //查找userName字段从account表里,条件是userName='$userName',前面的userName是数据库里面的字段名,后面的$userName'是填入的注册数据
  116. $sql="select userName from account where userName='$userName'";//注意:查找到和查找不到都是执行成功了
  117. //$result变量接受结果,来判断数据库里面是否有
  118. $result=mysqli_query($conn,$sql);//无论查找成功与否,都是执行成功,返回的是结果集
  119. //mysqli_fetch_还有别的,这里只是 转换成关联数组
  120. $test=mysqli_fetch_assoc($result);//返回false代表查找失败
  121. if($test !=false)
  122. {
  123. $userNameErr="用户名已存在";
  124. }
  125. else
  126. {
  127. $sql="insert into account(userName,password,email)
  128. values('$userName','$password','$email')";
  129. //4.
  130. //如果插入成功
  131. if(mysqli_query($conn,$sql))
  132. {
  133. echo "insert success";
  134. }
  135. else
  136. {
  137. echo "insert failed";
  138. }
  139. }
  140. //3.
  141. //获取网页信息
  142. //$userName=$_POST['userName'];//前面的$userName的名字可以和后面的$_POST['userName']的名字不一样,她不是同一个东西,起一样的名字可以一目了然,一看就知道传给哪一个
  143. //$password=$_POST['password'];
  144. //$email=$_POST['email'];
  145. //定义一个 $sql 变量,用来存放写的sql语句
  146. //$sql="insert into account(userName,password,email)
  147. //values('$userName','$password','$email')";
  148. //4.
  149. //如果插入成功
  150. //if(mysqli_query($conn,$sql))
  151. //{
  152. // echo "insert success";
  153. //}
  154. //else
  155. //{
  156. // echo "insert failed";
  157. //}
  158. }
  159. ?>
  160. <!-- htmlspecialchars 用来防止黑客利用表单攻击服务器-->
  161. <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"><!--1.提交给自己registerAndTest.php 2.<\?php echo $_SERVER['PHP_SELF'];?> 不知道自己的文件名是什么用['PHP_SELF']-->
  162. 用户名:<input type="text" name="userName">
  163. <?php echo $userNameErr;?><br/>
  164. 注册密码:<input type="password" name="password">
  165. <?php echo $passwordErr;?><br/>
  166. 注册邮箱:<input type="text" name="email">
  167. <?php echo $emailErr;?><br/>
  168. <input type="submit" value="注册">
  169. </form>
  170. </body>
  171. </html>

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

  1. <?php session_start();?>
  2. <!doctype html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title>登录前台交给自己处理后台</title>
  7. <style>
  8. .error {color: red;}
  9. </style>
  10. </head>
  11. <body>
  12. <?php
  13. //处理信息函数
  14. function dealInfo($data)
  15. {
  16. //trim()函数用来去掉字符串里的空格
  17. $data=trim($data);
  18. //把返回值在赋给$data
  19. $data=htmlspecialchars($data);
  20. //slashes斜杠的意思(\)
  21. $data=stripslashes($data);
  22. return $data;
  23. }
  24. $userName=$password="";//初始化,防止出现未定义就是用的错误
  25. $userNameErr=$passwordErr="";
  26. $isInfoCanUse=false;//信息是否能用
  27. //提交表单之后,是post提交过来的
  28. if($_SERVER['REQUEST_METHOD']=="POST")
  29. {
  30. //用户名
  31. $isInfoCanUse=true;
  32. //用户名是否是空的
  33. if(empty($_POST["userName"]))
  34. {
  35. $userNameErr="用户不能名为空";
  36. $isInfoCanUse=false;
  37. }
  38. else
  39. {
  40. $userName=dealInfo($_POST["userName"]);
  41. }
  42. //密码名是否是空的
  43. if(empty($_POST["password"]))
  44. {
  45. $passwordErr="密码不能名为空";
  46. $isInfoCanUse=false;
  47. }
  48. else
  49. {
  50. $password=dealInfo($_POST['password']);
  51. }
  52. }
  53. //连接数据库
  54. $conn=mysqli_connect('localhost','root','123','users');
  55. if(!$conn)
  56. {
  57. die("连接失败:".mysqli_connect_error());
  58. }
  59. else
  60. {
  61. //echo "连接成功";
  62. }
  63. //用户名是否存在
  64. if($isInfoCanUse)//信息是否完整
  65. {
  66. $sql="select userName from account where userName='$userName'";
  67. $result=mysqli_query($conn,$sql);
  68. $test=mysqli_fetch_assoc($result);
  69. if($test == false)//关联数组失败
  70. {
  71. $userNameErr="用户名不存在";
  72. }
  73. else
  74. {
  75. //密码是否正确
  76. $sql="select userName,password from account
  77. where userName='$userName' and password='$password'";
  78. $result=mysqli_query($conn,$sql);
  79. $test=mysqli_fetch_assoc($result);
  80. if($test == false)//关联数组失败
  81. {
  82. $passwordErr="密码不正确";
  83. }
  84. else
  85. {
  86. //存入session会话
  87. //把用户名存入session
  88. $_SESSION['userName']=$userName;
  89. //echo "成功登陆";
  90. //这里写登陆成功要做的事情,例如
  91. //页面跳转
  92. echo "<script type=\"text/javascript\">";
  93. echo "window.location.href='homepage.php';";//返回上一个页面
  94. echo "</script>";
  95. }
  96. }
  97. }
  98. ?>
  99. <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
  100. <p>用户名:
  101. <input type="text" name="userName">
  102. <?php echo "<span class=error>*".$userNameErr."</span>";?>
  103. <br/>
  104. 密码:<input type="password" name="password">
  105. <?php echo "<span class=error>*".$passwordErr."</span>";?></p>
  106. <input type="submit" value="登录">
  107. </p>
  108. </form>
  109. </body>
  110. </html>

5.主页homepage.php

  1. <?php session_start();?>
  2. <!-- 如果使用session要在每个页面的 ht最ml 的前面加上 -->
  3. <!doctype html>
  4. <html>
  5. <head>
  6. <meta charset="utf-8">
  7. <title>测试主页</title>
  8. </head>
  9. <body>
  10. <?php
  11. if(isset($_SESSION['userName']))//如果登录成功
  12. {
  13. $userName=$_SESSION['userName'];
  14. echo "欢迎您:".$userName;
  15. echo '<a href="logout.php"><input type="button" value="注销"/></a>';
  16. }
  17. else
  18. {
  19. echo '<a href="login.php"><input type="button" value="登陆"></a>';
  20. echo '<a href="registerAndTest.php"><input type="button" value="注册"></a>';
  21. }
  22. ?>
  23. </body>
  24. </html>

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

  1. <?php session_start();?>
  2. <!doctype html>
  3. <html>
  4. <head>
  5. <meta charset="utf-8">
  6. <title>session安全退出</title>
  7. </head>
  8. <body>
  9. <?php
  10. if(isset($_SESSION["userName"]))
  11. {
  12. session_unset();
  13. session_destroy();
  14. }
  15. header("location:homepage.php");//跳转回去
  16. ?>
  17. </body>
  18. </html>

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号