Как проверить наличие куков?
Здравствуйте. Есть код:
<script type="text/javascript">
$(document).ready(function() {
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();
function getCookie(syslike) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + syslike.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
syslike = getCookie('syslike');
alert(syslike)
}
if (syslike = undefined) {
document.cookie = "syslike=Y55YY56YY57Y; expires=" + date;
alert(syslike)
}
});
</script>
По идее он должен создавать куки если их нету. Куки он создает, но мне нужно создавать их только в том случае, если их нет. Пробовал условием:
if (syslike = undefined) {
Но ничего не получилось. :help: |
Цитата:
|
Цитата:
if (syslike = undefined) {
document.cookie = "syslike=Y55YY56YY57Y; expires=" + date;
alert(syslike)
}
|
StartGames,
это скорее присвоение, а нужно условие, чего-то самую малость не хватает в строке 1. |
if (syslike == undefined) {
document.cookie = "syslike=Y55YY56YY57Y; expires=" + date;
alert(syslike)
}
вот так?) если да, то пробовал - без резрезультатно... |
StartGames,
проверять на своём сервере
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();
function getCookie(syslike) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + syslike.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
var syslike = getCookie('syslike');
alert(syslike);
if (!syslike) {
document.cookie = "syslike=Y55YY56YY57Y; expires=" + date;
alert(getCookie('syslike'))
}
});
</script>
|
Не знаю как, но работает))) Я же вроде так делал но эффекта не было(( Благодарю)
Пытаюсь вызвать событие клика по кнопке, и ищу в куках значение Y55Y оно там есть, но при клике не реагирует никак...
<script>
$(document).ready(function() {
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();
function getCookie(syslike) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + syslike.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
var syslike = getCookie('syslike');
alert(syslike);
if (!syslike) {
document.cookie = "syslike=Y55YY56YY57Y; expires=" + date;
alert(getCookie('syslike'))
}
});
</script>
<script type="text/javascript">
$(document).ready(function() {
$(document).on('click','#syslike',function(){
if (syslike.indexOf('Y55Y') > -1){
alert('есть')
} else {
alert('нет')
}
});
});
</script>
<button id="syslike">but</button> |
почему то не может увидеть поисковую фразу Y55Y в куках...
пробую вот так но безрезультатно...
if (syslike.indexOf('Y55Y') > -1){
|
StartGames,
где строка 4? смотреть строку 11 выше код. |
вы имеете ввиду пропуски?
сделал так:
<script type="text/javascript">
$(document).ready(function() {
$(document).on('click','#syslike',function(){
if (syslike.indexOf('Y55Y') > -1){
alert('есть')
} else {
alert('нет')
}
});
});
</script>
результата к сожалению это не дало... возможно дело в том что они в разных блоках <script type="text/javascript"> Хотя клик вызывается. Не проходит именно условие:
if (syslike.indexOf('Y55Y') > -1){
alert('есть')
} else {
alert('нет')
}
|
StartGames,
:-?
<script>
$(function() {
function getCookie(syslike) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + syslike.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
$(document).on('click', '#syslike', function() {
var syslike = getCookie('syslike');
if (syslike.indexOf('Y55Y') > -1) {
alert('есть')
} else {
alert('нет')
}
});
});
</script>
|
рони, спасибо тебе добрый человек))
В общем решил описать что это и для чего я это делаю. Решил создать интернет магазин (движок opencart 2.3.0.2). И мне нужна система лайков на сайте. Чтобы при клике на добавить в избранное (переделал под сердечко) https://prnt.sc/vi2s9e добавлялся + 1 лайк. Но если пользователь повторно кликает - лайк отнимается. Вот для этого мне нужен был скрипт с куками. Это хотя бы базовая защита от накруток. Я понимаю что куки можно удалить, но мне большего пока и не надо. Пробовал делать через БД - не увенчалось успехом. Потом нашел вот такой вот скриптик: https://myrusakov.ru/php-likes.html Я понимаю что довольно костыльно делать все это через сохранение лайков в файлик а не БД, но пока варианта другого не встречал, а на первое время и этого достаточно. Вот что у меня получилось на данный момент:
<?php
$tovar_id = $product_id; // ID товара
$data = parse_ini_file("likes.ini"); // Парсим INI-файл
$likes = $data[$tovar_id]; // Получаем количество лайков у статьи
?>
<script>
$(document).ready(function() {
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();
function getCookie(syslike) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + syslike.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
var syslike = getCookie('syslike');
alert(syslike);
if (!syslike) {
document.cookie = "syslike=Y55YY56YY57Y; expires=" + date;
alert(getCookie('syslike'))
}
});
$(function() {
function getCookie(syslike) {
let matches = document.cookie.match(new RegExp(
"(?:^|; )" + syslike.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
));
return matches ? decodeURIComponent(matches[1]) : undefined;
}
$(document).on('click', '#syslike', function() {
var syslike = getCookie('syslike');
if (syslike.indexOf('Y<?php echo $product_id; ?>Y') > -1) {
$.ajax({
url: "like.php",
type: "POST",
data: ("id=" + $("#like").attr("data-id")),
dataType: "text",
success: function(result) {
if (result) {
$("#like").text(Number($("#like").text()) - 1);
syslike = syslike.replace('Y<?php echo $product_id; ?>Y', '');
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();
document.cookie = "syslike=" + syslike + "; expires=" + date;
}
}
});
alert('есть')
} else {
$.ajax({
url: "like.php",
type: "POST",
data: ("id=" + $("#like").attr("data-id")),
dataType: "text",
success: function(result) {
if (result) {
$("#like").text(Number($("#like").text()) + 1);
let date = new Date(Date.now() + 86400e3);
date = date.toUTCString();
document.cookie = "syslike=" + syslike + "Y<?php echo $product_id; ?>Y; expires=" + date;
}
}
});
alert('нет')
}
});
});
</script>
<div id="like" data-id="<?=$id?>"><?=$likes?></div> <button id="syslike">but</button> содержимое файлика ini: 50=0 51=0 52=0 53=0 54=0 55=90 56=2 57=31 58=0 59=0 60=0 61=0 62=0 63=0 64=0 65=0 66=0 67=0 68=0 69=0 70=0 и так до 5000)) создаю вручную для каждого товара, потому что если ида товара нет в файле, тогда ошибка. было бы отлично если бы добавлялась новая строка с идом товара <?php echo $product_id; ?>=0 если ее нет содержимое файла php:
<?php
$text = file_get_contents("likes.ini"); // Получаем содержимое файла
$likes = explode("\n", $text); // Разбиваем строку на массив по разделителю в виде перехода на новую строку
$new_likes = array(); // Массив лайков с новыми данными
for ($i = 0; $i < count($likes); $i++) {
$parts = explode("=", $likes[$i]); // Разбиваем строку вида "id_статьи=количество_лайков" по знаку равно
if ($parts[0] == $_POST["id"]) $parts[1] += 1; // Увеличиваем число лайков на 1 у статьи с переданным ID
$new_likes[] = implode("=", $parts); // Формируем новую строку вида "id_статьи=количество_лайков" и добавляем в массив
}
$text = implode("\n", $new_likes); // Преобразуем массив с новыми данными в строку с разделителем в виде перехода на новую строку
echo file_put_contents("likes.ini", $text); // Записываем строку в файл и выводим false в случае неудачи
?>
На данный момент все хотя бы базово работает. Есть только две проблемы: 1) первая как и сказал выше - создаю в файлике лайков ид товара вручную, потому что если ид товара нет в файле, тогда ошибка. было бы отлично если бы добавлялась новая строка с идом товара <?php echo $product_id; ?>=0 если ее нет. я так понимаю что это делается в файле php обработки. Собственно с этим файликом выходит и вторая ошибка. 2) Дело в том, что текущее наработки не умеют отнимать лайк при повторном клике по сердечку (сейчас это кнопка but). Точнее на сайте все работает как надо, счетчик отнимает -1 при повторном нажатии https://prnt.sc/vi36jr Но после перезагрузки страницы, там опять старое значение https://prnt.sc/vi37ie Причем плюсует первый раз как надо. И больше 1 лайка не проставляет, и это то что надо. Но не отнимает при повторном нажатии. т.е. снять лайк нельзя. Я так понимаю что проблема тут:
$.ajax({
url: "like.php",
type: "POST",
data: ("id=" + $("#like").attr("data-id")),
После клика из страницы передаются эти данные в файл like.php и происходит их обработка: if ($parts[0] == $_POST["id"]) $parts[1] += 1; // Увеличиваем число лайков на 1 у статьи с переданным ID но в нем нет условия. в нем только +1 при любом раскладе. Наверное нужно отправлять с данными и номер операции. Например:
$.ajax({
url: "like.php",
type: "POST",
data: ("id=" + $("#like").attr("data-id"); "operation="minus;),
И в самом обработчике php сделать проверку:
if ($_POST["operation"] == 'minus') {-} else {+}
Но в этом как вы уже понимаете, мало что разбираюсь) Но уже благодаря вам на финишной прямой. Еще бы чуть чуть вашей мудрости)) |
StartGames,
тут я мало чем могу помочь, ждите специалистов по php. |
Цитата:
Буду ждать и надеяться)) |
Как только я подбираюсь к решению, оно тут же ускользает(( Теперь по видимому сам хром заблокировал для сайта доступ менять содержимое файла. Все работало, содержимое менялось. Но теперь к сожалению нет((
|
| Часовой пояс GMT +3, время: 10:02. |