如果语句错误带变量

时间:2013-05-20 21:38:05

标签: php mysql sql database if-statement

我已经有这个问题了一段时间,最后我把它缩小到了它(我想)。 我试图限制收入,限制是$ storagecap每个$仓库= 500 $ storagecap。在我向您展示代码之前,我会告诉您我的问题。 它显示了你的限制是什么例子我目前拥有2 $仓库并且它说我的限制是1000但它停止我的收入499我设置等于0仓库所以它显示499/1000。 Cron_turn会将您的收入添加到您的帐户中。

我不知道为什么它在499时知道$ storedcap是1000。

storagecap.php

<?php

$warehouse = $building['warehouse'];

if ($warehouse == 1) {
$storagecap = 500;
}elseif($warehouse == 2) {
$storagecap = 1000;
}elseif($warehouse == 3) {
$storagecap = 1500;
}elseif($warehouse == 4) {
$storagecap = 2000;
}elseif($warehouse == 5) {
$storagecap = 2500;
}elseif($warehouse == 6) {
$storagecap = 3000;
}elseif($warehouse == 7) {
$storagecap = 3500;
}elseif($warehouse == 8) {
$storagecap = 4000;
}elseif($warehouse == 9) {
$storagecap = 4500;
}elseif($warehouse == 10) {
$storagecap = 5000;
}elseif($warehouse == 11) {
$storagecap = 5500;
}elseif($warehouse == 12) {
$storagecap = 6000;
}elseif($warehouse == 13) {
$storagecap = 6500;
}elseif($warehouse == 14) {
$storagecap = 7000;
}elseif($warehouse == 15) {
$storagecap = 7500;
}elseif($warehouse == 16) {
$storagecap = 8000;
}elseif($warehouse == 17) {
$storagecap = 8500;
}elseif($warehouse == 18) {
$storagecap = 9000;
}elseif($warehouse == 19) {
$storagecap = 9500;
}elseif($warehouse == 20) {
$storagecap = 10000;
}elseif($warehouse == 0) {
$storagecap = 499;
}else{
$storagecap = 10;
}
?>

*的 cron_turn.php *

<?php 
include("functions.php");
connect();
include("safe.php");
include("storagecap.php");
$get_users = mysql_query("SELECT * FROM `stats`") or die(mysql_error());

while($user = mysql_fetch_assoc($get_users)) {
  //Get
  $gold = $user["gold"];
  $food = $user["food"];
  $energy = $user["energy"];

  //Increment
  $gold += $user["income"];
  $food += $user["farming"];
  $energy += 5;

  //Verify and correct
  if ($energy > 100) {
     $energy = 100;
  };

  if ($gold > $storagecap) {
     $gold = $storagecap;
  };

  if ($food > $storagecap) {
     $food = $storagecap;
  };

  //Submit
  $update = mysql_query("UPDATE `stats` SET
                    `gold`= '".$gold."',
                    `food`= '".$food."',
                    `energy`= '".$energy."' WHERE `id`='".$user['id']."'") or     die(mysql_error());
}
?>

2 个答案:

答案 0 :(得分:0)

在设置为$building['warehouse']分配值之前,您要包含storagecap.php文件。由于您在if语句中将null与int进行比较,因此0为真。将包含向下移动到您具有$building['warehouse']

值的点

答案 1 :(得分:0)

这不是定义存储的常规方式。我看到你正在建立一个游戏。让我们猜测你有建筑物可以让你获得收入(黄金等)和建筑物用于容纳(存储)。它们都应保存在buildings表中,以便每个级别都定义了收入,即第一级gold_buildings =&gt; 100金/小时;第一级存储=&gt; 500容量(收入列)。

然后,每个用户应在单独的表中拥有自己的构建级别,即user_buildings:

user_id | building_id | level

大多数游戏中,每个用户都在某个平台(行星,王国,依赖于这个想法)上开发这些建筑物,让我们说在你的情况下它只是一个“平台”

platforms

id | user_id | income_gold | income_food | energy | capacity_gold | capacity_food | gold | food |

因此,每当您的用户访问带有收入的相关菜单时,您正在更新platform表,具体取决于user_buildings级别,您正在构建收入的数量以及容量。

当cron转动时,应该从该表中取值,并进行比较。

假设您有100个黄金收入,350个平台和500个容量:

UPDATE platform SET gold = IF((gold+gold_income)>capacity, `capacity`, gold+gold_income);

IF条件(不诚实地测试)应检查收入加上当前黄金是否超过限额,如果为真,则使黄金柱等于容量(限制),如果不是t,它将收入增加到当前的黄金。

然而,有些游戏正在添加资源,无论它超出限制,后来另一个cron检查超出限制的平台,并更新到极限。

P.S。:我认为提供资源的crone不需要关于user_id的WHERE子句,因为它应该给每个人带来收入(如果没有,你应该只是排除,即被禁止的帐户)