0

レポートカウンターを更新するためのこの小さなスクリプトがあります

    /*********************************
     * 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 になります。どこに問題があるのか​​わかりません。

4

1 に答える 1

1

エラーが発生した場所を追跡します。

  • クエリを手動で実行するとどうなりますか? また+2?(been_reported が設定されるたびに増加するストアド プロシージャ)?
  • 関数は複数回呼び出されていますか? PHP のデバッグが初めての場合は、

    メール ('me@host.com', 'メッセージ');

悪い習慣ですが、すぐに実行できます。(単純な非オブジェクトベースのロギングについては file_put_content() も確認してください)。

また、後ろのセミコロンが抜けていませんか

var aid = {$smarty.get.aid}

あいさつ

編集: query() が準備されたステートメントを実行するのか、クエリを直接実行するのか不明ですか? その場合、 query() と execute() は、探しているエールの倍になります。

于 2013-05-16T20:15:00.553 に答える