PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(三)
四、 用戶注冊(cè)(reg.php)
在看用戶注冊(cè)之流程之前,我把表的用途做個(gè)簡(jiǎn)單說明,現(xiàn)在只是大概的說明,后面我們?cè)僮屑?xì)了解,大家可以記下這個(gè)說明。
game_aks 聯(lián)合攻擊組記錄表,攻擊完成刪除數(shù)據(jù) game_alliance 聯(lián)盟表 game_annonce 公告表,基本無用 game_banned Ban玩家表 game_buddy 好友表 game_chat 聊天記錄表 game_config 系統(tǒng)參數(shù)表 game_errors 錯(cuò)誤日志表 game_fleets 艦隊(duì)活動(dòng)記錄表,活動(dòng)完成刪除數(shù)據(jù) game_galaxy 星系表 game_iraks 星際導(dǎo)彈活動(dòng)表,活動(dòng)完成刪除數(shù)據(jù) game_lunas 月球列表 game_messages 消息表 game_notes 筆記表 game_planets 星球列表,包括月球 game_rw 戰(zhàn)報(bào)表 game_statpoints 積分表 game_users 用戶表
現(xiàn)在我們開始用戶注冊(cè)流程,一開始又可以看到定義了兩個(gè)常量,
define('INSIDE' , true); define('INSTALL' , false);
INSIDE是用來防止攻擊的,值為true;INSTALL是用來記錄現(xiàn)在是否處于安裝游戲的進(jìn)程中,值為false。接下來又是Include兩個(gè)文件,extension.inc和common.php;然后又是load語(yǔ)言文件reg.mo。在后面的章節(jié)里,我不再介紹了前面這段代碼,大家已經(jīng)明了了。
下面聲明了兩個(gè)函數(shù),用來發(fā)送注冊(cè)成功后的信息,包括用戶名和密碼等。
function sendpassemail($emailaddress, $username, $password) function mymail($to, $title, $body, $from = '')
現(xiàn)在介紹Xnova源碼里面經(jīng)常用到的一個(gè)結(jié)構(gòu),下面是偽代碼說明,
if ($_POST) { //如果用戶有輸入 //這里是有用戶輸入后執(zhí)行過程 }else{ //這里是無用戶輸入后的執(zhí)行過程,包括頁(yè)面第一次顯示的時(shí)候 }
我們看用戶注冊(cè)流程,為了說明前面的結(jié)構(gòu),特意貼了代碼。和前面我們講過的一樣,先gettemplate文件,然后parse出來并顯示頁(yè)面。
if ($_POST) { //代碼略 } else { $parse = $lang; $parse['servername'] = $game_config['game_name']; $page = parsetemplate(gettemplate('registry_form'), $parse); display ($page, $lang['registry'], false); }
下面看用戶輸入信息后的流程,一堆的if都是判斷用戶輸入的信息是否合法,并用$errors變量記錄錯(cuò)誤的數(shù)量,$errorlist變量記錄錯(cuò)誤的消息。如果$errors不為零就輸出錯(cuò)誤信息;如果沒有錯(cuò)誤,就進(jìn)入下面的流程:
1. 檢查用戶名是否有非法字符
2. 檢查Email是否有非法字符
3. 檢查星球名是否有非法字符
4. 加密用戶的密碼,md5
5. 往表users中INSERT用戶信息
6. 取得剛剛插入生成的用戶ID號(hào)備用
7. 一大段代碼功能,找一個(gè)空的星球坐標(biāo)給這個(gè)用戶作為母星,并使用函數(shù)CreateOnePlanetRecord()創(chuàng)建星球,這里要使用三個(gè)系統(tǒng)參數(shù)LastSettedGalaxyPos、LastSettedSystemPos、LastSettedPlanetPos,看命名就應(yīng)該清楚,分別是最后星系、最后太陽(yáng)系、最后行星位置
8. 更新users表中的星球ID為剛剛生成的星球ID
9. 向這個(gè)玩家發(fā)送歡迎信息
10. 向這個(gè)玩家發(fā)送注冊(cè)信息郵件
11. 顯示注冊(cè)成功頁(yè)面,注冊(cè)結(jié)束
以上流程,我們都可以找到對(duì)應(yīng)的代碼,代碼難度不大,所以沒有列出來。函數(shù)CreateOnePlanetRecord()以后詳細(xì)介紹,現(xiàn)在說了反而頭大,函數(shù)SendSimpleMessage()我們現(xiàn)在看一下,聲明在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'); }
函數(shù)的功能是往messages表中插入詳細(xì)消息,并更新users表的消息數(shù)量,很明了,呵呵。另外一個(gè)函數(shù)message()的功能和display()基本相同,就不詳細(xì)寫了,自己看下吧。至此,用戶注冊(cè)流程就分析完了。
- PHP 編寫的 25個(gè)游戲腳本
- php 網(wǎng)頁(yè)游戲開發(fā)入門教程一(webgame+design)
- PHP游戲編程25個(gè)腳本代碼
- php數(shù)字游戲 計(jì)算24算法
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(一)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(二)
- PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(六)
- jQuery+PHP實(shí)現(xiàn)的擲色子抽獎(jiǎng)游戲?qū)嵗?/a>
- PHP實(shí)現(xiàn)扎金花游戲之大小比賽的方法
- php實(shí)現(xiàn)的簡(jiǎn)易掃雷游戲?qū)嵗?/a>
- php猜單詞游戲
相關(guān)文章
laravel-admin select框默認(rèn)選中的方法
今天小編就為大家分享一篇laravel-admin select框默認(rèn)選中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10PHP防止post重復(fù)提交數(shù)據(jù)的簡(jiǎn)單例子
這篇文章主要介紹了PHP防止post重復(fù)提交數(shù)據(jù)的簡(jiǎn)單例子,使用session記錄一個(gè)數(shù)值的方法實(shí)現(xiàn),需要的朋友可以參考下2014-06-06PHP讀取Excel內(nèi)的圖片(phpspreadsheet和PHPExcel擴(kuò)展庫(kù))
今天接到了一個(gè)從Excel內(nèi)讀取圖片的需求,這里介紹一下分別使用phpspreadsheet和PHPExcel擴(kuò)展庫(kù)來實(shí)現(xiàn)讀取Excel內(nèi)圖片的功能,感興趣的朋友一起看看吧2019-11-11php下拉選項(xiàng)的批量操作的實(shí)現(xiàn)代碼
這篇文章介紹了php下拉選項(xiàng)的批量操作的實(shí)現(xiàn)代碼,有需要的朋友可以參考一下2013-10-10php 文件上傳至OSS及刪除遠(yuǎn)程阿里云OSS文件
今天給大家介紹php 文件上傳至OSS及刪除遠(yuǎn)程阿里云OSS文件的方法,在刪除文件的時(shí)候大家記住千萬不要帶域名,具體操作示例參考下本文2021-07-07laravel csrf排除路由,禁止,關(guān)閉指定路由的例子
今天小編就為大家分享一篇laravel csrf排除路由,禁止,關(guān)閉指定路由的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-10-10Thinkphp5.0框架視圖view的循環(huán)標(biāo)簽用法示例
這篇文章主要介紹了Thinkphp5.0框架視圖view的循環(huán)標(biāo)簽用法,結(jié)合實(shí)例形式分析了thinkPHP5框架視圖view中的volist標(biāo)簽、foreach標(biāo)簽、for標(biāo)簽相關(guān)使用方法,需要的朋友可以參考下2019-10-10php使用cookie實(shí)現(xiàn)記住用戶名和密碼實(shí)現(xiàn)代碼
這篇文章主要介紹了php使用cookie實(shí)現(xiàn)記住用戶名和密碼實(shí)現(xiàn)代碼,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-04-04