PHP 用户注册与登录.docx
- 文档编号:30660117
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:21
- 大小:27.27KB
PHP 用户注册与登录.docx
《PHP 用户注册与登录.docx》由会员分享,可在线阅读,更多相关《PHP 用户注册与登录.docx(21页珍藏版)》请在冰豆网上搜索。
PHP用户注册与登录
PHP用户注册与登录
前言
网站用户注册与登录是很常用的一个功能,本节教材就以此来演示一下PHP中如何开发用户注册与登录模块。
本节需要用到的重点PHP基础知识:
∙PHP中预定义$_POST和$_GET全局变量来接受用户表单和URL参数信息,关于PHP表单更多信息参见《PHP表单》。
∙PHP正则表达式用于判断用户的输入是否符合要求,关于正则表达式更多信息参见《PHP正则表达式》。
∙用户登录检测通过后以session来保持用户的登录信息,关于session更多信息参见《PHPSession》或者《PHPCookie》。
需求分析
主要功能分为用户注册、用户登录、用户退出、用户中心四个部分。
用户注册
用户注册主要功能有:
1.注册信息表单填写界面javascript脚本初步检测用户输入的注册信息。
2.注册处理模块检测注册信息是否符合要求。
3.检测用户名是否已存在。
4.将注册信息写入数据表,注册成功。
用户登录
用户登录主要功能有:
1.登录表单界面javascript脚本初步检测用户输入的登录信息。
2.登录模块将用户输入信息与数据库数据进行核对。
3.登录信息正确,则提示登录成功,将用户设置为登录状态(session)。
4.登录信息不正确,则提示登录失败,用户可以再次尝试登录。
用户退出
用户退出主要功能有:
1.无条件注销session。
用户中心
用户退出主要功能有:
1.判断用户是否登录,如果没有登录,则转向到登录界面。
2.如果登录是登录状态,则读出用户相关信息。
数据表设计
根据功能需求分析,用于记用户信息的user表需要的字段如下:
字段名
数据类型
说明
uid
mediumint(8)
主键,自动增长
username
char(15)
注册用户名
password
char(32)
MD5加密后的密码
varchar(40)
用户Email
regdate
int(10)
用户注册时间戳
建表SQL参考如下:
CREATETABLE`user`(
`uid`mediumint(8)unsignedNOTNULLauto_increment,
`username`char(15)NOTNULLdefault'',
`password`char(32)NOTNULLdefault'',
`email`varchar(40)NOTNULLdefault'',
`regdate`int(10)unsignedNOTNULLdefault'0',
PRIMARYKEY(`uid`)
)ENGINE=MyISAMDEFAULTCHARSET=utf8AUTO_INCREMENT=1;
页面布局
各页面功能如下:
∙reg.html:
用户注册信息填写表单页面
∙conn.php:
数据库连接包含文件
∙reg.php:
用户注册处理程序
∙login.html:
用户登录表单页面
∙login.php:
用户登录表单页面
∙my.php:
用户中心
注册页面
reg.html负责收集用户填写的注册信息。
教程里只列出关键的代码片段,完整的代码附在本节最后。
注册表单
javascript检测代码
--
functionInputCheck(RegForm)
{
if(RegForm.username.value=="")
{
alert("用户名不可为空!
");
RegForm.username.focus();
return(false);
}
if(RegForm.password.value=="")
{
alert("必须设定登录密码!
");
RegForm.password.focus();
return(false);
}
if(RegForm.repass.value!
=RegForm.password.value)
{
alert("两次密码不一致!
");
RegForm.repass.focus();
return(false);
}
if(RegForm.email.value=="")
{
alert("电子邮箱不可为空!
");
RegForm.email.focus();
return(false);
}
}
//-->
CSS样式
html{font-size:
12px;}
fieldset{width:
520px;margin:
0auto;}
legend{font-weight:
bold;font-size:
14px;}
label{float:
left;width:
70px;margin-left:
10px;}
.left{margin-left:
80px;}
.input{width:
150px;}
span{color:
#;}
注册表单效果图:
数据库连接
php
$conn=@mysql_connect("localhost","root","root123");
if(!
$conn){
die("连接数据库失败:
".mysql_error());
}
mysql_select_db("test",$conn);
//字符转换,读库
mysql_query("setcharacterset'gbk'");
//写库
mysql_query("setnames'gbk'");
?
>
注册处理
reg.php负责处理用户注册信息。
注册检测
if(!
isset($_POST['submit'])){
exit('非法访问!
');
}
$username=$_POST['username'];
$password=$_POST['password'];
$email=$_POST['email'];
//注册信息判断
if(!
preg_match('/^[\w\x80-\xff]{3,15}$/',$username)){
exit('错误:
用户名不符合规定。
history.back(-1);">返回'); } if(strlen($password)<6){ exit('错误: 密码长度不符合规定。 history.back(-1);">返回'); } if(! preg_match('/^w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*$/',$email)){ exit('错误: 电子邮箱格式错误。 history.back(-1);">返回'); } 本段代码首先检测是否POST提交访问该页,接下来根据注册要求(用户名3-15字符长度,支持汉字、字母、数字及_;密码不得少于6位)对用户提交的注册信息进行检测。 在检测用户名和电子邮箱时采用了正则检测,关于正则表达式更所信息请参看《PHP正则表达式》。 数据库交互 //包含数据库连接文件 include('conn.php'); //检测用户名是否已经存在 $check_query=mysql_query("selectuidfromuserwhereusername='$username'limit1"); if(mysql_fetch_array($check_query)){ echo'错误: 用户名',$username,'已存在。 history.back(-1);">返回'; exit; } //写入数据 $password=MD5($password); $regdate=time(); $sql="INSERTINTOuser(username,password,email,regdate)VALUES('$username','$password','$email', $regdate)"; if(mysql_query($sql,$conn)){ exit('用户注册成功! 点击此处 }else{ echo'抱歉! 添加数据失败: ',mysql_error(),' echo'点击此处 history.back(-1);">返回重试'; } 登录页面 login.html负责收集用户填写的登录信息。 javascript检测及CSS样式可参考reg.html,本部分略去,可直接查看最后附录的完整代码。 登录处理 login.php负责处理用户登录与退出动作。 //登录 if(! isset($_POST['submit'])){ exit('非法访问! '); } $username=htmlspecialchars($_POST['username']); $password=MD5($_POST['password']); //包含数据库连接文件 include('conn.php'); //检测用户名及密码是否正确 $check_query=mysql_query("selectuidfromuserwhereusername='$username'andpassword='$password'limit1"); if($result=mysql_fetch_array($check_query)){ //登录成功 $_SESSION['username']=$username; $_SESSION['userid']=$result['uid']; echo$username,'欢迎你! 进入 echo'点击此处 action=logout">注销登录! exit; }else{ exit('登录失败! 点击此处 history.back(-1);">返回重试'); } 该段代码首先确认如果是用户登录的话,必须是POST动作提交。 然后根据用户输入的信息去数据库核对是否正确,如果正确,注册session信息,否则提示登录失败,用户可以重试。 该段代码需要在页面开头启用session_start()函数,参见下面退出处理代码部分。 退出处理 处理用户退出的代码跟处理登录的代码都在login.php里。 session_start(); //注销登录 if($_GET['action']=="logout"){ unset($_SESSION['userid']); unset($_SESSION['username']); echo'注销登录成功! 点击此处 exit; } 该段代码在处理用户登录的代码之前,只允许以login.php? action=logout的方式访问,其他方式都认为是检测用户登录。 具体逻辑参看附录完整代码。 用户中心 my.php是用户中心,列在教程里作为用户登录检测参考。 php session_start(); //检测是否登录,若没登录则转向登录界面 if(! isset($_SESSION['userid'])){ header("Location: login.html"); exit(); } //包含数据库连接文件 include('conn.php'); $userid=$_SESSION['userid']; $username=$_SESSION['username']; $user_query=mysql_query("select*fromuserwhereuid=$useridlimit1"); $row=mysql_fetch_array($user_query); echo'用户信息: echo'用户ID: ',$userid,' echo'用户名: ',$username,' echo'邮箱: ',$row<'email'>,' echo'注册日期: ',date("Y-m-d",$row['regdate']),' echo' action=logout">注销登录 ? > PHP附录: 用户注册与登录完整代码 以下列出了用户注册与登录的完整代码,您也可以点击此处下载本节教程完整的源代码压缩包。 login.html DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN" "http: //www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> //www.w3.org/1999/xhtml"> html{font-size: 12px;} fieldset{width: 520px;margin: 0auto;} legend{font-weight: bold;font-size: 14px;} label{float: left;width: 70px;margin-left: 10px;} .left{margin-left: 80px;} .input{width: 150px;} span{color: #;} -- functionInputCheck(LoginForm) { if(LoginForm.username.value=="") { alert("请输入用户名! "); LoginForm.username.focus(); return(false); } if(LoginForm.password.value=="") { alert("请输入密码! "); LoginForm.password.focus(); return(false); } } //-->
';
';
';
';
';
';
';
';
';