Есть код кнопки нравится. На данный момент один пользователь может нажимать на кнопку любое количество раз. Хотелось бы привязать как-то это все к cookie, чтобы пользователь мог нажать на кнопку нравится один раз. Также необходимо учесть, что на одной странице должно быть несколько статей с кнопкой нравится.
ФАЙЛ like.php
<?php
/** Данные для подключения к Базе Данных */
$host = 'localhost';
$database = 'test';
$user = 'root';
$password = '';
/** Подключаемся в Базе Данных */
$pdo = new PDO('mysql:host='. $host .';dbname='.$database.';charset=utf8', $user, $password);
$pdo->exec("SET NAMES utf8");
/** Получаем наш ID статьи из запроса */
$id = intval($_POST['id']);
$count = 0;
$message = '';
$error = true;
/** Если нам передали ID то обновляем */
if($id){
/** Обновляем количество лайков в статье */
$query = $pdo->prepare("UPDATE article SET count_like = count_like+1 WHERE id = :id");
$query->execute(array(':id'=>$id));
/** Выбираем количество лайков в статье */
$query = $pdo->prepare("SELECT count_like FROM article WHERE id = :id");
$query->execute(array(':id'=>$id));
$result = $query->fetch(PDO::FETCH_ASSOC);
$count = isset($result['count_like']) ? $result['count_like'] : 0;
$error = false;
}else{
/** Если ID пуст - возвращаем ошибку */
$error = true;
$message = 'Статья не найдена';
}
/** Возвращаем ответ скрипту */
// Формируем масив данных для отправки
$out = array(
'error' => $error,
'message' => $message,
'count' => $count,
);
// Устанавливаем заголовот ответа в формате json
header('Content-Type: text/json; charset=utf-8');
// Кодируем данные в формат json и отправляем
echo json_encode($out);
?>
ФАЙЛ script.js
$(document).ready(function() {
$(".like").bind("click", function() {
var link = $(this);
var id = link.data('id');
$.ajax({
url: "/like.php",
type: "POST",
data: {id:id}, // Передаем ID нашей статьи
dataType: "json",
success: function(result) {
if (!result.error){ //если на сервере не произойло ошибки то обновляем количество лайков на странице
link.addClass('active'); // помечаем лайк как "понравившийся"
$('.counter',link).html(result.count);
}else{
alert(result.message);
}
}
});
});
});
$(document).ready(function() {
$(".like").bind("click", function() {
var link = $(this);
var id = link.data('id');
if ($.cookie('like') != 'true') {
$.ajax({
url: "/like.php",
type: "POST",
data: {
id: id
}, // Передаем ID нашей статьи
dataType: "json",
success: function(result) {
if (!result.error) { //если на сервере не произойло ошибки то обновляем количество лайков на странице
$.cookie('like', 'true');
link.addClass('active'); // помечаем лайк как "понравившийся"
$('.counter', link).html(result.count);
} else {
alert(result.message);
}
}
});
} else {
alert("Вы уже ставили лайк");
}
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button class="like">like</button>
jquery cookie
внутри $(".like").bind("click", function() проверяйте есть ли кука, если нет, реагировать если есть то ничего не делать.
Но куки удаляются периодически, если хотите для пользователя хранить постоянно статус "лайкнуто", то лучше это как-то в БД хранить
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Есть некоторый цикл (представлен частично от основного кода, но суть передает):
когда я нажимаю на submit появляется форма, но когда я нажимаю на следующий, то прошлый забывается
При работе с qt с компилятором mingw столкнулся с такой проблемой: не мог создать коннекты с сигналами которые были определены в моей кастомной...