首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >php计数器增量错误

php计数器增量错误
EN

Stack Overflow用户
提问于 2012-01-04 18:39:47
回答 5查看 602关注 0票数 3

因为每次用户点击图片时,我都会尝试将计数器增加到+1。我已经写了下面的代码,但它显示了一些错误“警告: mysql_fetch_array()期望参数1是资源,在C:\xampp\htdocs\tkboom\includes\core.php第72行给出的布尔值”。有人能调查一下我犯错的地方吗..

实际上我已经创建了两个php文件,一个用于递增计数器,另一个用于显示计数器。在core.php文件中,我编写了函数,并且为了显示计数,我创建了一个名为view.php的文件

代码语言:javascript
复制
core.php
    function GenerateCount($id, $playCount) {
            global $setting;
            $counter_query = "SELECT hits FROM ava_games WHERE id=".$_GET['id']."";
            $counter_res = mysql_query($counter_query);
            while($counter_row = mysql_fetch_array($counter_res)){
               $counter = $counter_row['hits'] + 1;
               $update_counter_query = "UPDATE ava_games SET hits=".$counter." WHERE id=".$_GET['id']."";
               $playCount = mysql_query($update_counter_query);
               $playCount = $row['hits'];
            }
            return $playCount;

    // Get count END
    }

view.php

<?php

$sql = mysql_query("SELECT * FROM ava_games WHERE published=1 ORDER BY id desc LIMIT 30");
while($row = mysql_fetch_array($sql)) {

    $url = GameUrl($row['id'], $row['seo_url'], $row['category_id']);

    $name = shortenStr($row['name'], $template['module_max_chars']);

    $playRt = GenerateRating($row['rating'], $row['homepage']);

    $playCt = GenerateCount($row['id'], $row['hits']);


    if ($setting['module_thumbs'] == 1) {
        $image_url = GameImageUrl($row['image'], $row['import'], $row['url']);

        $image = '<div class="homepage_game"><div class="home_game_image"><a href="'.$url.'"><img src="'.$image_url.'" width= 180 height= 135/></a></div><div class="home_game_info"><div class="home_game_head"><a href="'.$url.'">'.$name.'</a></div></div><div class="home_game_options"><img class="home_game_options_icon" src="'.$setting['site_url'].'/templates/hightek/images/joystick-icon.png" /> &nbsp;'.$playRt.' <b>|</b> '.$playCt.' plays &nbsp;</div></div>';
        echo $image;
    }



    }

?>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-04 18:42:12

这很可能意味着sql语句中存在错误。您可以通过mysql_error()获取有关该错误的更多信息。

最简单的形式是:

代码语言:javascript
复制
$counter_res = mysql_query($counter_query) or die(mysql_error());

(编辑:...simplest表单,但是使用这种方法,您不会给应用程序一个对问题做出反应的机会,“死”就像“死”一样。mysql_error()可能会将太多信息泄露给您的see服务/网站的用户,请参阅https://www.owasp.org/index.php/Top_10_2007-Information_Leakage_and_Improper_Error_Handling)

您的代码还容易出现

  • sql injections,,因为您有一个由一个SELECT和一个UPDATE组成的复合操作,没有任何锁定机制,所以在没有清理语句的情况下将$_GET参数放入语句中。
票数 4
EN

Stack Overflow用户

发布于 2012-01-04 18:45:03

这是因为您在SQL查询中得到了错误。

我会稍微修改一下:

代码语言:javascript
复制
$counter_query = 'SELECT hits FROM ava_games WHERE id = ' . (int)$_GET['id'];

以确保您始终将id与整数值进行比较。

票数 1
EN

Stack Overflow用户

发布于 2012-01-04 18:45:56

毕竟,这个查询看起来并不好。第一点:为什么要使用两个查询来递增一个值?UPDATE ava_games SET hits=hits+1 WHERE id=".$_GET['id'].""应该在一个步骤中做到这一点。第二点:您听说过SQL注入吗?转义或强制转换$_GET['id']以避免意外;)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8725455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档