9.3.1用户注册系统文件组织结构
9.3 用户注册系统的实现
用户注册系统是 WEB 系统中功能较为简单的系统,该系统为浏览器用户提供用户注册功能和用户登录功能。用户先打开注册页面,然后在注册页面中填写个人信息,按下提交按钮后,系统将用户提交的个人信息录入到数据库中。用户打开登录页面后,可以在登录页面中填写用户名和密码信息,按下提交按钮后,系统从数据库中查询是否存在该用户信息。
9.3.1 用户注册系统文件组织结构
在“C:\wamp\www\”目录下创建“register”目录作为用户注册系统的根目录。在“register”目录下,创建“functions”目录存放用户注册系统所需的文件上传函数和数据库服务器连接函数,创建“uploads”目录存放上传文件。用户注册系统的文件组织结构图如图9-13所示。

9.3.2 用户注册界面的实现
在“C:\wamp\www\register”目录下创建index.html页面作为用户注册系统的首页,在index.html文件中输入如下代码,用户注册页面的运行结果如图9-14所示。
<h2>用户注册系统</h2>
<hr/>
<form action="register.php" method="post" enctype="multipart/form-data">
用 户 名:
<input type="text" name="userName" size="20" maxlength="15" value="必须填写用户名" />
@
<select name="domain">
<option value="@163.com" selected>163.com</option>
<option value="@126.com">126.com</option>
</select>
<br/>
登录密码:
<input type="password" name="password" size="20" maxlength="15" />
<br/>
确认密码:
<input type="password" name="confirmPassword" size="20" maxlength="15" />
<br/>
选择性别:
<input name="sex" type="radio" value="male" checked />男
<input name="sex" type="radio" value="female" />女
<br/>
个人爱好:
<input name="interests[]" type="checkbox" value="music" checked />音乐
<input name="interests[]" type="checkbox" value="game" checked />游戏
<input name="interests[]" type="checkbox" value="film" />电影
<br/>
个人相片:
<input type="hidden" name="MAX_FILE_SIZE" value="1024" />
<input type="file" name="myPicture" size="25" maxlength="100" />
<br/>
备注信息 :
<textarea name="remark" cols="30" rows="4">请填写备注信息</textarea>
<br/>
<input type="submit" name="submit" value="注册按钮" />
<input type="reset" name="cancel" value="重新填写" />
</form>

9.3.3 数据库的实现
用户注册系统只需要一张用户表 users 表。在“C:\wamp\www\register”目录下创建 user.sql脚本文件,其SQL语句如下。
set table_type=InnoDB;
show variables like "table_type";
SET character_set_client = gbk ;
SET character_set_connection = gbk ;
SET character_set_database = gbk ;
SET character_set_results = gbk ;
SET character_set_server = gbk ;
SET collation_connection = gbk_chinese_ci ;
SET collation_database = gbk_chinese_ci ;
SET collation_server = gbk_chinese_ci ;
show variables like "character%";
show variables like "collation%";
create database register;
use register;
create table users(
user_id int primary key auto_increment,
userName char(20) not null unique,
password char(10) not null,
sex char(10) not null,
interests char(100),
my_picture char(200),
remark text
);
user.sql脚本文件首先设置存储引擎为InnoDB,然后设置字符集为gbk,接着创建register数据库,最后在register数据库中创建users表,该表的字段名与注册页面index.html中的HTML表单控件名一一对应。在MySQL Console命令窗口中输入命令“\. C:\wamp\www\register\ user.sql”运行user.sql脚本文件中的SQL语句,创建用户注册系统的数据库及数据库表。
9.3.4 制作用户注册系统所需的函数
将“自定义函数”章节中的文件上传函数所在的 fileSystem.php 程序文件拷贝到目录“C:\wamp\www\register\functions”下,将数据库服务器连接函数所在的 database.php 程序文件拷贝到目录“C:\wamp\www\register\functions”下,然后将 database.php 程序文件中的函数getConnection()中的PHP语句“$database = "users";”修改为“$database = "register";”。
9.3.5 用户注册功能的实现
在“C:\wamp\www\register”目录下创建register.php程序(程序流程图如图9-15所示),该程序实现以下功能。
(1)判断提交的表单数据是否超过post_max_size的配置,若超过,则反馈错误提示信息,然后退出程序的运行。
(2)收集index.html页面中表单提交的数据。
(3)判断提交数据中的密码信息和确认密码信息是否相等,若不相等,则反馈密码输入错误提示信息,然后退出程序的运行。
(4)连接数据库服务器。

(5)判断提交数据中的用户名信息是否已在数据库中注册,若已经注册,需反馈用户名被占用提示信息,然后退出程序的运行。
(6)只有成功将浏览器端的文件上传到服务器或没有上传文件时,才将用户信息注册到users表;否则反馈文件上传失败原因,然后退出程序的运行。
(7)从数据库中查找刚添加的用户信息,若查到则反馈成功注册提示信息;否则反馈注册失败提示信息,然后退出程序的运行。
register.php程序代码如下。
<?php
include_once("functions/fileSystem.php");
include_once("functions/database.php");
if(empty($_POST)){
exit("您提交的表单数据超过post_max_size的配置!<br/>");
}
$password = $_POST["password"];
$confirmPassword = $_POST["confirmPassword"];
if($password!=$confirmPassword){
exit("输入的密码和确认密码不相等!");
}
$userName = $_POST["userName"];
$domain = $_POST["domain"];
$userName = $userName.$domain;
//判断用户名是否占用
$userNameSQL = "select * from users where userName="$userName"";
getConnection();
$resultSet = mysql_query($userNameSQL);
if(mysql_num_rows($resultSet)>0){
closeConnection();
exit("用户名已经被占用,请更换其他用户名!");
}
//收集用户其他信息
$sex = $_POST["sex"];
if(empty($_POST["interests"])){
$interests = "";
}else{
$interests = implode(";",$_POST["interests"]);
}
$remark = $_POST["remark"];
$myPictureName = $_FILES["myPicture"]["name"];
//只有“文件上传成功”或“没有上传附件”时,才进行注册
$registerSQL = "insert into users values(null,"$userName","$password","$sex","$interests","$myPictureName","$remark")";
$message = upload($_FILES["myPicture"],"uploads");
if($message=="文件上传成功!"||$message=="没有选择上传附件!"){
mysql_query($registerSQL);
$userID = mysql_insert_id();
echo "用户信息成功注册!<br/>";
}else{
exit($message);
}
//从数据库中提取用户注册信息
$userSQL = "select * from users where user_id=$userID";
$userResult = mysql_query($userSQL);
if($user = mysql_fetch_array($userResult)){
echo "您注册的用户名为:".$user["userName"];
}else{
exit("用户信息注册失败!");
}
closeConnection();
?>
说明:register.php程序中用到的implode()函数实现了explode()函数相反的功能,implode()函数的用法参见“字符串处理”章节的内容。
9.3.6 用户登录页面的实现
在“C:\wamp\www\register”目录下创建 login.html 文件作为用户注册系统的登录页面,在login.html文件中输入如下代码,用户登录页面login.html的运行结果如图9-16所示。

<form action="login_process.php" method="post">
用 户 名:
<input type="text" name="userName" size="20" maxlength="15" value="请填写用户名及域名" />
<br/>
登录密码:
<input type="password" name="password" size="20" maxlength="15" />
<br/>
<input type="submit" value="登录" />
<input type="reset" value="重填" />
</form>
9.3.7 用户登录功能的简单实现
在“C:\wamp\www\register”目录下创建login_process.php程序(程序流程图如图9-17所示),该程序实现以下功能。
(1)收集登录页面login.html中表单提交的数据。
(2)连接数据库服务器。
(3)判断提交数据中的用户名和密码信息是否存在于数据库中。若存在,反馈用户名和密码输入正确提示信息;否则反馈用户名和密码输入错误提示信息。
(4)关闭数据库服务器连接。
login_process.php程序代码如下。
<?php
include_once("functions/database.php");
//收集表单提交数据
$userName = $_POST["userName"];
$password = $_POST["password"];
//连接数据库服务器
getConnection();
//判断用户名和密码是否输入正确
$sql = "select * from users where userName="$userName" and password="$password"";
$resultSet = mysql_query($sql);
if(mysql_num_rows($resultSet)>0){
echo "用户名和密码输入正确!登录成功!";
}else{
echo "用户名和密码输入错误!登录失败!";
}
closeConnection();
?>

上一篇:9.2.1数据库操作函数
下一篇:习题