没有合适的资源?快使用搜索试试~ 我知道了~
php,会员注册登录模块.docx
0 下载量 153 浏览量
2022-11-30
19:16:14
上传
评论
收藏 377KB DOCX 举报
温馨提示
试读
41页
php,会员注册登录模块.docx
资源推荐
资源详情
资源评论
所谓"人过留名,雁过留声",几乎每个动态交互式的网站都有一个注册模块用来
保存用户信息,并提供一个登录模块以供注册用户登录。本章将建立一个注册程
序,以实现用户的登录和注册。
通过本章的学习,读者将了解:
— 如何建立 HTML 表单;
— PHP 如何获取用户填写的信息;
— 如何建立 PHP 与 MySQL 数据库的连接;
— 如何使用 PHP 往数据库添加记录及如何在数据库中查找记录;
— 如何使用 JavaScript 脚本语言在客户端编程;
— 如何使用正则表达式进行数据验证;
— PHP 如何使用 Session 来记住用户的登录信息;
— 数据库处理错误的调试方法。
通过本章的学习,读者将对 PHP 网络编程有一个总体性的认识,为以后章节的
学习打下良好的基础。
2.1 建立用户信息表
网站的开发是一个以数据为中心的开发过程,所以数据库的设计非常重要,在进
行编程之前一定要做好需求分析和数据库设计。
本例将在 MySQL 安装时自动建立的 test 数据库中建立一张名为 t_user 的用户信
息表。
t_user 的表结构如表 2-1 所示。
表 2-1 表 t_user 的结构
列 名
数 据 类 型
长 度
允 许 空
默 认 值
字 段 说 明
f_username
char
50
否
无
用户名,主键
f_password
char
50
否
无
用户密码
f_name
char
50
否
无
用户姓名
f_email
char
50
否
无
用户 E-mail 地址
f_logintime
s
int
4
否
0
登录次数
f_lasttime
datetime
8
是
最后登录时间
f_loginip
char
19
是
最后登录 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。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Registering form</title>
</head>
<body>
<form name="frmRegister" method="post" action="register.php">
<table width="330" border="0" align="center" cellpadding="5" bgcolor= "#eeeeee">
<tr>
<td width="40%">用户名:</td>
<td><input name="username" type="text" id="username"> </td>
</tr>
<tr>
<td>密码:</td>
<td><input name="pwd" type="password" id="pwd"></td>
</tr>
<tr>
<td>重复密码:</td>
<td><input name="repeat_pwd" type="password" id="repeat_pwd"></td>
</tr>
<tr>
姓名:
<td><input name="name" type="text" id="name"></td>
</tr>
<tr>
<td>Email:</td>
<td><input name="email" type="text" id="email"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" name="Submit" value="提交">
<input type="reset" name="reset" value="重置"></td>
</tr>
</table>
</form>
</body>
</html>
注意以上这段代码中以粗体标出的部分,其中"charset=gb2312"告诉浏览器本页
使用 gb2312 编码(即简体中文)来显示文本内容,而使用
标签括起来的这一部分就是 HTML 表单的内容。标签的 name 属性用以指出表单
的名称,以便客户端编程时引用表单内容;method 属性指出表单内的数据 将以
何种方式提交到服务器端,常用的提交方式有两种,一种是 get 方式,另一种就
是本例中使用的 post 方式,默认的是 get 方式,这两种方式的区别后面 会给出
详 细 讲 述 ; action 属 性 指 出 表 单 内 的 数 据 将 提 交 给 谁 来 处 理 , 本 例 中 的
action="register. php"即指出表单内的数据将提交给 register.php 文件,也就是说
表单所在的文件本身将处理这些数据。
用户注册界面如图 2-1 所示。
列 名
数 据 类 型
长 度
允 许 空
默 认 值
字 段 说 明
f_username
char
50
否
无
用户名,主键
f_password
char
50
否
无
用户密码
f_name
char
50
否
无
用户姓名
f_email
char
50
否
无
用户 E-mail 地址
f_logintime
s
int
4
否
0
登录次数
f_lasttime
datetime
8
是
最后登录时间
f_loginip
char
19
是
最后登录 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>标签之前输入以下代码:
<?php
if (!empty($username) ) { // 有内容才输出
echo "您填写的信息是:<br>\n";
echo "用户名: $username <br>\n";
echo "密码: $pwd <br>\n";
echo "重复密码: $repeat_pwd <br>\n";
echo "姓名: $name <br>\n";
echo "Email: $email <br>\n";
}
?>
这就是获取客户端提交的用户信息的全部代码。运行后,在表单中输入各项信息
并单击"提交"按钮,最后页面内容如图 2-2 所示。
图 2-2 获取用户信息后的页面
PHP 中的字符串有两种定界符,即单引号"'"和双引号"""。单引号是强引用定界
符,两个单引号间的一切字符都被解释为相应的字符;双引号是弱引 用定界符,
两个双引号间的变量会以相应的变量值替换,一些特殊的字符也会进行相应的转
义,如"\n"会在输出时产生一个新行。另外,读者注意"\n"只是 使 PHP 运行后产
生的 HTML 源代码的相应位置启动一个新行,而标签<br>将使得浏览器显示的页
面的相应位置启动一个新行。初学网页编程的 开发者,尤其是 C 语言开发者,
易混淆二者。
2.3.2 建立 PHP 与 MySQL 数据库的连接
获取到用户输入的信息后,就该把这些信息记录到数据库中。不过在此之前,需
要先建立 PHP 与 MySQL 数据库的连接。
在 PHP 中要建立与 MySQL 数据库的连接,需要使用 mysqli 构造函数,其调用原
型是:
class mysqli {
__construct ( [string host [, string username [, string passwd [, string dbname [, int
port [, string socket]]]]]] )
}
参数 host 指出 MySQL 数据库服务器,一般用IP地址(也可以是主机名,如localhost)
指出服务器所在的机器。参数 username 和 password 分别指定连接时使用的用
户名和密码。参数 dbname 指定当前连接要使用的数据库。默认情况下,PHP 将
连接到服务器的 3306 端口,开 发人员可以通过参数 port 指定使用其他的端口
号。参数 socket 较为少用,它可以进一步指定所用的套接字或命名管道。
在调用 mysqli 构造函数之后,应当调用 mysqli_connect_errno()函数检查数据库
连接是否建立成功,该函数原型是:
int mysqli_connect_errno ( void )
该函数返回的是最后一次建立连接时产生的错误代码,如果成功则返回 0,返回
其他值说明产生了某种类型的错误。调用 mysqli_connect_error()函数可以获得具
体的错误信息。
另外,如果在建立数据库连接时没有指定 dbname 参数,则还必须调用类 mysqli
的成员函数 select_db(),以指定使用数据库服务器的哪一个数据库。该函数的原
型是:
bool select_db ( string database_name)
调用如果成功返回 TRUE,失败返回 FALSE。参数 database_name 指定要使用的数
据库名称。
当操作完数据库后,还要调用类 mysqli 的成员函数 close()来关闭之前打开的数据
库连接,从而释放连接资源。虽然在 PHP 脚本执行完毕时,PHP 会自动关闭数据
库连接,但是及时关闭数据库连接是一个更好的编程习惯。
本例中,连接并使用数据库的代码如下:
// 调用 mysqli 的构造函数建立连接,同时选择使用数据库'test'
$db = @new mysqli("127.0.0.1", "developer", "123456", "test");
// 检查数据库连接
if (mysqli_connect_errno()) {
echo "数据库连接失败!<br>\n";
echo mysqli_connect_error();
exit; // 退出程序,后面的所有语句将不再执行
}
printf("Host information: %s <br/><br/>\n", $db->host_info);
//...... 一些操作数据库数据的语句
剩余40页未读,继续阅读
资源评论
智慧安全方案
- 粉丝: 3649
- 资源: 59万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功