【公开源代码】详述多用户博客程序开发过程-step by step(2)-【会员系统(注册)】
2014-07-07 20:08
579 查看
本程序没有做前期策划,我的想法是在程序的编写过程逐渐形成,当然这是非常错误的做法。总体目标是做一个自由、轻松,面向专业人士的多用户精品博客。
经过短暂的考虑,决定第一阶段先编写会员系统。基于自由、轻松这两个目标,舍弃具有约束性的会员积分系统,并尽最大可能减少会员的权限限制;做一个会员等级划分,用于区分管理员、专业人士与非专业人士。
根据上面的分析,设计会员数据表。
id:存储会员id,默认自动增加,作为数据表的主键。
username:存储会员账号,值唯一。
email:存储会员邮箱,值唯一。
password:存储加密后的会员密码。
isactivate:存储会员激活信息。
rank:存储会员等级。
date:存储会员注册日期。
会员注册
会员注册页面所面对的都是初始用户,网站粘性小。这个页面要做的简洁,尽量减少用输入量。不要试图在这个页面收集大量的用户信息。注册页面收集三条用户信息,用户名、密码、邮箱,用户轻松完成注册。
创建用户注册register.php文件。
register.php
通过include_once函数引入config.php文件,config.php定义了数据库、绝对路径等参数,这些参数发生变化时,只需修改config.php文件可以了,不用去修改所有用到该参数文件。
第二个include_once函数引入register.html文件。html是发送给用户的内容,同时将用户的输入发送给服务器,在这里html便是在用户浏览器上显示的注册页面,并在用户点击注册按钮后,将用户输入发送给服务器。在register.html相对路径之前的ABSPATH是在config.php文件中定义的常量,相当于根目录的绝对路径。使用绝对路径可以提高程序的执行速度。
第三个include_once函数引入function.php文件,该文件中定义下文中用到的userRegister()函数。
文件中的if语句用于判断用户是否提交了注册按钮。用户点击了注册按钮,便调用userRegister()函数,并将收集的用户信息传递给函数。语句中的isset()函数的用途是检测变量是否已被配置,返回布尔值。$_POST变量用于收集来自method="post"的表单中的值。
用户注册实际上userRegister()函数完成。
function userRegister($username,$password,$useremail){
//$username=str_replace(" ", "" ,$username); //删除空格
$password=md5(str_replace(" ", "",$password)); //删除空格
$useremail=str_replace(" ", "" ,$useremail); //删除空格
if (!preg_match('/^[a-z\d_]{5,20}$/i', $username)){
exit ('<script language="javascript">alert("会员账号格式不正确。")</script>');
}
if (!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$useremail)){
exit ('<script language="javascript">alert("邮箱格式不正确。")</script>');
}
$dsn='mysql:host='.DB_HOST.';'.'dbname='.DB_NAME;
$pdo=new PDO($dsn,DB_USER,DB_PASSWORD);
$sql="SELECT count(*) FROM members WHERE username='$username'";
$pdo->query('set names utf8');
$query=$pdo->query($sql);
$row=$query->fetch();
if($row[0]){
exit ('<script language="javascript">alert("用户名已存在。")</script>');;
}
$sql="SELECT count(*) FROM members WHERE email='$useremail'";
$pdo->query('set names utf8');
$query=$pdo->query($sql);
$row=$query->fetch();
if($row[0]){
exit ('<script language="javascript">alert("该邮箱已被使用。")</script>');;
}
$sql="INSERT INTO members (username,email,password) VALUES ('$username','$useremail','$password')";
if($pdo->query($sql)){
header('Location: login.php');
}
else {
header('Location: register.php');
}
}
首先,对传递过来的数值进行了处理,使用str_replace()函数删除数值中的空格,使用md5()函数对密码做了加密。preg_match()函数对会员账号及邮箱做正则表达式的匹配,验证其格式是否合法。
exi()t输出一个消息并且退出当前脚本。当用户输入数据不合法时,便输出提示信息,并退出,exit()函数之后的代码将不被执行。
PDO是php提供的数据库操作类,功能十分强大。
query()是PDO的成员函数,执行一条sql语句,执行成功会返回一个PDOStatement
object,否则返回FALSE。
fetch()从一个 PDOStatement
对象相关的结果集中获取下一行。在这里,可以理解为fetch()函数是将sql语句的执行结果放在一个数组里面。
header()函数,此处用于页面的跳转。
SELECT name1, name2 FROM tableWHERE name2='value'和INSERT INTO table (name1, name2) VALUES ('value1','value2')是两条sql语句,分别用于从数据库查询结果、向数据库中插入数据,MySql手册对这两条语句有着极为详细说明。
我只是简要说明所用到函数的功能,PHP手册对其用法有详细的说明,还有范例。
本节源码
http://pan.baidu.com/s/1qWwMY9u
QQ:1265619045
本程序没有做前期策划,我的想法是在程序的编写过程逐渐形成,当然这是非常错误的做法。总体目标是做一个自由、轻松,面向专业人士的多用户精品博客。
经过短暂的考虑,决定第一阶段先编写会员系统。基于自由、轻松这两个目标,舍弃具有约束性的会员积分系统,并尽最大可能减少会员的权限限制;做一个会员等级划分,用于区分管理员、专业人士与非专业人士。
根据上面的分析,设计会员数据表。
id:存储会员id,默认自动增加,作为数据表的主键。
username:存储会员账号,值唯一。
email:存储会员邮箱,值唯一。
password:存储加密后的会员密码。
isactivate:存储会员激活信息。
rank:存储会员等级。
date:存储会员注册日期。
会员注册
会员注册页面所面对的都是初始用户,网站粘性小。这个页面要做的简洁,尽量减少用输入量。不要试图在这个页面收集大量的用户信息。注册页面收集三条用户信息,用户名、密码、邮箱,用户轻松完成注册。
创建用户注册register.php文件。
register.php
<?php /** * * 会员注册 * 2014-7-6 * */ //引入文件 include_once 'config.php'; //引入配置文件 include_once(ABSPATH . 'html/register.html'); //引入会员注册界面 require_once(ABSPATH . 'function.php'); if(isset($_POST['submit'])){ //判断是否提交 //调用userRegister()函数,位于function.php userRegister($_POST['username'],$_POST['password'],$_POST['useremail']); } ?>
通过include_once函数引入config.php文件,config.php定义了数据库、绝对路径等参数,这些参数发生变化时,只需修改config.php文件可以了,不用去修改所有用到该参数文件。
第二个include_once函数引入register.html文件。html是发送给用户的内容,同时将用户的输入发送给服务器,在这里html便是在用户浏览器上显示的注册页面,并在用户点击注册按钮后,将用户输入发送给服务器。在register.html相对路径之前的ABSPATH是在config.php文件中定义的常量,相当于根目录的绝对路径。使用绝对路径可以提高程序的执行速度。
第三个include_once函数引入function.php文件,该文件中定义下文中用到的userRegister()函数。
文件中的if语句用于判断用户是否提交了注册按钮。用户点击了注册按钮,便调用userRegister()函数,并将收集的用户信息传递给函数。语句中的isset()函数的用途是检测变量是否已被配置,返回布尔值。$_POST变量用于收集来自method="post"的表单中的值。
用户注册实际上userRegister()函数完成。
function userRegister($username,$password,$useremail){
//$username=str_replace(" ", "" ,$username); //删除空格
$password=md5(str_replace(" ", "",$password)); //删除空格
$useremail=str_replace(" ", "" ,$useremail); //删除空格
if (!preg_match('/^[a-z\d_]{5,20}$/i', $username)){
exit ('<script language="javascript">alert("会员账号格式不正确。")</script>');
}
if (!preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$useremail)){
exit ('<script language="javascript">alert("邮箱格式不正确。")</script>');
}
$dsn='mysql:host='.DB_HOST.';'.'dbname='.DB_NAME;
$pdo=new PDO($dsn,DB_USER,DB_PASSWORD);
$sql="SELECT count(*) FROM members WHERE username='$username'";
$pdo->query('set names utf8');
$query=$pdo->query($sql);
$row=$query->fetch();
if($row[0]){
exit ('<script language="javascript">alert("用户名已存在。")</script>');;
}
$sql="SELECT count(*) FROM members WHERE email='$useremail'";
$pdo->query('set names utf8');
$query=$pdo->query($sql);
$row=$query->fetch();
if($row[0]){
exit ('<script language="javascript">alert("该邮箱已被使用。")</script>');;
}
$sql="INSERT INTO members (username,email,password) VALUES ('$username','$useremail','$password')";
if($pdo->query($sql)){
header('Location: login.php');
}
else {
header('Location: register.php');
}
}
首先,对传递过来的数值进行了处理,使用str_replace()函数删除数值中的空格,使用md5()函数对密码做了加密。preg_match()函数对会员账号及邮箱做正则表达式的匹配,验证其格式是否合法。
exi()t输出一个消息并且退出当前脚本。当用户输入数据不合法时,便输出提示信息,并退出,exit()函数之后的代码将不被执行。
PDO是php提供的数据库操作类,功能十分强大。
query()是PDO的成员函数,执行一条sql语句,执行成功会返回一个PDOStatement
object,否则返回FALSE。
fetch()从一个 PDOStatement
对象相关的结果集中获取下一行。在这里,可以理解为fetch()函数是将sql语句的执行结果放在一个数组里面。
header()函数,此处用于页面的跳转。
SELECT name1, name2 FROM tableWHERE name2='value'和INSERT INTO table (name1, name2) VALUES ('value1','value2')是两条sql语句,分别用于从数据库查询结果、向数据库中插入数据,MySql手册对这两条语句有着极为详细说明。
我只是简要说明所用到函数的功能,PHP手册对其用法有详细的说明,还有范例。
本节源码
http://pan.baidu.com/s/1qWwMY9u
QQ:1265619045
相关文章推荐
- 【公开源代码】详述多用户博客程序开发过程-step by step(3)-【会员系统(登录)】
- 【公开源代码】详述多用户博客程序开发过程-step by step(1)-【配置服务器】
- 博客程序开发历程【2】-[会员系统-会员注册]{附源码}
- 单机版简易考试系统开发过程讲解(C#注册机、用户注册、考试系统、有偿提供全部源码)
- 对自己的博客做了更新,专注:php程序开发、php商城开发、PHP会员系统开发,地点:南京
- 博客程序开发历程【4】-[会员系统-找回密码]{附源码}
- 博客程序开发历程【6】-[会员系统-密码重置]{附源码}
- C#_会员管理系统:开发五(用户注册)
- 单机版简易考试系统开发过程讲解(C#注册机、用户注册、考试系统、有偿提供全部源码)
- 单机版简易考试系统开发过程讲解(C#注册机、用户注册、考试系统、有偿提供全部源码)
- 博客程序开发历程【7】-[会员系统-注销登录]{附源码}
- 单机版简易考试系统开发过程讲解(C#注册机、用户注册、考试系统、有偿提供全部源码)
- 博客程序开发历程【6】-[会员系统-设置中心]{附源码}
- 博客程序开发历程【3】-[会员系统-登录验证]{附源码}
- 单机版简易考试系统开发过程讲解(C#注册机、用户注册、考试系统、有偿提供全部源码)
- OAF二次开发step by step(四)--OAF二次开发程序的部署
- 利用wojilu框架仿一个网站的全过程(Step by Step利用wojilu框架开发网站系列---序言)
- 使用Eclipse+MyEclipse+MySql开发一个用户注册登录系统
- AgileEAS.NET平台开发Step By Step系列-药店系统-索引
- 魅族m8开发 step by step(1)(让程序跑起来)