我为我的网页游戏创建了一个简单的代码,没有错误,但代码的某些部分不起作用。不起作用的部件是最后两个if语句,它不会给用户一个反物质,但它打印出正确的消息。为什么它不能正确更新数据库?
CODE:
term
答案 0 :(得分:0)
我认为您需要更改数据库查询,以便剩余反物质的计算在代码中完成,而不是作为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注入攻击...... https://en.wikipedia.org/wiki/SQL_injection
正如Drew提到的那样,你也把你的号码视为一个字符串...我已经更新了我的答案以反映这一点(并且还删除了分号!)
答案 1 :(得分:0)
也许我理解错误的东西或者你只是把我的想法弄错了,事情就是当我将以下代码应用到我的网站时它什么都不做
$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkmatter` = ". ($USER['antimatter'] - $price) ." WHERE `id` = ".$USER['id']);
和
$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkmatter` = `darkmatter` - '".$price."' WHERE `id` = ".$USER['id'].";");
这个代码我只是测试它不是最终的代码,我想看看它是否有效,但它不会改变数据库中的任何东西,它只是打印出消息而这就是全部,暗物质没有变化。只有下面的GLOBAL可以使用
$GLOBALS['DATABASE']->query("UPDATE ".USERS." SET `darkbox` = '".$loli."', `antimatter` = `antimatter` - '".$price."' WHERE `id` = ".$USER['id'].";");
我不明白我做错了什么?