2015-09-01 62 views
0

我正在創建一個關注按鈕,或多或少像twitter一樣。從PHP文件返回一個布爾值到AJAX one - Follow按鈕

點擊該按鈕,而您跟隨該用戶。

再次點擊,你取消關注用戶。

我已經做了這個代碼

HTML

<div data-following="false" class='heart canal'><i class='fa fa-heart awesome'></i></div> 

AJAX

$(document).ready(function() { 
$(".heart.canal").click(function() { 
    if($(".heart").attr("data-following") == '0'){ 
     $(".heart").attr('data-following', '1'); 
    } else if($(".heart").attr("data-following") == '1'){ 
     $(".heart").attr('data-following', '0'); 
    } 

    var usuario = $(".left h4").attr("data-id"); 
    var seguidor = $("#user_account_info .profile_ball").attr("data-id"); 
    var seguir = $(".heart").attr("data-following"); 

    $.ajax({ 
     type: "POST", 
     url: "./include/php/follow.php", 
     data: { user: usuario, follower: seguidor, follow: seguir }, 
     success: function(response) { 
      if(response == '0'){ 
       $(".heart").addClass("like"); 
      } else if(response == '1'){ 
       $(".heart").removeClass("like"); 
      } 
     } 
    }); 
    return false; 
}); 
}); 

PHP

<?php 
$dsn = "mysql:host=localhost;dbname=tapehd;charset=utf8"; 
$usuario = "root"; 
$contraseña = ""; 

$conexion = new PDO($dsn, $usuario, $contraseña); 
$resultado = null; 

$sql = ""; 
$user = $_POST["user"]; 
$seguidor = $_POST["follower"]; 
$follow = $_POST["follow"]; 

if($follow == '0'){ 
    $sql = "INSERT INTO seguidores(id_canal, id_seguidor) VALUES('$user', '$seguidor')"; 
} else if($follow == '1'){ 
    $sql = "DELETE FROM seguidores WHERE id_canal = '$user' AND id_seguidor= '$seguidor'"; 
} 

if($conexion){ $resultado = $conexion->query($sql); } 

return $follow; 
?> 

問題是,每次點擊按鈕,我只在數據庫中插入數據。我的意思是,我只創造如下。 當我點擊兩次,它不刪除後續。

無論如何要在data-following = true時插入數據並在data-following = false刪除它?

修訂

我已經改變了布爾值false和2串,0和1,但它不工作,反正真。

+0

[你的腳本是對SQL注入攻擊的風險(http://stackoverflow.com/問題/ 60174/how-can-i-prevent-sql -injection-in-php) –

+0

你看過你的錯誤日誌嗎?你沒有在這裏做任何錯誤檢查,並假設你的查詢正常工作。 –

+2

表單提交是字符串。沒有布爾人,沒有整數,沒有斑點,沒有blah blahblah。只有字符串。如果你想讓'$ follow'來測試等於一個php false,那麼'$ _POST ['seguir']'必須包含一些PHP規則會產生「false」的東西。那將是'0','0.0'或一個空字符串。 ** WORD **'false'不會測試相等,因爲那會是''false'== false' –

回答

1

這裏有很多問題。就像@Mark所說的,你需要明白當向PHP發送一個jax請求時,你正在發送字符串。另外,在你的JS中,你將一個click函數綁定到.heart.canal,但是這個函數改變了這個類的所有元素,而不是實際單擊的元素。最後,一旦你將正確的信息發送給PHP,你需要打印結果以便在ajax中看到它。

嘗試以下操作:

JS:

$(document).ready(function() { 
    $(".heart.canal").click(function() { 
     var $heart = $(this); 
     if ($heart.data("following")) { 
      $heart.data("following", false) 
     } else { 
      $heart.data("following", true); 
     } 

     var usuario = $(".left").find("h4").data("id"); 
     var seguidor = $("#user_account_info").find(".profile_ball").data("id"); 

     $.ajax({ 
      type: "POST", 
      url: "follow.php", 
      data: {user: usuario, follower: seguidor, follow: $heart.data("following")}, 
      success: function (result) { 
       if (result) { 
        console.log("true"); 
       } else { 
        console.log("false"); 
       } 
      } 
     }); 
     return false; 

    }); 

}); 

PHP:

$user = (int)$_POST["user"]; 
$seguidor = (int)$_POST["follower"]; 
$follow = ($_POST["follow"] === 'true') ? true : false; 

if ($follow) { 
    // insert 
} else { 
    // delete 
} 

print $follow;