【发布时间】:2019-07-26 02:34:36
【问题描述】:
我正在尝试为用户只能投票一次的视频制作一个喜欢/不喜欢的系统。在对网络进行了一些研究之后,我最近在我的代码中实现了 Ajax(我对 Ajax 的了解有限)。当我单击喜欢或不喜欢页面刷新时,它不会更改 mySQL 中喜欢/不喜欢列中的任何内容。以下是上传视频的代码。
<?php
session_start();
include "config.php";
if( !empty( $_GET['$v_id'] ) ){
$vid = $_SESSION['v_id'] = $_GET['$v_id'];
$sql='SELECT video_name FROM video WHERE v_id=?';
$stmt=$link->prepare( $sql );
$stmt->bind_param('i', $vid );
$res=$stmt->execute();
if( $res ){
$stmt->store_result();
$stmt->bind_result( $videoname );
$stmt->fetch();
printf('
<video width="70%%" height="70%%" style="background-color:#585858; border: 4px solid darkorange; border-radius:20px;" controls>
<source src="uploads/%s" type="video/mp4" id="vid">
</video>
', $videoname );
}
} else {
exit('missing ID');
}
以下是我遇到问题的代码。
<br>
<script>
function postAjax(url, data, success) {
var params = typeof data == 'string' ? data : Object.keys(data).map(
function(k){ return encodeURIComponent(k) + '=' + encodeURIComponent(data[k]) }
).join('&');
var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
xhr.open('POST', url);
xhr.onreadystatechange = function() {
if (xhr.readyState>3 && xhr.status==200) { success(xhr.responseText); }
};
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.send(params);
return xhr;
}
</script>
<a href="" onclick="postAjax('localhost/VarcFiles/watchScreen.php?$v_id=\'$vid\'', 'vote=1', function(data){ console.log(data); });"><img src="imageStoring/like.png" style="height:30px;"/></a>
<a href="" onclick="postAjax('localhost/VarcFiles/watchScreen.php?$v_id=\'$vid\'', 'vote=-1', function(data){ console.log(data); });"><img src="imageStoring/dislike.png" style="height:30px;"/></a>
下面是mySQL
CREATE TABLE video(
v_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
video_name VARCHAR(225) NOT NULL,
id INT NOT NULL,
FOREIGN KEY user_id(id)
REFERENCES users(id)
ON DELETE CASCADE,
n_views INT,
likes INT,
dislikes INT,
image_name VARCHAR(225) NOT NILL
);
【问题讨论】:
-
警告:使用
mysqli时,您应该使用parameterized queries 和bind_param将任何数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug。 切勿将$_POST、$_GET或任何类型的数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。
标签: javascript php mysql ajax