[英]Something wrong with my 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注入攻擊... https://en.wikipedia.org/wiki/SQL_injection
正如Drew所提到的,您也將您的數字視為字符串...我已經更新了答案以反映這一點(並刪除了分號!)
也許我理解有些錯誤,或者您只是誤解了我的意思,但事實是,當我將以下代碼應用於我的網站時,它不會做任何事情
$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'].";");
而且我不明白我在做什么錯?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.