gpt4 book ai didi

php - 用户通过简单的 If 检查

转载 作者:行者123 更新时间:2023-11-30 23:03:54 24 4
gpt4 key购买 nike

我有一个浏览器游戏,你可以在其中升级你的 attack , defence , spiespatrol通过点击提交按钮。每次升级都需要 X 金币和 X 食物。这是游戏地址(希伯来语): http://www.mafia.co.il

在过去的几天里,一些用户找到了一种在没有足够金币/食物的情况下升级它的方法。结果是他们在游戏的资源中有负数。当然,我以为我屏蔽了这个选项。

此外,出于某种原因,他们能够升级 10 次以上 - 当您阅读代码时,您会发现我至少尝试阻止该选项。

请问有人知道问题出在哪里吗?

这是升级代码(我将希伯来文部分翻译成英文,我还添加了注释):

foreach 的原因循环是获取$_POST的名称.

elseif (isset($_POST['attack']) || isset($_POST['defence']) || isset($_POST['spies']) || isset($_POST['patrols']))  {
// Get user details
$ud = details($user_id);
foreach($_POST as $name => $val) {
// Number came with ','. So here i'm removing it.
$pr['gold'] = str_replace(',','',get_upg_price($ud['cvl'][$name]));
$pr['food'] = str_replace(',','',get_upg_price($ud['cvl'][$name]));
// Check if the user has enough food and gold.
if (check_rsc($pr,$ud)) {
// Check if user has maximum upgrade possible.
if ($ud['cvl'][$name] < 10) {
mysql_query("UPDATE `civ_level` SET ".$name."=".$name."+1 WHERE ID='".$user_id."'");
mysql_query("UPDATE `resources` SET gold=gold-'".$pr['gold']."', food=food-'".$pr['food']."' WHERE ID='".$user_id."'");
update_power($user_id);
} else {
$error = "<tr><td colspan='8' style='color:black; background: #CC3333; border:1px solid white;'>you are at maximum possible upgrade.</td></tr>";
}
} else {
$error = "<tr><td colspan='8' style='color:black; background: #CC3333; border:1px solid white;'>You dont have enough resources.</td></tr>";
}
}
}

函数详情:

function details($id)   {
$select1 = mysql_query("SELECT * FROM `users` WHERE ID='".$id."'");
$sel = mysql_fetch_array($select1);
$array['usr'] = $sel;
$select2 = mysql_query("SELECT * FROM `user_d` WHERE ID='".$id."'");
$sel2 = mysql_fetch_array($select2);
$array['usd'] = $sel2;
$select3 = mysql_query("SELECT * FROM `resources` WHERE ID='".$id."'");
$sel3 = mysql_fetch_assoc($select3);
$array['rsc'] = $sel3;
$select4 = mysql_query("SELECT * FROM `train_price`");
$sel4 = mysql_fetch_assoc($select4);
$array['trp'] = $sel4;
$select5 = mysql_query("SELECT * FROM `civ_level` WHERE ID='".$id."'");
$sel5 = mysql_fetch_array($select5);
$array['cvl'] = $sel5;
if (empty($array['usd'])) {
return false;
} else {
return $array;
}
}

函数 get_upg_price:

function get_upg_price($level)  {
$a = 0;
$price = 100;
while ($a<$level) {
$price = $price*3;
$a++;
}
return number_format($price);
}

函数check_rsc:

function check_rsc($array,$ud)  {
foreach ($array as $name => $val) {
if ($ud['rsc'][$name] < $val) {
return false;
}
}
return true;
}

输入示例:

<form method='post'><input type='submit' name='attack' value='train' />

谢谢!

最佳答案

总是但总是使用addslashes($userInput),addslashes 函数将使您免受 sql 注入(inject)的侵害,并防止用户在游戏中作弊。

永远不要让变量直接上数据库那是你的错误

关于php - 用户通过简单的 If 检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com