2017-04-11 44 views
1

我在新聞提要(如Facebook)中製作了喜歡/不喜歡按鈕。當有人使用PHP單擊其中一個按鈕時,我想更改數據庫。我首先在表單中創建了兩個按鈕,但是PHP會在不同的頁面上運行,並重新加載第一頁,導致您返回到新聞提要的頂部(這當然不應該發生)。然後我嘗試了Javascript,但我需要將該帖子的ID從Javascript傳遞到PHP。我試着用餅乾做這個:Cookies Javascript/PHP

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」。

我做錯了什麼?

我應該如何將JavaScript從JavaScript傳輸到PHP?

當別人點擊一個按鈕而沒有新聞傳送返回頂部時,是否有其他好方法來運行PHP代碼?

感謝

回答

1

的Javascript isn'g要運行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 
} 

因此,代碼<?php query("DELETE FROM `likes` WHERE uid=".$_SESSION['id'] . " AND pid=".$_COOKIE['lid']); ?>已經被用戶看到的頁面等等等等被刪除

的時間運行

你需要用戶AJAX來正確地做到這一點。

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

像你們說的JavaScript

dislike.php

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

它不工作。什麼都沒發生。我不明白:''XHR.addEventListener(「load」,function(){ //不喜歡 })' –

+0

這就是服務器返回時運行的回調函數。 – powerc9000

+0

什麼都沒有發生......代碼不起作用。請幫忙 –