您的位置:首页 > 编程语言

【公开源代码】详述多用户博客程序开发过程-step by step(2)-【会员系统(注册)】

2014-07-07 20:08 579 查看


本程序没有做前期策划,我的想法是在程序的编写过程逐渐形成,当然这是非常错误的做法。总体目标是做一个自由、轻松,面向专业人士的多用户精品博客。

经过短暂的考虑,决定第一阶段先编写会员系统。基于自由、轻松这两个目标,舍弃具有约束性的会员积分系统,并尽最大可能减少会员的权限限制;做一个会员等级划分,用于区分管理员、专业人士与非专业人士。
根据上面的分析,设计会员数据表。



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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐