Ajax调用不会在mysql数据库中递增命中计数器

时间:2015-08-12 12:24:21

标签: php mysql ajax

从数据库加载视频列表的索引页面上的代码:

<?php
   ini_set('display_errors', 1);
   mysqli_set_charset($link, 'utf8mb4');
   $query="SELECT * FROM videos";
   $result=mysqli_query($link,$query) or die (mysqli_error($link));

   while($row=mysqli_fetch_assoc($result))
        {
          echo '<div class=\"3u 12u(medium)\">';
          echo '<section class=\"box feature\">';
          echo '<p id="video_' . $row['v_id'] . '" class="videos">'.$row['v_url'].'</p>';
          echo '<p>'.$row['v_title'].'</p>';
          echo '<p>'.$row['v_date'].'</p>';
          echo '<p>'.$row['v_hits'].'</p>';
          echo '</section></div>';
        }
?>

<script>
    $(".videos").click(function(){
    id = this.id;
    video_id = id.substring(id.lastIndexOf('_')+1,id.length);

    //ajax call
    $.ajax({
    type: "GET",
    url: "update_video_counter.php",
    data: 'video_id=' + video_id,
    cache: false,
    success: function (html) {
    }
    });
    });

</script>

然后是update_video_counter.php页面:

<?php

  $id = $_GET["video_id"];
  ini_set('display_errors', 1);
  mysqli_set_charset($link, 'utf8mb4');
  $query="UPDATE videos SET v_hits = v_hits + 1 WHERE v_id = $id";

?>

现在我对Ajax / JQuery不是很有经验,但它看起来不错。它虽然没有增加,但是如果我尝试在数据库中手动查询以检查所使用的查询是否正确,那么它的工作正常。

1 个答案:

答案 0 :(得分:0)

我认为您需要做的就是执行查询。您还应该使用预准备语句或将整数值转换为int s,这样就不会注入。

$id = (int)$_GET["video_id"];
ini_set('display_errors', 1);
mysqli_set_charset($link, 'utf8mb4');
$query="UPDATE videos SET v_hits = v_hits + 1 WHERE v_id = $id";
mysqli_query($query);

有关SQL注入的其他信息:

How can I prevent SQL injection in PHP? {
{3}} {
{3}}