Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我的IF语句有问题吗_Php_Mysql_Arrays_Database_If Statement - Fatal编程技术网

Php 我的IF语句有问题吗

Php 我的IF语句有问题吗,php,mysql,arrays,database,if-statement,Php,Mysql,Arrays,Database,If Statement,我为我的网络游戏创建了一个简单的代码,没有错误,但部分代码不起作用。不起作用的部分是最后两个if语句,它不会向用户提供反物质,但会打印出正确的消息。为什么它不能正确地更新数据库 代码: //黑盒//////////////// 函数buybackbox(){ 全球$USER、$PLANET、$LNG、$UNI、$CONF、$resource、$pricelist; $blackbox=HTTP::_GP('blackbox',0); $price=10000*$blackbox; $loli=百

我为我的网络游戏创建了一个简单的代码,没有错误,但部分代码不起作用。不起作用的部分是最后两个if语句,它不会向用户提供反物质,但会打印出正确的消息。为什么它不能正确地更新数据库

代码:

//黑盒////////////////
函数buybackbox(){
全球$USER、$PLANET、$LNG、$UNI、$CONF、$resource、$pricelist;
$blackbox=HTTP::_GP('blackbox',0);
$price=10000*$blackbox;
$loli=百万兰特(1,2);
如果($price<0){
$this->printMessage(“黑客尝试”,true,数组('game.php?page=premium',2));
}
如果($USER['antimater']<$price){
$this->printMessage(“您没有足够的反物质”,true,数组('game.php?page=premium',2));
模具();
}
elseif($blackbox<0){
$this->printMessage(“黑客尝试”,true,数组('game.php?page=premium',2));
模具();
}否则{
$USER['antimater']-=$price;
$GLOBALS['DATABASE']->query(“UPDATE.USERS.”设置'darkbox`='“$loli.”,'antimatter`='antimatter`-'“$price.”其中'id`='.'$USER['id'.'”;”;
如果($USER['darkbox']==1)
{
$GLOBALS['DATABASE']->query(“UPDATE.USERS.”设置'darkmatter`='darkmatter`-'“$price.”其中'id`='.$USER['id']。;”;
$this->printMessage('vins nem sit已成功购买',true,数组('game.php?page=premium',2));
}
如果($USER['darkbox']==2)
{
$GLOBALS['DATABASE']->query(“UPDATE.USERS.”设置'darkmatter`='darkmatter`+'“$price.”其中'id`='“$USER['id']。”;”;
$this->printMessage('BlackBox已成功购买',true,数组('game.php?page=premium',2));
}
}
模具();
}
/////////////////////////////////端黑盒///////////////////////

我认为您需要更改DB查询,以便在代码中计算剩余反物质,而不是作为SQL查询的一部分

$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkmatter` = ". ($USER['antimatter'] - $price) ." WHERE `id` = ".$USER['id']);
注意:您需要引用
$USER['antimater']
变量。。。我在最初的回答中没有提到这一点


基本上,您的原始代码创建的SQL查询如下所示:

UPDATE [Users] SET `darkmatter` = `darkmatter` - [Price] WHERE `id` = [UserId]
UPDATE [Users] SET `darkmatter` = [Cost - Price] WHERE `id` = [UserId]
而它应该是这样的:

UPDATE [Users] SET `darkmatter` = `darkmatter` - [Price] WHERE `id` = [UserId]
UPDATE [Users] SET `darkmatter` = [Cost - Price] WHERE `id` = [UserId]
其中,[方括号]中的位是“在代码中”处理的,例如变量
$Price
,表达式
$USER['antimater']-$Price

老实说,您可能应该了解SQL注入攻击



正如Drew提到的,您也将数字视为字符串。。。我已经更新了我的答案以反映这一点(并删除了分号!)

也许我理解错了,或者你只是误解了我的想法,问题是当我将下面的代码应用到我的网站上时,它不会起任何作用

$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkmatter` = ". ($USER['antimatter'] - $price) ." WHERE `id` = ".$USER['id']);

我编写的这段代码只是为了测试它,不是最终的代码,我想看看它是否有效,但它不会改变数据库中的任何东西,它只是打印出消息,仅此而已,darkmatter中没有任何变化。只有下面的全局方法才有效

$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkbox` = '".$loli."', `antimatter` = `antimatter` - '".$price."' WHERE `id` = ".$USER['id'].";");
我不明白我做错了什么