你應該做的就是將它們存儲在數據庫中。 您應該將項目的id和當前計數發送到服務器,通過查詢數據庫檢查項目的當前計數和是否存在,如果已驗證,則將它們保存到數據庫(根據您的數據庫方案更新或插入) 。
修訂
注:將它們保存到數據庫之前檢查值正確性是極其重要的。因此,通過發送$_POST
值中的項目當前點擊次數來檢查當前點擊次數是可靠的。你確實應該做的是剛剛經歷$_POST
發送的內容的ID,然後看該項目是否存在,如果存在,編寫以下查詢遞增點擊數只是一個值:
UPDATE item_table SET (click_counter = click_counter+1) WHERE item_id = ?
這有幾個特點:
- 它比常規的SELECT + increment_in_php +更新更快,更 更快
- 它使用更少的系統資源
- 這是遞增的最可靠的方法,因爲得到控制而e 以PHP處理用戶值,另一個請求可能只是更新該值,因此您的PHP值不是最新的 之一。但通過SQL,它已經知道什麼是最新值 ,並且不會有這種衝突。
如果您將click_counter作爲item_table的一列並僅更新它,則上述方法和解釋適用。但我有一個建議(當然,如果你還沒有實現這個)
製作一個表,例如item_counts,然後是三個列,如id,item_id,date_created。您可以添加許多其他列,如user_ip,user_id(如果已通過驗證)等。
然後通過每次訪問,您只需向表中添加一條記錄。這與以前的解決方案有幾個特點:
您可以通過查詢得到click_counts的於數據庫:
SELECT COUNT(id) FROM item_counts WHERE item_id = ?
這種解決方案的缺點是,你必須有渲染頁面時獲得一個項目的click_counts一個額外的查詢。 它當然需要更多的服務器空間,但如果您的項目不是一個小型項目,那麼這是值得的。但是,如果這種做法很容易獲得,我個人從不試圖爲項目的規模殺死好的做法。
結束時更新注的
您可以發送一個Ajax請求:
var already_clicked = [];
$('.heart').on('click', function(e) {
var clickElement = $(this).find('.count');
var itemId = $(this).attr("data-id");
// changes to current view in the page
clickElement.html(parseInt(clickElement.html(), 10) + 1);
// send an ajax request
$.ajax({
url : "server.php",
data : { count : parseInt(clickElement.html(), 10),
id : },
type : "POST",
success : function(data){
// do something in the success
}
});
});
現在你的PHP腳本應該是這樣的
// using MySQLi extension
$db = new mysqli("localhost", "usr", "pass", "db");
if(isset($_POST["count"]) && isset($_POST["id"]))
{
if (check_if_the_count_is_ok($_POST["count"], $_POST["id"]))
{
$new_count = $_POST["count"] + 1;
$stmt = $db->prepare("INSERT INTO counts (count, id) VALUES(?, ?)");
$stmt->bind_param("ii", $new_count, $_POST["id"]);
$stmt->execute();
echo json_encode([ "result" : true ]);
}
else
{
echo json_encode([ "result" : false]);
}
}
function check_if_the_count_is_ok($item_count, $item_id)
{
// write a select query to see if the count is true
}
注:我假設你被點擊item包含一個名爲「data-id」的屬性,它保存要保存到數據庫的項目的ID。
寫入數據的基礎上 –
數據庫將是理想的,但如果你不處理一些後端代碼,你可以使用'locaStorage'保持在瀏覽器中的值頁面被關閉後,後來檢索。 –