簡體   English   中英

我的IF語句出了點問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM