php - 我的 IF 语句有问题

标签 php mysql arrays database if-statement

我为我的网页游戏创建了一个简单的代码,没有错误,但代码的某些部分不起作用。不起作用的部分是最后两个 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/

相关文章:

php - WebHook 中的无限循环

java - 在 MySQL 表中插入多行 : Threading vs BatchUpdate

php - 将选项从下拉列表插入数据库

php - 确定用户是在 php 聊天应用程序中登录还是注销

php - 如果sql记录存在则无法调用php函数

php - 从 actionscrip3 到 php 的变量传递

javascript - 从数组中获取不包括先前选择的随机值

javascript - IndexOf 指示对象不存在,即使它应该存在

c++ - 比较两个整数数组并检查它们是否具有相等的值

php - 如何确保特定帖子的用户仅点击一次我的投票链接?