我正在尝试创建一个喜欢/不喜欢的系统,以便用户可以对视频进行评分。但是,我在一个问题上停留了一段时间。单击“ like”按钮不会更新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');
}
$likeQuery = mysqli_query($link, "SELECT likes FROM video WHERE v_id='$vid'");
$likeCount = 0;
$func = <<<EOD
<script type="text/javascript">
function like(event){
alert( '$likeCount' = 1 );
}
function dislike(event){
alert( '$likeCount' = -1 );
}
</script>
EOD;
if($likeCount == 1){
mysqli_query($link, "UPDATE video SET likes = likes + 1
WHERE (v_id = '$vid')");} elseif($likeCount == -1){
mysqli_query($link, "UPDATE video SET likes = likes - 1
WHERE (v_id = '$vid')");}
?>
<br>
<a href="#" onclick="like(event)"><img src="imageStoring/like.png" style="height:30px;" /></a>
<img src="imageStoring/dislike.png" style="height:30px;"/>
我添加了显示视频的代码,因为我不确定这是否是导致问题的原因。
下面是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
);
我曾经尝试通过使用对其进行编辑
href="<?php echo $_SERVER['PHP_SELF'] ?>"
但是,我一直在获取“缺少ID”的信息。
答案 0 :(得分:1)
当您单击“赞”按钮时,这是通过已加载到客户端浏览器中的javascript发生的。
php解析在到达客户端的浏览器之前在服务器端进行。
您需要在php服务器中有一条路由,以侦听有效的类似请求,最好是这样的注册用户:
POST localhost/api/video/rating/:vote
其中“ vote”参数是整数值。
在该路由的php端,解析参数值,连接到表格,更新视频的总投票,并返回成功状态。
在JavaScript的前端,将代码更改为以下内容:
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;
}
// example upvote request
postAjax('localhost/api/video/rating', 'vote=1', function(data){ console.log(data); });
// example downvote request
postAjax('localhost/api/video/rating', 'vote=-1', function(data){ console.log(data); });
分别用示例替换upvote和downvote按钮