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 相关文章推荐
PHP url 加密解密函数代码
Aug 26 PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
PHP面向对象程序设计类的定义与用法简单示例
Dec 27 PHP
php PDO属性设置与操作方法分析
Dec 27 PHP
PHP微信支付结果通知与回调策略分析
Jan 10 PHP
php/JS实现的生成随机密码(验证码)功能示例
Jun 06 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
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
php通过strpos查找字符串出现位置的方法
2015/03/17 PHP
php常用图片处理类
2016/03/16 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
几个高效,简洁的字符处理函数
2007/04/12 Javascript
js 加载时自动调整图片大小
2008/05/28 Javascript
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
Javascript 浮点运算精度问题分析与解决
2014/03/26 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
jQuery实现的回车触发按钮事件功能示例
2018/03/25 jQuery
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
python自动化工具日志查询分析脚本代码实现
2013/11/26 Python
Python3 单行多行万能正则匹配方法
2019/01/07 Python
对Python中一维向量和一维向量转置相乘的方法详解
2019/08/26 Python
python获取栅格点和面值的实现
2020/03/10 Python
澳大利亚墨尔本的在线时装店:LORETA
2018/09/14 全球购物
幼儿园门卫岗位职责
2014/02/14 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
市政管理求职信范文
2014/05/07 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
四风对照检查材料范文
2014/09/27 职场文书
奖学金个人总结
2015/03/04 职场文书
2015年大学生工作总结
2015/04/21 职场文书
读《皮囊》有感:理解是对他人的最大的善举
2019/11/14 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python