更新脚本加倍计数器

时间:2013-04-23 10:29:14

标签: php jquery mysql sql-update

我有这个小脚本来更新报告计数器

    /*********************************
     * Report an ad as inappropriate
     * This happens when a user click
     * the "Report ad" link on the ad
     * view page.
     * 
     * The ad can then be reviewed
     * and disabled.
     * 
     * @param int | The ad id
     *********************************/
    function report_ad($aid) {
        $row = $this->db->dbh->query('UPDATE '. $this->config->db_prefix .'_adverts SET been_reported = 1, num_reports = num_reports + 1 WHERE aid = '.$aid.'');
        $row->execute();        
    }

和这个jQuery来处理链接点击

$("#report-ad").click(function(){

   var conf = confirm("Do you want to report this ad as inappropriate?");
   var aid = {$smarty.get.aid}

   if(conf == true) {
     $.ajax({
       url: 'reportad.php',
       type: 'post',
       data: {literal}{aid: aid}{/literal},
       success: function(data) {
          alert("The ad has been reported as inappropriate");
       },
       error: function(data) {
          alert("An error occured");
       }
     });
  }
  return false;
});

reportad.php只包含这个:

$adverts = new Adverts();
$adverts->report_ad($_POST["aid"]);

由于某种原因,它将num_reports更新为2,所以如果它是1,它将变为3然后变为5,依此类推。我看不出哪里有问题。

1 个答案:

答案 0 :(得分:1)

帮助我们帮助您:追踪错误发生的位置:

  • 如果手动执行查询怎么办? +2? (只要设置了was_reported,存储过程就会递增)?
  • 是否多次调用了funktion?如果你是php调试的新手,

    mail('me@host.com','message');

是不好的做法,但很快就能做到。 (还要检查file_put_content()以进行简单的非基于对象的日志记录)。

另外,你不是在

之后错过了半音
var aid = {$smarty.get.aid}

迎接

编辑:不确定query()是否执行预准备语句,或直接运行查询?在这种情况下,query()和execute()将是你的啤酒寻找的双倍。