从数据库加载视频列表的索引页代码:
<?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不是很有经验,但它看起来对我很好。它不增加任何虽然,但如果我尝试手动查询在数据库中检查是否使用的查询是正确的,它的工作只是很好。
我认为你所需要做的就是执行查询。您还应该使用准备好的语句或将整数值强制转换为int
,这样您就不会被注入。
$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注入的附加信息:
如何在PHP中防止SQL注入
http://php.net/manual/en/security.database.sql-injection.php
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29