我的喜欢/不喜欢系统无法正常工作

时间:2019-02-26 21:15:40

标签: javascript php mysql

我正在尝试创建一个喜欢/不喜欢的系统,以便用户可以对视频进行评分。但是,我在一个问题上停留了一段时间。单击“ 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”的信息。

1 个答案:

答案 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按钮