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



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


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

根据上面的分析,设计会员数据表。

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()函数之后的代码将不被执行。

        PDOphp提供的数据库操作类,功能十分强大。

        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







LxBlog 多用户博客个人主页系统,一套基于php+mysql 数据库平台架构的多用户博客系统,该系统融合了Blog的最新元素,拥有强大的个人主页系统,独立的二级域名功能,灵活的用户模版系统,丰富的朋友圈和个性相册功能。 部分修正改进功能 1.改进个人页面的日志列表页的摘要 2.改进相册个人后台发表方式 3.改进音乐前台列表页为显示歌曲列表,点击试听后弹出播放窗口,取消音乐上传 4.改进个人首页中显示所加入朋友圈的更新信息功能  5.改进最新推送的文章在朋友圈的其他圈友中显示功能  6.改进日志同时推送到多个朋友圈的支持功能 7.改进朋友圈系统页列表、会员排行列表 8.改进朋友圈系统页 9.改进圈主推荐文章列表 10.改进写朋友圈写文章功能,即在圈子中加入"写文章"功能,转入个人后台编写,写文章后默认推送到该圈子 11.改进朋友圈邀请功能 12.改进头像大小控制 13.改进书签功能 部分新增功能: 1.增加日志、评论、留言表情 2.增加验证问题 3.增加在article.php页面中和该文章tag相关的文章 4.增加tags广告词锁定 5.增加列表页"隐藏日志","好友可见日志" 链接. 6.增加心情,天气在发表日志页 7.增加"上一篇","下一篇",在文章阅读页 8.增加"转移个人分类"功能,在个人后台日志列表页 9.增加日志管理的搜索功能 10.增加附件批量上传 11.增加文件和商品集成格式在日志发布过程中 12.增加相册前台图片列表页,单个图片显示页面 13.增加相册个人页面单图显示页面功能,增加图片播放器 14.增加短消息功能 15.增加系统首页博客文章、人数、今日文章数、评论数量的显示 16.增加最新博客内容在论坛首页的显示 17.增加个人分类在论坛推送到blog的文章 18.增加推送设定,即当博客向论坛推送时,管理员可以设置只允许推送至哪个或者哪些版块 19.增加随机访问列表 20.增加好友日志更新列表,在个人日志页面 21.增加可视化风格编辑 22.增加论坛文集 23.增加找回密码功能 24.增加好友分类 25.增加摘要分界符 26.增加自定义关键字链接 27.增加博主回复评论 28.增加转载功能
★国人的骄傲★国产大型开源多用户博客系统 关于 X3-BLOG X3BLOG: 国内效率最快的AJAX多用户博客系统 国内搜索引擎最强大的多用户博客系统 国内唯一支持所有浏览器的多用户博客系统 国内唯一应用AJAX+XML+XSL三种技术于一体的博客系统 X3-BLOG 是基于XML+XSLT+AJAX技术构建的开源多用户博客门户系统,服务器端采用当前最流行的动态网页开发语 言之一ASP.NET(C#) 2.0编写,支持多种数据库,包括SQLSERVER2000\SQLSERVER2005\ORACLE\MYSQL\DB2等,默认使用 SQLSERVER2000。 X3-BLOG 遵从 GENERAL PUBLIC LICENSE(GPL) 开源协议,这意味着可以修改程序的一个或几个副本或程式的任何 部分,以此形成基於这些程式的衍生作品。必须在修改过的档案中附有明显的说明:您修改了此一档案及任何修改的 日期。 您必须让您发布或出版的作品,包括本程式的全部或一部分,或内含本程式的全部或部分所衍生的作品,允许 第三方在此许可证条款下使用,并且不得因为此项授权行为而收费。 功能与特点 X3-BLOG完美的利用了浏览器的XML解析技术,完全实现数据和界面的分离,使网络传输数据量大大减少,加载速 度远远超过了市面上所有的BLOG产品,有效的减轻了服务器的带宽压力,服务器端使用四大动态网站开发语言中速度 最快的ASP.NET(C#)编写,屏弃了传统的控件开发方式,所有执行过程采用单向流的生成方式,使其对服务器CPU及内 存资源的占用降至最低水平,并通过gzip压缩进一步缩减服务器的网络带宽消耗,提高响应速度 。 无Session设计杜绝了用户会话无故丢失的尴尬,客户端关联的会话加密方式带来了用户数据的高安全性,独特的 XSL结构设计,彻底消除了跨站脚本攻击的隐患,杜绝恶意代码的执行,同时保证了文章内容的完整性。 DIV+CSS布局,交互方式采用当前最流行的AJAX技术,所有操所在一个页面完成,并实现了AJAX的最高应用—— AjaxUpload,所有操作一气呵成,带来前所未有的用户体验。 简洁的主题与皮肤开发技术,更合理的模块化设计,大大减轻了后续开发的难度,使模板开发变得轻而易举。 自主研发的中文分词技术,速度超过3MB/s,准确率达到90%以上,大大超过网上各种开源中文分词技术,几乎可 以和中科院的ICTCLAS相媲美,结合当前最成熟的Lucene的.net版本,实现了功能强大执行快速的全文检索引擎。 兼容性 兼容市面上所有主流浏览器(包括google Chrome浏览器) 演示地址: http://blog.muchool.com 官方下载: http://www.shinechain.com.cn/downloads/software.htm 在线查看完整源代码: http://www.muchool.com/project/X3BLOG_DYHB/1.1.0.beta1.htm 版本更新内容 * 使用开源UrlRewrite筛选器Ionic's Isapi Rewriter替换了商业的ISAPI Rewriter * 修正了一处安装为虚拟目录时的路径指向错误 * 加入了类似QQ空间的相册上下翻页功能 * 加入了大量的服务器端和脚本代码注释 * 实现对最新的Google Chrome浏览器的支持 * 优化了安装程序,杜绝了对安装目标设置ASP.NET版本是导致IIS进程崩溃的现象 * 解决了作为虚拟目录执行时的web.config继承问题 * 修正了多处目录指向错误 * 增加对虚拟目录的支持 * 加入了安装项目 * 修正了后太管理中上传图片不能访问的错误 后台用户名:admin 密码:123456
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值