2015-01-16 124 views
-1

我正在使用自定義mvc框架並添加了一個favourite按鈕。一旦按下這個顯示'成功添加到收藏夾'div,當再次點擊時,它顯示'成功刪除收藏夾'div加載頁面時檢查/設置按鈕狀態

我的查詢工作正常,添加和從我的favourite表刪除,因爲它應該。

我現在想要做的是根據選擇改變按鈕的狀態。例如,如果用戶已將的書中其收藏夾添加btn-success類,如果用戶還沒有,請使用btn-default類。

我不知道最好的方法來解決這個問題。我是新來的PHP和JS所以任何意見或方向表示讚賞。我曾嘗試添加toggleClass到我的JS,但它不工作。我需要在pageLoad上執行查詢/檢查嗎?

我已將下面的代碼包含在內以供參考。

itemView.php

echo 
'<td> 
<button id="fav" value="'.$book->id.'" type="button" class="btn btn-default"></button> 
</td>'; 

JS(在itemView.php)

$(document).ready(function(){ 
    $("#fav").click(function(){  
    book_id = $(fav).val(); 
    $.ajax({ 
     type: 'POST', 
     url: '<?php echo URL; ?>books/checkFav', 
     data: {book_id:book_id}, 
     success: function() { 
      window.location.reload(true); 
      $("#fav").addClass("btn-success"); 
      }//end success   
     });//end ajax 
    }); 
}); 

checkFav功能

public function checkFav($bookid,$userid) 
{ 
$bookid=$_REQUEST['book_id']; 
$userid=$_SESSION['user_id']; 

$sql = "SELECT * FROM favourite WHERE book_id = :book_id AND user_id = :user_id"; 
$query = $this->db->prepare($sql); 
$query->bindParam(':user_id', $userid); 
$query->bindParam(':book_id', $bookid); 
$query->execute(); 
$rows_found = $query->fetchColumn(); 

    if(empty($rows_found)) { 
     $sql = "INSERT INTO favourite (book_id, user_id) VALUES (:book_id, :user_id)"; 
     $query = $this->db->prepare($sql); 
     $query->bindParam(':user_id', $userid); 
     $query->bindParam(':book_id', $bookid); 
     $query->execute(); 

     if ($query->rowCount() == 1) { 
      // successful add to favs 
      $_SESSION["feedback_positive"][] = FEEDBACK_ADDED_TO_FAVS; 
      return true; 
     } 

     } else { 
     $sql = "DELETE FROM favourite WHERE book_id = :book_id AND user_id = :user_id"; 
     $query = $this->db->prepare($sql); 
     $query->bindParam(':user_id', $userid); 
     $query->bindParam(':book_id', $bookid); 
     $query->execute(); 

     if ($query->rowCount() > 0) { 
      // successful remove from favs 
      $_SESSION["feedback_negative"][] = FEEDBACK_REMOVED_FROM_FAVS; 
      return true; 
      }   
     } 
} 

回答

1
Use session variable in the ajax request script and using that session variable in page where button exist you can play with button css. for example: 
Put this code where Button exists. 
$css = "btn_default"; 
if($_SESSION['btnClicked'] == "success") { 
    $css = "btn_success"; 
} 
Use $css variable in the button class like-- 
<button id="fav" value="'.$book->id.'" type="button" class="btn <?php echo $css?>"></button> 
This session will manage in the ajax script where in you are adding and deleting favourite. 
set session value 
$_SESSION['btnClicked'] = 'success' 
below the line 
$_SESSION["feedback_positive"][] = FEEDBACK_ADDED_TO_FAVS; 
and unset the session 
unset($_SESSION['btnClicked']); 
after the line. 
$_SESSION["feedback_negative"][] = FEEDBACK_REMOVED_FROM_FAVS; 
+0

只有一件事我看到一個通知'注意:未定義的索引:btnClicked ...在第4行 - 這是'if($ _ SESSION ['btnClicked'] ==「success」){'不是一個大問題儘管如此,有什麼想法? –

+1

默認情況下,沒有名稱爲「btnClicked」的會話索引,它在if條件中使用。請使用以下代碼:if(isset($ _ SESSION ['btnClicked'])&& $ _SESSION ['btnClicked'] ==「success」){ $ css =「btn_success」; } ....希望如此未定義的通知將被刪除。 –

+0

完美! @#的Pankaj –