2015-06-28 71 views
0

我爲我的網頁遊戲創建了一個簡單的代碼,沒有錯誤,但代碼的某些部分不起作用。不工作的部分是最後兩條if語句,它不會給用戶一個反物質,但它會打印出正確的信息。爲什麼它不會正確更新數據庫?我的IF語句有問題

CODE:

///////////////////////////////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/////////////////////// 

回答

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


正如德魯提到,你也是治療你的電話號碼作爲字符串...我有我的答案更新反映了這一點(和也去掉了分號!)

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'].";"); 

此代碼,我只是測試它不是最終的代碼所做的,我想看看它的工作原理,但它不會在DB改變anythings,它只是打印出消息,多數民衆贊成,暗物質沒有變化。只有全球下面的作品

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

而我不明白我在做什麼錯?