2016-07-19 5 views
-2

私は自分のウェブサイトのお気に入りの機能に加えて、すべてのことがうまくいきます。
私はadd to favourites button AJAX呼び出しがデシベルとjquery - ページのリロード時にonclickメソッドで変更されたテキストを保持しています

「お気に入りから削除」にボタンのテキストを変更することで、データが今の問題は、私はページをリロードするとき、それは再び「お気に入りに追加するには、ボタンのテキストをリセットしていることを挿入しているクリックしてください以前はお気に入りとしてマークされていました。

私のコードは

<button class='btn btn-sm btn-info favourite_feature' value="<?php echo $id;?>">add to favourite</button> 

jQueryの

$(".favourite_feature").click(function(){ 
    var _this = $(this); 
    var postid = _this.val(); 
    $.ajax({ 
     type  : 'POST', 
     url  : 'add_to_favourite.php', 
     dataType : 'json', 
     data  : {course_id : postid}, 
     success : function(response){ 
      console.log(response); 
      if(response.error_type == 'no error'){ 
       alert('done'); 
       (_this).html(_this.html()=='add to favourite' ? 'remove from favourites' : 'add to favourite'); 
      }else{ 
       if(response.error_type == 'login'){ 
        $('#myModal').modal('show'); 
       } 
      } 
     } 
    }); 
}); 

EDITです:あなたがいるかどうかを確認する必要があり、サーバー側で追加されたサーバ側のコード

<?php 
    session_start(); 
    include 'includes/dbconfig.php'; 
    if(!isset($_SESSION['google_data'])){ 
     $response = array('success' => 0, 'error_type' => 'login'); 
     echo json_encode($response); 
    }else{ 
     $id = $_SESSION['id']; 
     $c_id = $_POST['course_id']; 
     $_SESSION['course_id']=$c_id; 
     $u_email = $_SESSION['google_data']['email']; 
     $check_favourites = "SELECT * from favourites_table where user_id = '$id' and course_id = '$c_id'"; 
     $check_favourites_query = mysqli_query($conn,$check_favourites) or die(mysqli_error($conn)); 
     $check_favourites_result = mysqli_fetch_array($check_favourites_query); 
     if($check_favourites_result){ 
      $del = "DELETE FROM favourites_table where user_id = '$id' and course_id = '$c_id'"; 
      $del_favourites = mysqli_query($conn,$del) or die(mysqli_error($conn)); 
     }else{ 
      $insert_query = "INSERT INTO favourites_table(course_id,user_id,user_email) VALUES('$c_id','$id','$u_email')"; 
      mysqli_query($conn,$insert_query); 
     } 
     $response = array('success' => 1, 'error_type' => 'no error'); 
     echo json_encode($response); 
    } 
?> 
+0

すること(つまり、すべてのユーザーがその状態を切り替えることができます。)各ユーザーまたは各ポストのための好みのポストデータを格納するデータベースですか? – grateful

+0

DBからデータを取得し、DBエコーに対応するボタンのテキストに保存されているお気に入りの状態に応じて取得する必要があります。 –

+0

私はサーバー側のコードを追加して投稿を編集しましたが、はい、お気に入りの結果IDをdb内のユーザーIDと一緒に格納しています – parvez

答えて

2

アイテムは現在追加されていますボタンをレンダリングする前にお気に入りにするかどうかを決定し、テキストを適切に設定します。

あなたのデータ構造はわかりませんが、PHPで、ブール変数$isFavouriteを定義することができます。このフィールドは、問題のアイテム(おそらく$idで定義されている同じアイテムあなたが与えた)。

だから、あなたがしなければならないだろうがすべてにマークアップを変更です:

<button class='btn btn-sm btn-info favourite_feature' value="<?php echo $id;?>"><?php echo ($isFavourite == true ? 'remove from favourites' : 'add to favourites')?></button> 
+0

サーバー側のコードを追加して投稿を編集しました。はい、好きな結果IDをユーザーIDとともにdb – parvez

+0

に保存しました。ページがリロードされたときに実行されるサーバーサイドのコードでは、そのコースとユーザーのお気に入りに行があるかどうかを調べ、それに応じて$ isFavouriteをtrueまたはfalseに設定するだけです。あなたはすでに簡単にデータベースを照会する方法を知っているようです。 – ADyson

+0

サーバーサイドコードは、ボタンをクリックしたときにのみ実行され、どのように変数をサーバーサイドコードからフロントエンドに渡すことができますか?サーバーサイドコードで1変数を宣言してこれを試してから、フロントエンドでエコーしました。 '未定義の変数エラー'、少し助けが必要 – parvez

関連する問題