Как ограничить количество голосов в php? - PullRequest
0 голосов
/ 14 июня 2019

Я создаю страницу хранения видео, где пользователь может повысить или понизить рейтинг. Чтобы проверить, понравилось ли пользователю видео, я создал таблицу, чтобы проверить, понравился ли он пользователю более одного раза. Однако таблица videosLikedBy, ограничивающая количество лайков, не обновляется. Таблица 'video' хранит общее количество лайков и работает нормально.

Я думаю, что проблема связана с $ _ SESSION ['id'] из-за синтаксической ошибки, которая у меня была до этого, показала (id = '') , где это должен равняться идентификатору пользователя. Я все еще новичок в использовании сессий в php.

Я пытался добавить $ _ SESSION ['id'] = $ _POST ['$ id'] на предыдущей странице, где вы щелкаете видео. Тогда на странице, где просматривается видео, у меня будет $ id = $ _POST ['$ id'] . Однако это ничего не дало, поэтому я просто сохранил $ id = $ _SESSION ['id']; для просмотра страницы.

Ниже мой код,

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');
    };

$id = $_SESSION['id'];
$upsql = "SELECT liked FROM videosLikedBy WHERE (v_id = '$vid') AND (id = '$id')";
$upResult = mysqli_query($link, $upsql);
$likeCount = mysqli_fetch_assoc($upResult);
if(isset($_POST["submitted"]) && $likeCount['liked'] < 1){
mysqli_query($link, "UPDATE video SET likes = likes + 1 WHERE (v_id = '$vid')");
mysqli_query($link, "UPDATE videosLikedBy SET liked = liked + 1 WHERE (v_id = '$vid') AND (id = '$id')");
};
?>
<br>
<form method="post">
    <input type="hidden" name="submitted">
    <button type="submit">&#8679</button>
</form>
<form method="post">
    <input type="hidden" name="disliked">
    <button type="submit">&#8681</button>
</form>

Ниже приведены мои таблицы MySQL,

CREATE TABLE users (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    password VARCHAR(100) NOT NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

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
);

CREATE TABLE videosLikedBy(
liked INT NOT NULL PRIMARY KEY,
id INT NOT NULL,
FOREIGN KEY users_id(id)
REFERENCES users(id)
ON DELETE CASCADE,
v_id INT NOT NULL,
FOREIGN KEY vid_id(v_id)
REFERENCES video(v_id)
ON DELETE CASCADE
);
...