实战突击
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.6 用户注册模块设计

2.6.1 用户注册模块概述

留言本为了更好地与用户进行交流和沟通,创建了一个用户注册模块,通过用户注册模块,可以有效地对用户信息进行采集,并将合法的用户信息保存到指定的数据表中,实现与用户的长期沟通和交流。用户注册模块的运行结果如图2.12所示。

图2.12 用户注册模块的运行结果

2.6.2 JavaScript脚本验证表单元素

在用户注册模块中,必不可少的就是要对用户输入的信息进行判断,首先判断用户填写的注册信息中哪些是必须填写的,哪些可以不填写,然后进一步判断输入的信息是否合理合法,如判断输入的邮箱的格式是否正确、判断输入的电话号码是否有效等。对表单中提交数据进行判断最常用的方法就是使用JavaScript脚本,也可以使用正则表达式。下面讲解在本模块中是如何通过JavaScript脚本实现表单提交数据验证的。

操作原理是:在form表单中调用onSubmit事件,通过该事件调用指定的JavaScript脚本,执行chkinput()自定义函数,实现对表单中提交数据的验证。判断输入的内容是否为空,判断内容格式是否正确,如果正确则继续执行,否则将弹出提示对话框,并将鼠标的焦点指定到出错的位置。具体的JavaScript脚本代码如下:

代码位置:光盘\MR\02\reg.php

        <script language="javascript">
                function chkinput(form){           //定义一个函数
                      if(form.usernc.value==""){   //判断usernc文本框中的值是否为空
                      alert("请输入用户昵称!");   //如果为空则输出“请输入用户昵称”
                      form.usernc.focus();         //返回到tel文本框
                      return(false);
                    }
                    if(form.userpwd.value==""){
                        alert("请输入注册密码!");
                      form.userpwd.focus();
                      return(false);
                      }
                      if(form.userpwd1.value==""){
                        alert("请输入重复密码!");
                      form.userpwd1.focus();
                      return(false);
                      }
                    if(form.userpwd.value!=form.userpwd1.value){
                      alert("密码与确认密码不同!");
                      form.userpwd.focus();
                      return(false);
                      }
                        var i=form.email.value.indexOf("@");
                  var j=form.email.value.indexOf(".");
                  if((i<0)||(i-j>0)||(j<0)){
                      alert("请输入正确的E-mail地址!");
                      form.email.select();
                      return(false);
                  }
                  return(true);                 //提交表单
                  }
                        </script>

在上述代码中,只是列举了JavaScript中的部分内容,并且在对电话号码进行判断时,只是判断其是是否为数字,没有进一步判断电话号码的格式是否正确。如果想要更加准确地判断电话号码的格式是否正确,可以采用下面的方法:

通过正则表达式的preg_match()函数,在表单提交处理页中对电话号码进行判断。

preg_match()函数的语法格式如下:

        int preg_match ( string pattern, string subject [, array matches [, int flags]] )

preg_match()函数的参数说明如表2.5所示。

表2.5 preg_match()函数的参数说明

通过preg_match()函数判断电话号码的格式是否正确的方法如下:首先定义一个用于判断电话号码格式的正则表达式。代码如下:

        /^(\d{3}-)(\d{8})$|^(\d{4}-)(\d{7})$|^(\d{4}-)(\d{8})$/

正则表达式的功能分析如下:使用“^”和“$”对字符串进行边界的限制,对区号从字符串的开始进行匹配,对其他号码则从字符串的末尾开始进行匹配;将括号“()”中的内容作为一个原子使用;使用“\d”来匹配一个数字,区号为3或4个数字,其他数字为7或8个;使用“{}”来对前字符进行重复匹配;使用“|”对匹配的模式进行选择,分成3个模式。

然后将该正则表达式应用到preg_match()函数中,对表单提交的电话号码进行判断,如果正确则继续执行,否则弹出提示信息,并返回到表单提交页。代码如下:

        <?php
        $tel="0431-84978981";                         //定义一个电话号码的变量
        if(preg_match("/^(\d{3}-)(\d{8})$|^(\d{4}-)(\d{7})$|^(\d{4}-)(\d{8})$|^(\d{
        11})$/",$tel,$counts)){
              echo "您输入的电话号码格式正确!";        //输出字符串
        }else{
              echo "<script>alert('您输入的电话号码的格式不正确!!');history.back()
              </script>";
        }
        ?>

2.6.3 用户注册模块实现过程

注册模块的实现过程非常简单,首先阅读注册声明;然后填写用户注册的用户名和密码,提交后由系统判断输入的用户名是否被占用,如果未被占用则可以继续注册,将数据提交到表单处理页进行处理;最后将用户注册的信息保存到指定的数据表中。

用户注册模块由两个文件组成:reg.php文件用于填写详细的注册信息;savereg.php文件用于对表单中提交的数据进行处理,将数据保存到指定的数据表中。

在savereg.php文件中,首先连接数据库,然后获取表单中提交的数据,并且判断提交的用户名是否被占用,最后将提交的数据进行处理,并将数据保存到指定的数据表中。程序代码如下:

代码位置:光盘\MR\02\ savereg.php

        <?php
        session_start();                     //启用SESSION支持
        if(isset($_SESSION['userword'])){     //获取登录的版主名称
        echo "<script>alert('在同一台机器上,不允许同时使用用户名和管理员进行登录!');
        window.location.href='index.php';</script>";//给出用户与版主不能同时登录的信息
        }else{
        include_once("conn/conn.php");               //包含数据库文件
        $usernc=$_POST["usernc"];                    //调用注册时提交的用户名称
        //查询用户表中已注册用户的名称是否与当前提交的用户名相同
        $sql=mysql_query("select usernc from tb_user where usernc='".$usernc."'",$conn);
        $info=mysql_fetch_array($sql);               //输出查询的数据
                if($info){
          //相同的给出提示
          echo "<script>alert('对不起,你的昵称已经被占用!');history.back();</script>";
          exit;
                            }
        $ip=$_SERVER["REMOTE_ADDR"];
        if(mysql_query("insert into tb_user(usernc,userpwd,truename,email,qq,tel,ip,
        address,face,regtime,sex,usertype)
        values('".$usernc."','".md5(trim($_POST["userpwd"]))."','".$_POST["truename"
        ]."','".$_POST["email"]."','".$_POST["qq"]."','".$_POST["tel"]."','".$ip."',
        '".$_POST["address"]."','".$_POST["face"]."','".date("Y-m-d H:i:s")."','".
        $_POST["sex"]."','0')",$conn))
        {
          $_SESSION["unc"]=$usernc;
        echo "<script>alert('注册成功!');window.location.href='index.php'</script>";
        }else{
          echo "<script>alert('注册失败!');history.back();</script>";
          }
        }
        ?>