setcookie и запросить значение cookie для системы голосования

Я хочу установить куки, чтобы пользователи голосовали только один раз в 4 категориях (грустно, бесит, смешно, круто). Я новичок, поэтому я знаю, что мой код очень неудобен, но это моя первая попытка, поэтому для меня не имеет значения, будет ли у меня на несколько строк больше или меньше. По какой-то причине браузер не загружает файлы voice.php (которые вызываются, когда пользователь выбирает один из вариантов голосования). Я просто не могу найти ошибку ... может быть, кто-то сразу ее видит? [До того, как я вставил файл cookie, файлы кода загружались отлично, поэтому вызов не имеет значения.]

<?php
require_once('connect.php');
$newsid = $_POST['id'];

if (isset($_POST['submit'])) {
    if(isset($_COOKIE['votecookie']) && $_COOKIE['votecookie'] !== 'sad') {
        if($_COOKIE['votecookie'] == 'cool') {  
            $query = mysql_query('UPDATE `index` SET cool=cool-1 WHERE id = {$newsid}');
        }
        if($_COOKIE['votecookie'] == 'funny') { 
            $query = mysql_query('UPDATE `index` SET funny=funny-1 WHERE id = {$newsid}');
        }
        if($_COOKIE['votecookie'] == 'sad') {   
            $query = mysql_query('UPDATE `index` SET enraging=enraging-1 WHERE id = {$newsid}');
        }
        setcookie('votecookie', 'sad');
        $query = mysql_query('UPDATE `index` SET sad=sad+1 WHERE id = '{$newsid}'');
        $hosts = $_SERVER['HTTP_HOST'];
        $uris = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
        $extras = 'news.php?id={$newsid}&sad=1';
        header('Location: http://$hosts$uris/$extras');
        exit;
    }
    if(!isset($_COOKIE['votecookie']) {
            setcookie('votecookie', 'sad');
            $query = mysql_query('UPDATE `index` SET sad=sad+1 WHERE id = '{$newsid}'');
            $hosts = $_SERVER['HTTP_HOST'];
            $uris = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
            $extras = 'news.php?id={$newsid}&sad=1';
            header('Location: http://$hosts$uris/$extras');
            exit;
        }

        if(isset($_COOKIE['votecookie']) && $_COOKIE['votecookie'] == 'sad') {
            $hosts= $_SERVER['HTTP_HOST'];
            $uris = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
            $extras = 'news.php?id={$newsid}&sad=0';
            header('Location: http://$hosts$uris/$extras');
            exit;
        }
        }
    else {
        $hosts= $_SERVER['HTTP_HOST'];
        $uris = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
        $extras = 'news.php?id={$newsid}&sad=0';
        header('Location: http://$hosts$uris/$extras');
        exit;
        ?>

person maidi    schedule 30.04.2015    source источник
comment
Вместо этого вы должны использовать сеансы. Пользователи могут изменять и удалять файлы cookie   -  person Machavity♦    schedule 30.04.2015
comment
Почему у вас есть if($_COOKIE['votecookie'] == 'sad'), когда вы находитесь внутри блока, который запускается только тогда, когда votecookie не sad?   -  person Barmar    schedule 30.04.2015
comment
Что касается заголовка («Расположение: http://$hosts$uris/$extras»); - поскольку это одинарные кавычки, используется буквальное значение - он пытается перенаправить на http://$hosts$uris/$extras. Используйте двойные кавычки для разбора переменных в строках. php.net/manual/en/language.types.string.php   -  person user2182349    schedule 30.04.2015
comment
Ожидаете ли вы, что setcookie('votecookie', 'sad') в первом блоке if обновит $_COOKIE['votecookie'], проверенный в следующем if? $_COOKIE устанавливается только при обновлении страницы.   -  person Barmar    schedule 30.04.2015
comment
Спасибо за ваши ответы. @Barmar: вещь с грустью действительно была ошибкой, и я ее исправил. И на ваш второй вопрос: нет, не жду   -  person maidi    schedule 30.04.2015
comment
@user2182349 user2182349 Я исправил кавычки. Хоть я и исправил эти ошибки, это не сработает :(   -  person maidi    schedule 30.04.2015


Ответы (1)


Если кого-то интересует ответ: Вот как я это сделал сейчас (у меня было еще несколько ошибок в моем коде и ошибка в рассуждениях).

<?php
require_once('connect.php');
$newsid = $_POST['id'];
if (isset($_POST['submit'])) {
    if(isset($_COOKIE[$newsid]) && $_COOKIE[$newsid] != 'sad') {
        if($_COOKIE[$newsid] == 'cool') {   
        $query = mysql_query("UPDATE `index` SET cool=cool-1 WHERE id = '{$newsid}'");
        }
        if($_COOKIE[$newsid] == 'funny') {  
        $query = mysql_query("UPDATE `index` SET funny=funny-1 WHERE id = '{$newsid}'");
        }
        if($_COOKIE[$newsid] == 'enraging') {   
        $query = mysql_query("UPDATE `index` SET enraging=enraging-1 WHERE id = '{$newsid}'");
        }
    $query = mysql_query("UPDATE `index` SET sad=sad+1 WHERE id = '{$newsid}'");
    setcookie($newsid, "sad", time() + (10 * 365 * 24 * 60 * 60));
    $hosts = $_SERVER['HTTP_HOST'];
    $uris = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $extras = "news.php?id={$newsid}&sad=1";
    header("Location: http://$hosts$uris/$extras");
        exit;
    }
    if(!isset($_COOKIE[$newsid])) {
        $query = mysql_query("UPDATE `index` SET sad=sad+1 WHERE id = '{$newsid}'");
        setcookie($newsid, "sad", time() + (10 * 365 * 24 * 60 * 60));
        $hosts = $_SERVER['HTTP_HOST'];
        $uris = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
        $extras = "news.php?id={$newsid}&sad=1";
        header("Location: http://$hosts$uris/$extras");
            exit;
    }   
    if(isset($_COOKIE[$newsid]) && $_COOKIE[$newsid] == 'sad') {
        $hosts= $_SERVER['HTTP_HOST'];
        $uris = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
        $extras = "news.php?id={$newsid}&sad=0";
        header("Location: http://$hosts$uris/$extras");
            exit;
    }
}
else {
    $hosts= $_SERVER['HTTP_HOST'];
    $uris = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
    $extras = "news.php?id={$newsid}&sad=0";
    header("Location: http://$hosts$uris/$extras");
    exit;
}
?>
person maidi    schedule 30.04.2015
comment
Не могли бы вы конкретно объяснить, что вы изменили? Трудно увидеть различия. - person Barmar; 30.04.2015