我为我的网页游戏创建了一个简单的代码,没有错误,但代码的某些部分不起作用。不起作用的部分是最后两个 if 语句,它不会给用户反物质,但会打印出正确的消息。为什么它不能正确更新数据库?
代码:
///////////////////////////////BLACKBOX////////////////
function buyblackbox(){
global $USER, $PLANET, $LNG, $UNI, $CONF,$resource,$pricelist;
$blackbox = HTTP::_GP('blackbox', 0);
$price = 10000 * $blackbox;
$loli = mt_rand(1,2);
if ($price < 0) {
$this->printMessage("Hack attempt.", true, array('game.php?page=premium', 2));
}
if($USER['antimatter'] < $price){
$this->printMessage("You do not have enough antimatter", true, array('game.php?page=premium', 2));
die();
}
elseif($blackbox < 0){
$this->printMessage("Hack attempt.", true, array('game.php?page=premium', 2));
die();
}else{
$USER['antimatter'] -= $price;
$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkbox` = '".$loli."', `antimatter` = `antimatter` - '".$price."' WHERE `id` = ".$USER['id'].";");
if($USER['darkbox'] == 1)
{
$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkmatter` = `darkmatter` - '".$price."' WHERE `id` = ".$USER['id'].";");
$this->printMessage('vins nem sit has succesfully be bought', true, array('game.php?page=premium', 2));
}
if($USER['darkbox'] == 2)
{
$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkmatter` = `darkmatter` + '".$price."' WHERE `id` = ".$USER['id'].";");
$this->printMessage('BlackBox has succesfully be bought', true, array('game.php?page=premium', 2));
}
}
die();
}
/////////////////////////////////END BLACKBOX///////////////////////
最佳答案
我认为你需要更改数据库查询,以便剩余反物质的计算在代码中完成,而不是作为 SQL 查询的一部分......
$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkmatter` = ". ($USER['antimatter'] - $price) ." WHERE `id` = ".$USER['id']);
请注意,您需要引用 $USER['antimatter']
变量...我在原始答案中错过了这一点。
本质上,您的原始代码创建了一个如下所示的 SQL 查询:
UPDATE [Users] SET `darkmatter` = `darkmatter` - [Price] WHERE `id` = [UserId]
而它应该看起来像这样:
UPDATE [Users] SET `darkmatter` = [Cost - Price] WHERE `id` = [UserId]
[方括号]中的位在“代码中”进行处理,例如像$Price
这样的变量,像$USER['antimatter'] - $price这样的表达式
.
说实话,您可能应该阅读 SQL 注入(inject)攻击... https://en.wikipedia.org/wiki/SQL_injection
<小时/>正如德鲁提到的,您也将您的号码视为字符串......我已经更新了我的答案以反射(reflect)这一点(并且还删除了分号!)
关于php - 我的 IF 语句有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31102590/