Отправка и получение файлов cookie в PHP - PullRequest
0 голосов
/ 25 января 2019

Мы делаем систему голосования для нашего сайта.Вы можете публиковать отчеты на веб-сайте, которые сохраняются в виде файлов данных.
В настоящее время проблема заключается в том, что пользователи могут повышать или понижать число голосов столько раз, сколько захотят, поскольку нет препятствий для прекращения голосования.Мы хотим, чтобы пользователи имели возможность повысить или понизить один раз.
Мы пытаемся использовать cookie-файлы для достижения этой цели (я знаю, что это не самая лучшая система, поскольку люди могут просто удалять cookie-файлы, но этомаленький студенческий проект и нам просто нужна система).Мы можем установить куки в сценарии upvote и downvote.У нас есть vote файл cookie, для которого установлено значение 0, -1 или 1, в зависимости от того, проголосовал пользователь или нет.
Однако мы не можем точно получить файлы cookie.Когда мы пытаемся извлечь файл cookie vote, используя $_COOKIE["vote"], он не дает нам значения.
Есть ли причина, по которой этот файл cookie не возвращает значение?Заранее спасибо.Весь наш код предоставляется ниже, если вам это нужно.

    <?php
    $report = $_GET["report"];

    if(!isset($_COOKIE["vote"])) {
        setcookie("vote", "0", time() + 315360000, $_SERVER['REQUEST_URI']);
        $_COOKIE["vote"] = "0";
    }

    function upvote() {
        if(file_exists("DataUploads/".$GLOBALS['report'])) {
            if($_COOKIE["vote"] == "1") { // Problem: $_COOKIE is not being compared to "1" properly, always returns false
                $filename = "DataUploads/".$GLOBALS['report'];
                $line = 3;
                $lines = file($filename, FILE_IGNORE_NEW_LINES);
                $lines[$line] = (string)((int)$lines[$line] - 1);
                file_put_contents($filename, implode("\n", $lines));
                setcookie("vote", "0", time() + 315360000, $_SERVER['REQUEST_URI']);
                $_COOKIE["vote"] = "0";
            } else {
                $filename = "DataUploads/".$GLOBALS['report'];
                $line = 3;
                $lines = file($filename, FILE_IGNORE_NEW_LINES);
                if($_COOKIE["vote"] == "-1") {
                    $lines[$line] = (string)((int)$lines[$line] + 2);
                } else {
                    $lines[$line] = (string)((int)$lines[$line] + 1);
                }
                file_put_contents($filename, implode("\n", $lines));
                setcookie("vote", "1", time() + 315360000, $_SERVER['REQUEST_URI']);
                $_COOKIE["vote"] = "1";
            }
        }
    }

     function downvote() {
        if(file_exists("DataUploads/".$GLOBALS['report'])) {
            if($_COOKIE["vote"] == "-1") {
                $filename = "DataUploads/".$GLOBALS['report'];
                $line = 3;
                $lines = file($filename, FILE_IGNORE_NEW_LINES);
                $lines[$line] = (string)((int)$lines[$line] + 1);
                file_put_contents($filename, implode("\n", $lines));
                setcookie("vote", "0", time() + 315360000, $_SERVER['REQUEST_URI']);
                $_COOKIE["vote"] = "0";
            } else {
                $filename = "DataUploads/".$GLOBALS['report'];
                $line = 3;
                $lines = file($filename, FILE_IGNORE_NEW_LINES);
                if($_COOKIE["vote"] == "1") {
                    $lines[$line] = (string)((int)$lines[$line] - 2);
                } else {
                    $lines[$line] = (string)((int)$lines[$line] - 1);
                }
                file_put_contents($filename, implode("\n", $lines));
                setcookie("vote", "-1", time() + 315360000, $_SERVER['REQUEST_URI']);
                $_COOKIE["vote"] = "-1";
            }
        }
    }

    if($_POST["upvote_x"]) {
       upvote();
    }

    if($_POST["downvote_x"]) {
       downvote();
    }
?>
<!DOCTYPE html>
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
        <link rel="stylesheet" href="styles.css">
        <title>View Report</title>
        <link rel="icon" href="Images/favicon.ico" type="image/x-icon">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div class="header"></div>
        <div id="navbar">
            <ul>
                <li><a href="index.html">Home</a></li>
                <li><a href="about.html">About</a></li>
                <li><a href="submit.html">Submit</a></li>
                <li><a href="submissions.php">View</a></li>
            </ul>
        </div>
        <div id="content">
            <ul style="list-style-type: none;"> 
                <?php
                    if(file_exists("DataUploads/".$GLOBALS['report'])) { // Check if the report exists
                        echo '<h2>Report Information:</h2>';
                        $data = file("DataUploads/".$GLOBALS['report']); // Gets array of lines in file

                        $upvote_button_url = $_COOKIE["vote"] == "1"?"Images/upvote.png":"Images/upvote_noclick.png";
                        $downvote_button_url = $_COOKIE["vote"] == "-1"?"Images/downvote.png":"Images/downvote_noclick.png";

                        echo '<h3 style="display:inline">Votes: </h3><p style="display:inline" class="wordwrap">'.$data[3].'</p>';
                        if($data[4] == "demo") {
                            echo "<br>";
                            echo "This is a demonstrational report, and cannot be voted on.";
                            echo "<br>";
                        } else {
                            echo '<form method="post">';
                            echo    '<input type="image" src="'.$upvote_button_url.'" name="upvote" id="upvote" value="Upvote" onclick="changeUpvoteImage()" /><br/>';
                            echo    '<input type="image" src="'.$downvote_button_url.'" name="downvote" id="downvote" value="Downvote" onclick="changeDownvoteImage()" /><br/>';
                            echo '</form>';
                            echo '<p>If a report has or has less than -40 votes, it will be deleted.</p>';
                        }

                        if(file_exists('ImageUploads/'.pathinfo($GLOBALS['report'], PATHINFO_FILENAME))) {
                            echo '<li><img src="ImageUploads/'.$GLOBALS['report'].'" style="max-height: 600px; max-width: 700px"></li>';
                        } else {
                            echo '<img src="Images/missing.png" width="25%"><br>';
                        }
                        echo '<li><h3 style="display:inline">Location: </h3><p style="display:inline" class="wordwrap">'.htmlspecialchars($data[0]).'</p></li>';
                        echo '<li><h3 style="display:inline">Description: </h3><p style="display:inline" class="wordwrap">'.htmlspecialchars($data[1]).'</p></li>';
                        echo '<li><b><h3 style="display:inline">Urgency: </h3>';
                        if($data[2] < 30) {
                            echo "<span style='color: #1f7725'>Low</span>";
                        } else if($data[2] < 50) {
                            echo "<span style='color: #77711e'>Medium</span>";
                        } else if($data[2] < 80) {
                            echo "<span style='color: #774e1e'>High</span>";
                        } else {
                            echo "<span style='color: #771e1e'>Immediate</span>";
                        }
                        echo "</b></li>";

                        function delete() {
                            if(file_exists("DataUploads/".$GLOBALS['report'])) {
                                unlink("DataUploads/".$GLOBALS['report']); //delete file
                            }
                            if(file_exists("ImageUploads/".$GLOBALS['report'])) {
                                unlink("ImageUploads/".$GLOBALS['report']); //delete file
                            }
                        }

                        if($data[3] <= -40 && $data[4] != "demo") {
                            delete();
                        }
                    } else {
                        echo '<h1>No report found with the name "'.$GLOBALS['report'].'". Check the URL!</h1>';
                        echo '<img src="Images/missing-report.jpg" width="50%">';
                    }
                ?>
            </ul>
            <br>
            <br>
            <br>
        </div>
        <script> 
            function getUrlVars() {
                var vars = {};
                var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
                    vars[key] = value;
                });
                return vars;
            }

            function getCookieValue(a) {
                var b = document.cookie.match('(^|;)\\s*' + a + '\\s*=\\s*([^;]+)');
                return b ? b.pop() : '';
            }

            function changeUpvoteImage() {
                var img = document.getElementById("upvote");
                img.src = "Images/upvote.png";
                return false;
            }

            function changeDownvoteImage() {
                var img = document.getElementById("downvote");
                img.src = "Images/downvote.png";
                return false;
            }

            if(getCookieValue(getUrlVars("report") + "vote") == 1) {
                changeUpvoteImage();
            } else if(getCookieValue(getUrlVars("report") + "vote") == -1) {
                changeDownvoteImage();
            }
        </script>
        <script>
            if(window.history.replaceState) {
                window.history.replaceState(null, null, window.location.href);
            }
        </script>
    </body>
</html>

1 Ответ

0 голосов
/ 25 января 2019

Используйте это, чтобы установить куки:

setcookie("vote", "some_value", time() + (315360000 * 30), "/");

(Это работало для меня)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...