• 利用PHP后台实现的注册效果


    好久没写博客了,上次写了一篇文章,却被退出了博客园首页,我的内心好down~~

    地址:http://www.cnblogs.com/programerHuan/p/4919639.html

    现在写一写基于PHP实现的注册页面的后台,我们先看看效果是怎么的

    我们先分析我们这个页面从输入数据到后台返回一系列的变化:

    首先我们新建的数据库是要保存以下几个参数:ID,用户名(username),昵称(nickname),邮箱(email),密码(password)

    我们在建立数据库的时候,需要把ID设置为主键primaryKey,如无意外的话,而且用户名称和邮箱应该都是唯一的设置为unique,

    至于验证码的话,我们使用code.php生成,输入完成之后再检测就行。

    页面布局的话我就不多说了,主要是有一个地方要注意的:

    第一:用一个form表单把需要传输 的内容括住,然后在form表单里面书写规定的提交地址,提交方法:

    		<form action="index.php" method="post" id="theForm">
    			<p class="register-tips">提示:这里是面向开发者的知识分享社区,不允许发布任何推广信息</p>
    			<dl class="input-group">
    				<dt>
    					<label>邮           箱:</label>
    				</dt>
    				<dd>
    					<div>
    						<input type="text" name="email">
    						<span class="check-state check-success">输入成功</span>
    						<span class="check-state check-ready">不可为空</span>
    						<span class="check-state check-focus">请输入有效的Email</span>
    						<span class="check-state check-error">Email格式错误,请输入重新输入</span>
    					</div>
    					<p>需要通过邮箱激活帐户,不支持sohu,21cn,sogou的邮箱</p>
    				</dd>
    			</dl>
    			<dl class="input-group">
    				<dt>
    					<label>登录用户名:</label>
    				</dt>
    				<dd>
    					<div>
    						<input type="text" name="username" value="">
    					</div>
    					<p>仅在登录时使用,字符数不少于4个</p>
    				</dd>
    			</dl>
    			<dl class="input-group">
    				<dt>
    					<label>显 示 名  称:</label>
    				</dt>
    				<dd>
    					<div>
    						<input type="text" name="nickname">
    
    					</div>
    					<p>即昵称,字符数不少于2个</p>
    				</dd>
    			</dl>
    			<dl class="input-group">
    				<dt>
    					<label>密           码:</label>
    				</dt>
    				<dd>
    					<div>
    						<input type="password" name="password1" value="">
    					</div>
    				</dd>
    			</dl>
    			<dl class="input-group">
    				<dt>
    					<label>确 认 密  码:</label>
    				</dt>
    				<dd>
    					<div>
    						<input type="password" name="password2">
    					</div>
    					<p class="infor">	至少8位,必须包含字母、数字、特殊字符</p>
    				</dd>
    			</dl>
    			<dl class="input-group input-check-code">
    				<dt>
    					验  证  码
    				</dt>
    				<dd>
    					<div>
    						<img src="code.php" alt="" id="codeImg">
    						<span>点击图片获取验证码</span>
    					</div>
    					<div id="know">
    						<input type="text" id="checkCodeBox" name="yanzheng">
    						<span class="check-state check-success">输入成功</span>
    						<span class="check-state check-ready">不可为空</span>
    						<span class="check-state check-focus">请输入有效的验证码</span>
    						<span class="check-state check-error">输入错误,请输入重新输入</span>
    					</div>
    				</dd>
    			</dl>
    			<div class="submit-box">
    				<input type="submit" value="注册">
    				<!-- <a href="javascript:void(0)" id="submitButton">注册</a> -->
    			</div>
    		</form>
    		
    

      可以看出我们的提交地址是同目录下的index.php,而提交的方法为post,这里的话,post方法可以替换成其他方法,不过作为demo的话已经是足够,如果大家想要对form表单提交过程了解更多,可以查看一下博客:

    http://blog.csdn.net/wzwenhuan/article/details/7803510

    在本次Demo里面,我们采用的提交方法是post,提交方式是form表单自带的onsubmit,因此,在我们点击注册按钮的时候,会默认直接跳转到index.php去,所以要达到检测所有注册的值不为空的时候,我们跳转到index.php,否则的话,我们将阻止默认事件~~,js代码如下:

    $("#codeImg").on("click",function(){
        $(this).attr("src","code.php?t="+new Date());
    })
    // 提交事件
    $("#theForm").on("submit",function(e){
        $("input").each(function(index,key){
            if(!$(key).val()){
                e.preventDefault();
            }
        })
    })
    

     在这里,我在改变验证码src的时候,加了一个时间戳,让别人无法访问,这是出于安全的着想。

    然后到了连接数据库,我采用的数据库是mysql,所以在链接数据库的时候,方法要注意一下格式

    首先我们要注意控制代码的编码格式:

    header("Content-Type:text/html;charset=utf8");
    

     然后链接数据库用户名密码:

     $url = "localhost:3306";
        $root = "root";
        $password = "";
    
        // 链接数据库
        $conn = mysql_connect($url,$root,$password);
        //返回的是资源标记符
        if(!$conn){
            echo "数据库链接失败";
            exit();//退出
        }
        mysql_query("set names utf8");
        mysql_select_db("study");
    

      接下来是获取html表单传送过来的值,进行检测

        $username = $_POST["username"];
        $password1 = $_POST["password1"];
        $password2 = $_POST["password2"];
        $nickname = $_POST["nickname"];
        $email = $_POST["email"];
    

    然后先把相关的信息存储为sql语句

        // 数据库操作语句
        $sql_2 = "INSERT INTO `blog_user`(`id`, `username`, `nickname`, `email`, `password`) VALUES (null,'$username','$nickname','$email','$password1')";
    

      

    然后检测数据库里面是否存在用户名称和邮箱,这个应该是唯一的,应该检测

        $sql_1 = "SELECT * FROM `blog_user` WHERE username = '$username' and email = '$email'";
        $result = mysql_query($sql_1);
        $row = mysql_fetch_assoc($result);
      if($password1 == $password2){
            if($row['username'] != $username && $row['email'] !=$email){
                //用户名和邮箱应该都是唯一的
                $result_2 = mysql_query($sql_2);
                echo "操作成功";
            //     echo "<script>setTimeout(function(){
            //     window.location.href = 'success.html';
            // },5000)</script>";
            }
            else{
                echo "用户名或者邮箱以存在!";
                // echo "<script>setTimeout(function(){
                //     window.location.href = 'blog.html';
                //     },5000)</script>";
            }
        }else{
            echo "两次密码不一致!";
            // echo "<script>setTimeout(function(){
            //     window.location.href = 'blog.html';
            // },5000)</script>";
        }
    

      至此,所以的工作就完成了。

    PS:其实我的写法里面还有很多缺陷,如果是大型的购物网站,注册登录一般都是在一个庞大的页面进行的,所以出于性能考虑,可以换成用ajax请求,而不是使用form表单提交,下次我讲展示如何用ajax写一个注册的效果。

    如若转载,请声明出处:http://www.cnblogs.com/programerHuan/p/4956730.html

  • 相关阅读:
    pikachu--XSS绕过
    pikachu--XSS盲打
    pikachu--XSS(案例三:获取键盘记录)
    pikachu--XSS(案例二:钓鱼攻击)
    pikachu--XSS(案例一:cookie的窃取和利用)
    pikachu--Burt Force(暴力破解)
    pikachu--XSS(跨站脚本)(反射型,存储型,DOM型)
    XSS(跨站脚本)概述
    DVWA--XSS(Reflected)、XSS(Stored)
    DVWA--CSRF(跨站请求伪造)
  • 原文地址:https://www.cnblogs.com/programerHuan/p/4956730.html
Copyright © 2020-2023  润新知