Php 如何改进附加程序函数的if-else语句
现在我想做一个简单的奴隶游戏买卖功能 现在我的数据库是T1, 我的数据是:Php 如何改进附加程序函数的if-else语句,php,mysql,if-statement,Php,Mysql,If Statement,现在我想做一个简单的奴隶游戏买卖功能 现在我的数据库是T1, 我的数据是: +----------+------------+------------+-----------+------------+----------+ | uid | exp | lvl | master | slaveby |bytime | +----------+------------+------------+-----------+------------
+----------+------------+------------+-----------+------------+----------+
| 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
是用户体验<代码>类型int(11)
lvl
是用户级<代码>类型int(11)
master
表示现在用户是哪个uid的master<代码>类型int(11)
slaveby
表示现在用户是哪个uid的从属用户<代码>类型int(11)
bytime
是用户slaveby
的时间<代码>类型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个从机的主机,最多5个从机,而且bytime
也需要分离。因为我设置了bytime
何时达到最大时间,所以从属用户将自动逃跑。如果此从机位于第二个插槽中,则会将第二个从机插槽更新为0(通常为从机的用户id,但由于已经失控,因此设置为0),之后,当主设备租用从机时,插槽可用
插槽基于级别可用,插槽为0
当用户lvl
1时,也不能获得2个从机
如果我使用If/else语句,将是一个巨大的脚本
那么如何改进呢?谢谢。您需要使用一个单独的表来存储从机,例如有列:
uid slave bytime
(您也不需要同时存储slaveby和master,这是多余的)。插入新记录时,请检查主记录的级别,以确保计数小于从属记录的数量,否则不要插入新记录。我猜,如果一个从设备一次只能有一个主设备,那么在从设备中需要一个唯一的约束
要获取主人的奴隶,只需执行以下操作:
SELECT slave FROM slaves WHERE uid = {uid}
SELECT uid FROM slaves WHERE slave = {slaveid}
要获取从属主机,只需执行以下操作:
SELECT slave FROM slaves WHERE uid = {uid}
SELECT uid FROM slaves WHERE slave = {slaveid}
编辑:忘了提一件事,如果还没有,你真的应该做一些输入转义和验证,并使用像PDO这样的DB层来避免SQL注入。Google SQL注入,永远不要接受用户能够提供的数据。另外,mysql_query在php7中被弃用和删除。谢谢,这是一个很好的解决方案,我已经做了DB层和intval/htmlspeciachar,所有这些都是为了避免注入,tq。