0
$pullItem = mysql_query("SELECT * FROM items WHERE item_id = '$itemid'");
while ($fetch = mysql_fetch_array($pullItem)) {
    $statinc = $fetch['statinc'];
}

$pullUserStats = mysql_query("SELECT * FROM userstats WHERE user_id = '$uid'");
while ($fetch = mysql_fetch_array($pullUserStats)) {
    $curstat = $fetch[$statinc];
}

mysql_query("UPDATE userstats SET $statinc=('$curstat' + '$incamount') WHERE user_id='$uid'"); //LINE 76

这就是我遇到麻烦的地方。我之间确实有一些编码,但我的错误是:“注意:未定义的变量:curstat in ..... on line 76”

4

2 回答 2

1

这段代码背后的逻辑有一些问题,使它看起来要么没有被编码成看起来像它实际在做的事情,要么只是可能没有做你想让它做的事情。

第一件事是,按照你写代码的方式,看起来你想在循环中循环一堆结果while,当你到达循环结束时,$statinc是查询的 LAST 结果的值.

SELECT * FROM items WHERE item_id = '$itemid'建议您要么有一堆带有 id 字段的项目item_id,要么您将可能应该命名为的项目命名iditem_id.

如果是第二种情况,则加载项目的第一个查询实际上应该如下所示:

$pullItem = mysql_query("SELECT * FROM items WHERE item_id = '$itemid'");
$item = mysql_fetch_array($pullItem); //There's only one item to be returned, no need to loop over the array over and over again
$statinc = $item['statinc'];

这也意味着您的第二个查询应如下所示:

$pullUserStats = mysql_query("SELECT * FROM userstats WHERE user_id = '$uid'");
$userstat = mysql_fetch_array($pullUserStats);
$curstat = $userstat[$statinc];

这让我相信 userstat 返回一个空查询,因此在您的原始代码中,$curstat永远不会被设置。

$increase_stat_to = $curstat + $incamount;
mysql_query("UPDATE userstats SET $statinc=('$increase_stat_to') WHERE user_id='$uid'");
于 2012-07-16T18:17:47.193 回答
0

错误是不言自明的,$curstat没有设置。在 while 循环中,回显结果$fetch[$statinc];以确保它实际上返回了一个有效值。如果没有,请检查 mysql 查询的语法。如果 mysql_query 没有返回有效的结果集,while 循环甚至可能不会执行,这可以解释为什么根本$curstat没有设置。

将来如果出现此类错误,请回显查询和任何相关变量,以便您可以在 phpMyAdmin 中对其进行测试,以确保生成正确的查询。

尽管有我的回答 - Anther已经发布了很多关于代码质量的信息,我必须说 - 这些建议值得跟进!

于 2012-07-16T18:30:58.883 回答