2017-04-11 8 views
1

ニュースフィード(Facebookなど)で嫌いなボタンを作った。誰かがPHPを使ってこれらのボタンのいずれかをクリックしたときにデータベースを変更したいと思います。私は最初に2つのボタンをフォームで作成しましたが、PHPは別のページで実行され、最初のページをリロードして、ニュースフィードの先頭に戻るようにしました(もちろんこれは起こりません)。それからJavascriptを試しましたが、JavascriptからPHPへの投稿のIDを渡す必要がありました。私はクッキーでこれをやってみました:クッキー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を示していましたが、2番目のアラートは「10」でした。

どうしたのですか?

idをJavaScriptからPHPに転送するにはどうすればよいですか?

誰かがニュースフィードを一番上に戻さずにボタンをクリックしたときにPHPコードを実行する良い方法がありますか?

ありがとうございました

答えて

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 
} 

だから、コード<?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

何も起きません...コードが機能しません。助けてください –