php实现登录和注册功能

来源:互联网 发布:一直在启动windows 编辑:程序博客网 时间:2024/05/17 02:38
PHP实现注册登录功能完整教程及代码    (含验证码)
        只是为实现功能,所以页面并没有美化,本教程包含注册登录功能的完整流程及代码:
文件列表如图:

注册html代码:
[html] view plain copy
 print?
  1. <!DOCTYPE HTML>  
  2. <html>   
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <link rel="stylesheet" type="text/css" href="css/register.css" />  
  6. <title>注册界面</title>  
  7. </head>  
  8.   
  9.   
  10. <body>    
  11. <span style="white-space:pre">    </span>  <form  name="form1"  method="post" action="add.php">  
  12. <span style="white-space:pre">    </span>  <div>  
  13. <span style="white-space:pre">    </span>      <ul>  
  14. <span style="white-space:pre">        </span>      <li><input name="nickname" type="text"  placeholder ="昵称:数字、字母、下划线"/></li>  
  15. <span style="white-space:pre">            </span>  <li><input name="studentid" type="text" placeholder ="学号:9位纯数字"/></li>  
  16. <span style="white-space:pre">        </span>      <li><input name="password" type="password" placeholder ="密码:至少6位"/></li>  
  17. <span style="white-space:pre">        </span>      <li><input name="confirm" type="password"  placeholder ="确认密码"/></li>  
  18. <span style="white-space:pre">        </span>      <li><input name="emailaddress" type="text"  placeholder ="常用邮箱"/></li>  
  19. <span style="white-space:pre">            </span>  <li><input name="verification" type="text"  placeholder ="输入验证码"/></li>  
  20. <span style="white-space:pre">        </span>  </ul>  
  21. <span style="white-space:pre">            </span>  <div id="text11"><img name="validate" onclick="validate.src+='?' + Math.random();"   
  22. <span style="white-space:pre">            </span>  src="verification.php"  alt="点击刷新">  
  23. <span style="white-space:pre">            </span>  </div><span style="white-space:pre">    </span>    
  24. <span style="white-space:pre">        </span>     <input type="reset" value="重置" />  
  25. <span style="white-space:pre">            </span>  <input type="submit" value="确定" />    
  26. <span style="white-space:pre">        </span>    </div>  
  27. <span style="white-space:pre">        </span>    
  28. <span style="white-space:pre">    </span>  </form><span style="white-space:pre">   </span>    
  29.    </div>   
  30. </body>  
  31. </html>  
效果图如下:

可以看出生成了验证码,且验证码可以点击刷新,刷新页面时也可以刷新
验证码文件verification.php:
[php] view plain copy
 print?
  1. <?php  
  2.  session_start();  
  3. $img = imagecreatetruecolor(100, 35);  
  4. $black = imagecolorallocate($img, 0x00, 0x00, 0x00);  
  5. $green = imagecolorallocate($img, 0x00, 0xFF, 0x00);  
  6. $white = imagecolorallocate($img, 0xFF, 0xFF, 0xFF);  
  7. imagefill($img,0,0,$white);  
  8. //生成随机的验证码  
  9. $code = '';  
  10. for($i = 0; $i < 4; $i++) {  
  11.     $code .= rand(0, 9);  
  12. }  
  13. $_SESSION['rand'] = $code;  //存储验证码  
  14. imagestring($img, 30, 28, 10, $code$black);  
  15. //加入噪点干扰  
  16. for($i=0;$i<200;$i++) {  
  17.   imagesetpixel($img, rand(0, 100) , rand(0, 100) , $black);   
  18.   imagesetpixel($img, rand(0, 100) , rand(0, 100) , $green);  
  19. }  
  20. //输出验证码  
  21. header("content-type: image/png");  
  22. imagepng($img);  
  23. imagedestroy($img);  
  24. ?>  
生成4位随机数字并加入噪点干扰,防止机器识别。并用session存储生成的数字,用于后边验证。

php代码通过接收前台数据进行验证
先写php的配置文件代码:
[php] view plain copy
 print?
  1. <?php  
  2. header ("Content-type:text/html;charset=utf8_bin");  
  3.   
  4.    define('HOST','127.0.0.1');  
  5.    define('USERNAME','root');  
  6.    define('PASSWORD','root');  
  7.   
  8. //连库  
  9.  $con=mysql_connect(HOST,USERNAME,PASSWORD);  
  10. //选库  
  11. mysql_select_db('rrf');  
  12.   
  13. //字符集  
  14.   mysql_query('set names utf8_bin');  
  15. ?>  
根据本机的数据库密码进行配置  命名为connect.php

[php] view plain copy
 print?
  1. <?php  
  2.   //把传递过来的信息入库;  
  3.    session_start();  
  4.    //用于核对验证码  
  5.     require_once('connect.php');  
  6.   //  print_r($_POST);  
  7.    $nickname=$_POST["nickname"];  
  8.    $studentid=$_POST['studentid'];  
  9.    $password=$_POST['password'];  
  10.    $confirm=$_POST['confirm'];  
  11.    $emailaddress=$_POST['emailaddress'];  
  12.    $verification=$_POST["verification"];  
  13.    $sql="select * from student_information where studentid = '$studentid'";  
  14.    $today=date('Y-m-d H:i:s');//获取时间作为注册时间  
  15.      
  16.      $query=mysql_query($sql);  
  17.      $rows=mysql_num_rows($query);  
  18.        
  19.     //验证填写信息是否合乎规范  
  20.        if(empty($nickname)||empty($studentid)||empty($password)||empty($confirm)||empty($emailaddress)||empty($emailaddress)) {  
  21.           echo "<script>alert('信息不能为空!重新填写');window.location.href='register.html'</script>";  
  22.             }elseif ((strlen($nickname) < 4)||(!preg_match('/^\w+$/i'$nickname))) {  
  23.                  echo "<script>alert('用户名至少4位且不含非法字符!重新填写');window.location.href='register.html'</script>";  
  24.             //判断用户名长度  
  25.             }elseif  ((strlen($studentid)!=9)||(!(ctype_digit($studentid)))){  
  26.                 echo "<script>alert('学号为9位纯数字!重新填写');window.location.href='register.html'</script>";  
  27.             //判断学号是否填写正确      
  28.             }elseif$rows > 0){  
  29.                 echo "<script>alert('此学号已经注册!重新填写');window.location.href='register.html'</script>";  
  30.             //学号不能重复  
  31.             }elseif(strlen($password) < 6){  
  32.                  echo "<script>alert('密码至少6位!重新填写');window.location.href='register.html'</script>";  
  33.              //判断密码长度  
  34.             }elseif($password!=$confirm){  
  35.                 echo "<script>alert('两次密码不相同!重新填写');window.location.href='register.html'</script>";  
  36.              //检测两次输入密码是否相同  
  37.             }elseif (!preg_match('/^[\w\.]+@\w+\.\w+$/i'$emailaddress)) {  
  38.                 echo "<script>alert('邮箱不合法!重新填写');window.location.href='register.html'</script>";  
  39.               //判断邮箱格式是否合法  
  40.           }//elseif($verification !=$_SESSION['$code']) {  
  41.               elseif(($_SESSION['rand'])!=($verification )){  
  42.              echo "<script>alert('验证码错误!重新填写');window.location.href='register.html'</script>";  
  43.               //判断验证码是否填写正确  
  44.           } else{  
  45.               $insertsql"insert into student_information(nickname,studentid,password,confirm,emailaddress,registrationtime,logintime)values('$nickname','$studentid','$password','$confirm','$emailaddress','$today','$today')";  
  46.                //插入数据库  
  47.                   if(!(mysql_query($insertsql))){  
  48.                       echo mysql_error();  
  49.                     }else{  
  50.                       echo "<script>alert('注册成功!去登陆');window.location.href='login.html'</script>";  
  51.                              }  
  52.                 }   
  53. ?>  

session主要用来核对验证码,在验证码文件里用session存储验证码数字,在这里核对是否填写正确。
require  包含配置链接文件
post接收数据,并存储在变量中。
用正则表达式验证填写的信息是否合乎规范以及是否已经存在用户,若所有信息核对无误,写入数据库
注释已经很清楚,不做赘述

登录界面代码login.html:
[html] view plain copy
 print?
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html>  
  3. <head>  
  4. <title>登陆</title>  
  5. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  6. </head>  
  7. <form action="login.php" method="post">  
  8.   <div>  
  9.     <ul>  
  10.           <li><input name="nickname" type="text"  placeholder ="昵称"/></li>  
  11.           <li><input name="studentid" type="text"  placeholder ="学号"/></li>  
  12.           <li><input name="password" type="password"  placeholder ="密码"/></li>  
  13.           <li><input name="verification" type="text"  placeholder ="验证码"/></li>  
  14.           <input name="reset" type="reset"  value="重置"/>  
  15.          <input name="submit" type="button"  value="登录"/>  
  16.         </ul>  
  17.        <div id="text11"><img name="validate" onclick="validate.src+='?' + Math.random();"   
  18.         src="verification.php"  alt="点击刷新">  
  19.         </div>  
  20. </div>  
  21.   
  22.   
  23. </form>  
  24. </body>  
  25. </html>  
效果图如下:

验证码效果和上边相同,不做赘述
接下来是登录验证php代码(login.php):
[php] view plain copy
 print?
  1. <?php  
  2.     session_start();  
  3.     require_once('connect.php');//连接数据库  
  4.    $nickname=$_POST['nickname'];  
  5.    $password=$_POST['password'];  
  6.    $verification=$_POST['verification'];  
  7.    $studentid=$_POST['studentid'];  
  8.      
  9.     $today=date('Y-m-d H:i:s');//获取时间作为本次登录时间  
  10.     $ip=$_SERVER["REMOTE_ADDR"];//获取登陆IP地址  
  11.       
  12.     $sql="select * from student_information where nickname='{$nickname}' and password='{$password}' ";  
  13.      $rst=mysql_query($sql);  
  14.     $row=mysql_fetch_assoc($rst);  
  15.     //验证登录信息是否正确  
  16.     if(($_SESSION['rand'])!=($verification )){  
  17.           echo "<script>alert('验证码错误!重新填写');window.location.href='login.html'</script>";  
  18.       //判断验证码是否填写正确   
  19.     }elseif($row) {    
  20.           setcookie('niacname',$nickname,time()+10,'/');  
  21.           setcookie('studentid',$studentid,time()+10,'/');   
  22.             $up="UPDATE student_information SET logintime='$today' WHERE studentid='$studentid'";  
  23.             $ip="UPDATE student_information SET ip='$ip' WHERE studentid='$studentid'";  
  24.               
  25.             if (mysql_query($up)){  
  26.                   
  27.             }  
  28.             if (mysql_query($ip)){  
  29.                   
  30.             }  
  31.             //更新登录时间及ip  
  32.                echo "<script>alert('登陆成功!欢迎');window.location.href='content.php'</script>";  
  33.        }else{  
  34.            echo "<script>alert('登陆信息有误!重新填写');window.location.href='login.html'</script>";   
  35.      
  36.        }  
  37.          
  38. ?>  

0 0
原创粉丝点击