您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > php,会员注册登录模块
所谓人过留名,雁过留声,几乎每个动态交互式的网站都有一个注册模块用来保存用户信息,并提供一个登录模块以供注册用户登录。本章将建立一个注册程序,以实现用户的登录和注册。通过本章的学习,读者将了解:—如何建立HTML表单;—PHP如何获取用户填写的信息;—如何建立PHP与MySQL数据库的连接;—如何使用PHP往数据库添加记录及如何在数据库中查找记录;—如何使用JavaScript脚本语言在客户端编程;—如何使用正则表达式进行数据验证;—PHP如何使用Session来记住用户的登录信息;—数据库处理错误的调试方法。通过本章的学习,读者将对PHP网络编程有一个总体性的认识,为以后章节的学习打下良好的基础。2.1建立用户信息表网站的开发是一个以数据为中心的开发过程,所以数据库的设计非常重要,在进行编程之前一定要做好需求分析和数据库设计。本例将在MySQL安装时自动建立的test数据库中建立一张名为t_user的用户信息表。t_user的表结构如表2-1所示。表2-1表t_user的结构列名数据类型长度允许空默认值字段说明f_usernamechar50否无用户名,主键f_passwordchar50否无用户密码f_namechar50否无用户姓名f_emailchar50否无用户E-mail地址f_logintimesint4否0登录次数f_lasttimedatetime8是最后登录时间f_loginipchar19是最后登录IP在编程开发中,程序员的代码应当是自注释的,也就是代码能够向阅读者传达出自身作用的信息,额外的说明语句需要但不宜太多,否则会降低代码的可读性。在编程开发中,为每一个对象选择一个合适的名称是非常重要的,在进行数据库设计时为每张表及每个字段合适地命名也很重要。给表名和字段名提供一个合适的前缀可以显著提高代码的可读性,笔者就喜欢给表名加上前缀t_,为字段名加上前缀f_。很多开发者可能会为用户信息表添加一个int型自动增量字段(如f_uid)作为主键,但笔者认为这样做是弊大于利、得不偿失的。一来造成空间的浪费,二来时间效率上也有所降低。因为在实际开发过程中用户名是使用得最为频繁的查询条件,而众所周知在主键上进行的查询,其速度是最快的;使用自动增量字段为主键的话,在用户名作为条件的查询上则要先根据用户名查找到f_uid,再根据f_uid去查找所要的信息。无疑,这是一个吃力不讨好的选择。另外,很多熟悉其他类型数据库的开发者转而使用MySQL时仍喜欢使用Varchar类型的字段。其实如果空间不是非常紧张的话,在MySQL中一般情况下Char类型是更好的选择。一是Char型字段时间效率高,二是两者长度范围都在255个字符以内,空间上损失不会太大,再者在取出Char型字段数据时,数据库会自动丢弃多余的空格,因此使用上两者一样方便。2.2为注册建立HTML表单能够用于网页设计的工具有很多,从简单的Windows自带的记事本、写字板到号称网页三剑客之一的Macromedia公司出品的Dreamweaver都可以使用,这完全取决于开发人员的爱好。不过如果读者正在使用所见即所得的网页设计工具,而又有志成为一名专业的网络编程人员的话,笔者还是建议读者放弃这些工具,因为这些工具有一个统一的毛病就是把HTML代码排列得乱七八糟,极大地降低了代码的可读性;另外也会使开发人员对工具产生依赖性而不去记基本的HTML标签的使用。其实,HTML是极其简单的一门语言,标签数也不多,用心的话很快就能掌握。笔者一向比较喜欢UltraEdit,有兴趣的读者可以试用。注册页面的代码如下,输入这些内容并将其保存为register.php。htmlheadmetahttp-equiv=Content-Typecontent=text/html;charset=gb2312titleRegisteringform/title/headbodyformname=frmRegistermethod=postaction=register.phptablewidth=330border=0align=centercellpadding=5bgcolor=#eeeeeetrtdwidth=40%用户名:/tdtdinputname=usernametype=textid=username/td/trtrtd密码:/tdtdinputname=pwdtype=passwordid=pwd/td/trtrtd重复密码:/tdtdinputname=repeat_pwdtype=passwordid=repeat_pwd/td/trtr姓名:tdinputname=nametype=textid=name/td/trtrtdEmail:/tdtdinputname=emailtype=textid=email/td/trtrtdcolspan=2align=centerinputtype=submitname=Submitvalue=提交inputtype=resetname=resetvalue=重置/td/tr/table/form/body/html注意以上这段代码中以粗体标出的部分,其中charset=gb2312告诉浏览器本页使用gb2312编码(即简体中文)来显示文本内容,而使用标签括起来的这一部分就是HTML表单的内容。标签的name属性用以指出表单的名称,以便客户端编程时引用表单内容;method属性指出表单内的数据将以何种方式提交到服务器端,常用的提交方式有两种,一种是get方式,另一种就是本例中使用的post方式,默认的是get方式,这两种方式的区别后面会给出详细讲述;action属性指出表单内的数据将提交给谁来处理,本例中的action=register.php即指出表单内的数据将提交给register.php文件,也就是说表单所在的文件本身将处理这些数据。用户注册界面如图2-1所示。列名数据类型长度允许空默认值字段说明f_usernamechar50否无用户名,主键f_passwordchar50否无用户密码f_namechar50否无用户姓名f_emailchar50否无用户E-mail地址f_logintimesint4否0登录次数f_lasttimedatetime8是最后登录时间f_loginipchar19是最后登录IP在网页设计中,标签往往不像其字面意思那样用来制作一张表格,而是作为定位的工具,这时就要将其border属性设为0,也就是让表格不显示边框。标签的align属性也很有用,其作用是指明排列方式,有3个值可取:left,center和right,它们的意思很显然,勿庸赘述。另外,标签也具有这个属性,意义一样,而且更为常用。2.3处理注册数据本节将详细介绍PHP如何获取用户填写的数据信息,以及PHP如何连接数据库并将这些数据信息保存到数据库中。2.3.1获取用户填写的信息PHP有几个预定义的自动全局变量,这些变量各有用途,其中可以用来获取客户端提交的数据的变量有$_REQUEST,$_GET和$_POST。$_GET和$_POST分别用以获取客户端以get方式和以post方式提交的数据;而不管以什么方式提交上来的数据,$_REQUEST都可以取到。PHP中的全局变量在使用之前必须以global关键字进行声明,很多开发人员在使用全局变量时经常会因为忘了将其声明为global而出错。然而PHP的自动全局变量却是个例外,所谓自动,就是说在使用之前无须声明为global,直接就可以使用。还有一种其他PHP书籍介绍的获取客户端提交的数据的方式,即自动获取。该方式必须打开php.ini中的register_globals选项方能使用,而且更重要的是,在安全性上会给黑客以可乘之机,所以不推荐使用这种方式。现在开始书写获取用户信息数据的代码,打开上一节建立的register.php文件。在文件的开始输入以下代码(输入时注意文本的对齐,这是优良代码风格的体现):?php$username=$_POST['username'];$pwd=$_POST['pwd'];$repeat_pwd=$_POST['repeat_pwd'];$name=$_POST['name'];$email=$_POST['email'];?接下来,在body标签之后,form标签之前输入以下代码:?phpif(!empty($username)){//有内容才输出echo您填写的信息是:br\n;echo用户名:$usernamebr\n;echo密码:$pwdbr\n;echo重复密码:$repeat_pwdbr\n;echo姓名:$namebr\n;echoEmail:$emailbr\n;}?这就是获取客户端提交的用户信息的全部代码。运行后,在表单中输入各项信息并单击提交按钮,最后页面内容如图2-2所示。图2-2获取用户信息后的页面PHP中的字符串有两种定界符,即单引号'和双引号。单引号是强引用定界符,两个单引号间的一切字符都被解释为相应的字符;双引号是弱引用定界符,两个双引号间的变量会以相应的变量值替换,一些特殊的字符也会进行相应的转义,如\n会在输出时产生一个新行。另外,读者注意\n只是使PHP运行后产生的HTML源代码的相应位置启动一个新行,而标签br将使得浏览器显示的页面的相应位置启动一个新行。初学网页编程的开发者,尤其是C语言开发者,易混淆二者。2.3.2建立PHP与MySQL数据库的连接获取到用户输入的信息后,就该把这些信息记录到数据库中。不过在此之前,需要先建立PHP与MySQL数据库的连接。在PHP中要建立与MySQL数据库的连接,需要使用mysqli构造函数,其调用原型是:classmysqli{__construct([stringhost[,stringusername[,stringpasswd[,stringdbname[,intport[,stringsocket]]]]]])}参数host指出MySQL数据库服务器,一般用IP地址(也可以是主机名,如localhost)指出服务器所在的机器。参数username和password分别指定连接时使用的用户名和密码。参数dbname指定当前连接要使用的数据库。默认情况下,PHP将连接到服务器的3306端口,开发人员可以通过参数port指定使用其他的端口号。参数socket较为少用,它可以进一步指定所用的套接字或命名管道。在调用mysqli构造函数之后,应当调用mysqli_connect_errno()函数检查数据库连接是否建立成功,该函数原型是:intmysqli_connect_errno(void)该函数返回的是最后一次建立连接时产生的错误代码,如果成功则返回0,返回其他值说明产生了某种类型的错误。调用mysqli_connect_error()函数可以获得具体的错误信息。另外,如果在建立数据库连接时没有指定dbname参数,则还必须调用类mysqli的成员函数select_db(),以指定使用数据库服务器的哪一个数据库。该函数的原型是:boolselect_db(stringdatabase_name)调用如果成功返回TRUE,失败返回FALSE。参数database_name指定要使用的数据库名称。当操作完数据库后,还要调用类mysqli的成员函数close()来关闭之前打开的数据库连接,从而释放连接资源。虽然在PHP脚本执行完毕时,PHP会自动关闭数据库连接,但是及时关闭数据库连接是一个更好的编程习惯。本例中,连接并使用数据库的代码如下://调用mysqli的构造函数建立连接,同时选择使用数据库'test'$db=@new
本文标题:php,会员注册登录模块
链接地址:https://www.777doc.com/doc-6421138 .html