Как проверить наличие куков?
Здравствуйте. Есть код:
<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, время: 14:49. |