【问题标题】:Cookies Javascript / PHPCookie Javascript / PHP
【发布时间】:2017-04-11 16:26:52
【问题描述】:

我在新闻提要(如 Facebook)中制作了喜欢/不喜欢按钮。当有人使用 PHP 单击其中一个按钮时,我想更改数据库。我首先在一个表单中制作了两个按钮,但随后 PHP 将在不同的页面上运行并重新加载第一页,导致您返回到新闻提要的顶部(这当然不应该发生)。然后我尝试了 Javascript,但我需要将帖子的 id 从 Javascript 传递给 PHP。我试过用 Cookie 来做这个:

document.cookie=$_COOKIE[]

function like(id) {
    document.cookie="lid="+id;
    <?php query("INSERT INTO `likes`(`uid`, `pid`) VALUES (".$_SESSION['id'] . ",".$_COOKIE['lid'].")"); ?>
}
function dislike(id) {
    document.cookie="lid="+id;
    <?php query("DELETE FROM `likes` WHERE uid=".$_SESSION['id'] . " AND pid=".$_COOKIE['lid']); ?>
}

这不起作用,所以我添加了一些警报以了解发生了什么。

function like(id) {
    <?php $_COOKIE['lid'] = "10"; ?>
    alert("Like:" + id);
    document.cookie="lid="+id;
    <?php query("INSERT INTO `likes`(`uid`, `pid`) VALUES (".$_SESSION['id'] . ",".$_COOKIE['lid'].")"); ?>
    alert("<?php echo $_COOKIE['lid']; ?>");
}
function dislike(id) {
    <?php $_COOKIE['lid'] = "10"; ?>
    alert("Dislike:" + id);
    document.cookie="lid="+id;
    <?php query("DELETE FROM `likes` WHERE uid=".$_SESSION['id'] . " AND pid=".$_COOKIE['lid']); ?>
    alert("<?php echo $_COOKIE['lid']; ?>");
}

第一个警报显示正确的 id,但第二个警报显示“10”。

我做错了什么?

我应该如何将 id 从 JavaScript 传输到 PHP?

当有人单击按钮而新闻源没有返回顶部时,还有其他运行 PHP 代码的好方法吗?

谢谢

【问题讨论】:

    标签: javascript php cookies


    【解决方案1】:

    Javascript 不会运行 PHP。

    发生的情况是 PHP 代码在 页面发送给用户之前运行。

    在 PHP 被解释之后。

    之前

    function dislike(id) {
        <?php $_COOKIE['lid'] = "10"; ?>
        alert("Dislike:" + id);
        document.cookie="lid="+id;
        <?php query("DELETE FROM `likes` WHERE uid=".$_SESSION['id'] . " AND pid=".$_COOKIE['lid']); ?>
        alert("<?php echo $_COOKIE['lid']; ?>");
    }
    

    之后(发送给用户的内容)

    function dislike(id) {
        alert("Dislike:" + id);
        document.cookie="lid="+id;
        alert("10"); //whatever that cookie id was
    }
    

    所以代码&lt;?php query("DELETE FROM `likes` WHERE uid=".$_SESSION['id'] . " AND pid=".$_COOKIE['lid']); ?&gt;在用户看到页面时已经运行,所以类似的内容被删除

    您需要用户 AJAX 才能正确执行此操作。

    function dislike(id){
        var XHR = new XMLHttpRequest();
        XHR.addEventListener("load", function(){
            //was disliked
        })
        XHR.open("get", "dislike.php?id="+id);
        XHR.send();
    }
    

    类似于 javascript 的东西

    不喜欢.php

    <?php
    parse_str($SERVER["QUERY_STRING"], $arr);
    if(isset($arr["id"]){
     query("DELETE FROM `likes` WHERE uid=".$_SESSION['id'] . " AND pid=".$arr["id"]);
    }
    

    【讨论】:

    • 它不工作。什么都没发生。我不明白:XHR.addEventListener("load", function(){ //was disliked })
    • 那是服务器返回时运行的回调。
    • 什么都没有发生......代码不起作用。请帮忙
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多