search
Homephp教程php手册PHP网页游戏学习之Xnova(ogame)源码解读(三)

这篇文章主要介绍了PHP网页游戏Xnova(ogame)源码解读的用户注册页面,需要的朋友可以参考下

四、 用户注册(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()基本相同,就不详细写了,自己看下吧。至此,用户注册流程就分析完了。

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Tools

EditPlus Chinese cracked version

EditPlus Chinese cracked version

Small size, syntax highlighting, does not support code prompt function

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use