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>"; } } ?>