PHP网页游戏学习之Xnova(ogame)源码解读(三)


Posted in PHP onJune 23, 2014

四、 用户注册(reg.php)

在看用户注册之流程之前,我把表的用途做个简单说明,现在只是大概的说明,后面我们再仔细了解,大家可以记下这个说明。

game_aks          联合攻击组记录表,攻击完成删除数据
game_alliance      联盟表
game_annonce      公告表,基本无用
game_banned        Ban玩家表
game_buddy        好友表
game_chat          聊天记录表
game_config        系统参数表
game_errors        错误日志表
game_fleets        舰队活动记录表,活动完成删除数据
game_galaxy        星系表
game_iraks        星际导弹活动表,活动完成删除数据
game_lunas        月球列表
game_messages      消息表
game_notes        笔记表
game_planets      星球列表,包括月球
game_rw            战报表
game_statpoints    积分表
game_users        用户表

现在我们开始用户注册流程,一开始又可以看到定义了两个常量,

define('INSIDE' , true);
define('INSTALL' , false);

INSIDE是用来防止攻击的,值为true;INSTALL是用来记录现在是否处于安装游戏的进程中,值为false。接下来又是Include两个文件,extension.inc和common.php;然后又是load语言文件reg.mo。在后面的章节里,我不再介绍了前面这段代码,大家已经明了了。

下面声明了两个函数,用来发送注册成功后的信息,包括用户名和密码等。

function sendpassemail($emailaddress, $username, $password)
function mymail($to, $title, $body, $from = '')

现在介绍Xnova源码里面经常用到的一个结构,下面是伪代码说明,

if ($_POST) { //如果用户有输入
//这里是有用户输入后执行过程
}else{
//这里是无用户输入后的执行过程,包括页面第一次显示的时候
}

我们看用户注册流程,为了说明前面的结构,特意贴了代码。和前面我们讲过的一样,先gettemplate文件,然后parse出来并显示页面。

if ($_POST) {
 //代码略
} else {
 $parse = $lang;
 $parse['servername'] = $game_config['game_name'];
 $page = parsetemplate(gettemplate('registry_form'), $parse);
 display ($page, $lang['registry'], false);
}

下面看用户输入信息后的流程,一堆的if都是判断用户输入的信息是否合法,并用$errors变量记录错误的数量,$errorlist变量记录错误的消息。如果$errors不为零就输出错误信息;如果没有错误,就进入下面的流程:

1. 检查用户名是否有非法字符

2. 检查Email是否有非法字符

3. 检查星球名是否有非法字符

4. 加密用户的密码,md5

5. 往表users中INSERT用户信息

6. 取得刚刚插入生成的用户ID号备用

7. 一大段代码功能,找一个空的星球坐标给这个用户作为母星,并使用函数CreateOnePlanetRecord()创建星球,这里要使用三个系统参数LastSettedGalaxyPos、LastSettedSystemPos、LastSettedPlanetPos,看命名就应该清楚,分别是最后星系、最后太阳系、最后行星位置

8. 更新users表中的星球ID为刚刚生成的星球ID

9. 向这个玩家发送欢迎信息

10. 向这个玩家发送注册信息邮件

11. 显示注册成功页面,注册结束

以上流程,我们都可以找到对应的代码,代码难度不大,所以没有列出来。函数CreateOnePlanetRecord()以后详细介绍,现在说了反而头大,函数SendSimpleMessage()我们现在看一下,声明在SendSimpleMessage.php文件中。

function SendSimpleMessage ( $Owner, $Sender, $Time, $Type, $From, $Subject, $Message) {
 global $messfields;
 if ($Time == '') {
 $Time = time();
 }
 if ($Sender == null){
 $Sender = 0;
 }
 $QryInsertMessage = "INSERT INTO {{table}} SET ";
 $QryInsertMessage .= "'message_owner' = ". $Owner .", ";
 $QryInsertMessage .= "'message_sender' = ". $Sender .", ";
 $QryInsertMessage .= "'message_time' = " . $Time . ", ";
 $QryInsertMessage .= "'message_type' = ". $Type .", ";
 $QryInsertMessage .= "'message_from' = '". addslashes( $From ) ."', ";
 $QryInsertMessage .= "'message_subject' = '". addslashes( $Subject ) ."', ";
 $QryInsertMessage .= "'message_text' = '". addslashes( $Message ) ."';";
 doquery( $QryInsertMessage, 'messages');
 $QryUpdateUser = "UPDATE {{table}} SET ";
 $QryUpdateUser .= "'".$messfields[$Type]."' = '".$messfields[$Type]."' + 1, ";
 $QryUpdateUser .= "'".$messfields[100]."' = '".$messfields[100]."' + 1 ";
 $QryUpdateUser .= "WHERE ";
 $QryUpdateUser .= "'id' = '". $Owner ."';";
 doquery( $QryUpdateUser, 'users');
}

函数的功能是往messages表中插入详细消息,并更新users表的消息数量,很明了,呵呵。另外一个函数message()的功能和display()基本相同,就不详细写了,自己看下吧。至此,用户注册流程就分析完了。

PHP 相关文章推荐
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
php Sql Server连接失败问题及解决办法
Aug 07 PHP
php实现查询百度google收录情况(示例代码)
Aug 02 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
WordPress开发中用于标题显示的相关函数使用解析
Jan 07 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
Aug 08 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
PHP实现的分页类定义与用法示例
Jul 05 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(二)
Jun 23 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(一)
Jun 23 #PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
Jun 23 #PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 #PHP
ThinkPHP实现事务回滚示例代码
Jun 23 #PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
Jun 23 #PHP
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
Jun 23 #PHP
You might like
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
php array_search() 函数使用
2010/04/13 PHP
php从数组中随机抽取一些元素的代码
2012/11/05 PHP
JavaScript中的property和attribute介绍
2011/12/26 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
js获取url中"?"后面的字串方法
2014/05/15 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
浅析AngularJS Filter用法
2015/12/28 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
js Date()日期函数浏览器兼容问题解决方法
2017/09/12 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
Vue实现底部侧边工具栏的实例代码
2018/09/03 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
2018/10/18 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
Python isinstance判断对象类型
2008/09/06 Python
简述Python2与Python3的不同点
2018/01/21 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
flask session组件的使用示例
2018/12/25 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
私有程序集与共享程序集有什么区别
2013/04/05 面试题
综合办公室个人的自我评价
2013/12/22 职场文书
环保倡议书500字
2014/05/15 职场文书
幼儿园教师自荐书
2015/03/06 职场文书
2015年客服工作总结范文
2015/04/02 职场文书
2017年大学生寒假社会实践活动总结
2016/04/06 职场文书
公开致歉信
2019/06/24 职场文书