2015-11-08 30 views
0

現在我想做一個簡單的奴隸遊戲買/賣功能。如何提高我的if else語句爲我的附加程序功能

現在我的數據庫:T1, 我的數據是:

+----------+------------+------------+-----------+------------+----------+ 
| uid  | exp  | lvl  | master | slaveby |bytime | 
+----------+------------+------------+-----------+------------+----------+ 
| 1  | 123  | 1   | 10  | 20   |12345  | 
| 20  | 456  | 1   | 1   | 0   |12345  | 
| 10  | 111  | 2   | 0   | 1   |12222  | 
+------------------------------------------------------------------------+ 

uid是用戶ID。 type int(11)

exp是用戶體驗。 type int(11)

lvl是用戶級別。 type int(11)

master表示現在用戶是哪個uid的主人。 type int(11)

slaveby表示現在用戶是哪個uid的奴隸。 type int(11)

bytime是用戶slaveby的時間。 type int(11)

在表格數據中,我們可以知道第1行是用戶1是用戶10的主人,也是用戶20的奴隸。

現在我的編碼就像這樣運行。

if ($_GET['mod'] == 'hireSlave'){ 
     mysql_query("UPDATE ".DB::table('game_goldwar_labour')." SET touid = '".$_GET['touid']."', bytime = '".$_GET[timestamp]."' WHERE uid = '".$_GET[uid]."'"); 
     mysql_query("UPDATE ".DB::table('game_goldwar_labour')." SET byuid = '".$_GET[uid]."', bytime = '".$_GET[timestamp]."' WHERE uid = '".$_GET['touid']."'"); 
}; 

但是這個編碼用戶只能是1個用戶的主人。

我想改變時用戶lvl 2,可以是2從機的主,lvl 3,可以是3從設備的主,maximun 5從設備,並且還需要bytime分離。因爲我在bytime達到最大時間時設置,從屬用戶會自動失控。如果該從站位於第二個插槽中,則將從站第二個插槽更新爲0(通常是從站的用戶ID,但因爲已經失控,因此設置爲0),此後,當插槽可用時。根據水平和時隙可用

時隙是0

並且當用戶lvl 1,不能得到2從機。

如果我使用if/else語句,將會是一個巨大的腳本。

那麼如何改善呢?謝謝。

+0

谷歌SQL注入並從不接受用戶有能力提供的數據。另外,mysql_query在PHP 7中已被棄用和刪除。 – Spechal

回答

0

您需要使用單獨的表格來存儲從站,例如具有列:uid slave bytime(您也不需要同時存儲slaveby和master,這是冗餘的)。插入新記錄時,請檢查主服務器的級別以確保計數小於從服務器的數量,否則不要插入新記錄。我猜你在slave上只需要一個master就可以在slave上需要一個UNIQUE約束。

爲了獲取碩士學位的奴隸簡單地做:

SELECT slave FROM slaves WHERE uid = {uid} 

有關讀取從站的主簡單地做:

SELECT uid FROM slaves WHERE slave = {slaveid} 

編輯:忘了提一件事,你真的應該做一些輸入逃逸,驗證你是否已經使用PDO等數據庫層來避免SQL注入。

+0

謝謝,這是一個很好的解決方案,我已經做了DB層,並且intval/htmlspeciachar所有的_GET都避免了注入,tq。 –

相關問題