Пишем простой "рейтинг со звёздочками" для сайта
Комментарии отсортированы по убыванию даты, нажмите сюда, чтобы отсортировать их по возрастанию даты
Автор: DImon IP: определён
Какойто не понятный бред исполнил,только зачем кто знает?
27.11.2023, 20:49
Ответ: Да лишь бы ты, сынок, хорошо учился!
Автор: Женя (запаролен) IP: определён
http://pol.userzona.ru/administrator/laboratorya/star-rating-system2/
Я не пойму что у меня с дизайном? Где звездочки
14.04.2022, 01:32
Ответ: Наверное, картинку stars.png не запостил в папку скрипта
Автор: Николай IP: определён
Понятно.Спасибо за быстрый ответ.
18.04.2019, 14:17
Автор: Николай IP: определён
Добрый вечер! <br> Вставил Ваш "рейтинг со звёздочками" на HTML сайт, работает хорошо, но на каждую страницу ставить id - дело немного хлопотное (если страниц много), и к тому же, где то можно ошибиться. <br> Вообщем вставил <?php $rating = mt_rand (1,1000); ?> , теперь id подставляет случайные, работает, но получается что голосовать можно хоть каждую минуту и всегда отображает 1 голос. Тестирую на локальном Open Server, Сам я не силён в этих вопросах, и хочется узнать Ваше мнение. Может что то другое подскажете.Спасибо. <br> Может набраться терпения и ставить id на каждую стр.?
18.04.2019, 03:13
Ответ: id записи нужен, чтобы различать их между собой, идентифицировать каждую запись уникальным образом. В любой таблице базы данных он есть, конечно, никто не назначает их вручную и, тем более, случайным образом. В начале статьи: "Предполагается, что Вы умеете работать с локальным хостом, исходниками на HTML и PHP, а также подключаться к серверу баз данных MySQLi..."
Автор: Николай IP: определён
На реальном сайте рейтинг заработал. https://tim.in.ua/cartoon.html , сейчас сделал для проверки пока только на одной стр., Спасибо Вам большое. Но всё равно вопросы ещё есть. Почему то рейтинг всегда показывает 5 звёзд и всегда стоит оценка 5.0 , хотя там меньше. Но в любом случае спасибо ОГРОМНОЕ!!!
15.02.2019, 21:55
Ответ: 5 звёзд в начале - так задумано, чтоб юзверьки знали, как голосовать :)
<div class="rating" id="rating_id">5.0</div>Как альтернатива - при выводе формы делать лишний запрос к базе для вывода текущей оценки (учитывая случай, когда оценок ещё нет)
Автор: Николай IP: определён
Сайт с страницами html , после изменения 22 строки выдаёт почти то же самое: ::1Ошибка SQL: [INSERT INTO starvotes (date,dbid,ip,rating) values (1550221018,1,INET_ATON('::1'),5)]; Incorrect string value: ''::1'' for function inet_aton
15.02.2019, 16:09
Ответ: Судя по сообщениям, в обоих случаях проблема в том, что функция get_ip не может получить обычный IP-адрес ipv4 (например, на локальном хосте это строка 127.0.0.1).
Возможно, у тебя на сервере ipv6, тогда нужна альтернативная функция получения IP, например
function get_ip () { $ipaddress = ''; if (isset($_SERVER['HTTP_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_CLIENT_IP']; else if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_X_FORWARDED'])) $ipaddress = $_SERVER['HTTP_X_FORWARDED']; else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP'])) $ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP']; else if(isset($_SERVER['HTTP_FORWARDED_FOR'])) $ipaddress = $_SERVER['HTTP_FORWARDED_FOR']; else if(isset($_SERVER['HTTP_FORWARDED'])) $ipaddress = $_SERVER['HTTP_FORWARDED']; else if(isset($_SERVER['REMOTE_ADDR'])) $ipaddress = $_SERVER['REMOTE_ADDR']; else $ipaddress = 'UNKNOWN'; return $ipaddress; }
(я это не проверял).
Ещё вариант - попробовать делать
return inet_pton($client_ip);
из функции get_ip (её последняя строка) но тогда в запросах не надо INET_ATON:
$sql = 'SELECT count(id) FROM '.VOTES_NAME.' WHERE dbid='.$dbid.' and ip=\''.$ip.'\''; //строка 33 $sql = 'INSERT INTO '.VOTES_NAME.' (date,dbid,ip,rating) values ('. $time.','.$dbid.',\''.$ip.'\','.$myball.')'; //строки 40-41
Повторюсь, что у меня нет твоего софта на PHP7, могу только предполагать
Автор: Николай IP: определён
На локальном Wampserver PHP 7.2.10 , MySQL 5.7.23 , А вдобавок к таблицам ещё нужны какие то записи или приведенного примера достаточно ? Или может пробовать сразу на рабочем сайте.
15.02.2019, 15:43
Ответ:
Ну вот под "семёркой", как и написал, не проверял. На реальных хостингах пока почти везде PHP 5.X :)
Что ещё понадобится на реальном хостинге - учесть вот это место из статьи:
Важно, что в реальном скрипте идентификатор db_1 должен формироваться программно и получать после префикса db_ номер записи (идентификатор) некоторой страницы, на которой расположен рейтинг и которая сейчас оценивается.
То есть, id этого элемента получает, например, значение db_999 для записи моего блога с идентификатором 999.
Например, если HTML-форма встраивается в какой-то PHP-скрипт показа страницы и у страницы есть идентификатор, сохранённый в переменной $id, код формы изменится на
<div id="rating"> <div class="comment" id="message">Оцените этот материал:</div> <div> <div class="stars" id="db_<?php echo $id; ?>"></div> <p class="progress" id="progress_id"></p> </div> <div class="rating" id="rating_id">5.0</div> </div>
(если код помещён вне тега <?php ... ?>)
Автор: Николай IP: определён
По теме: Столкнулся вот с таким после нажатия рейтинга - Ошибка SQL: [INSERT INTO starvotes (date,dbid,ip,rating) values (1550175212,1,INET_ATON('::1'),5)]; Incorrect string value: ''::1'' for function inet_aton Всё,для меня тупик! Я понимаю ,беда в БД ,но что может это значить.
15.02.2019, 03:24
Ответ: Впечатление, что хост у тебя не может получить строчку с IP-адресом, проверь, что возвращает функция get_ip, например, поменяв 22-ю строку в rating.php на
$ip = get_ip(); echo "$ip";Ну и в какой версии PHP+MySQLi выполнял? У меня в PHP5.5 всё сработало, в 7-м не проверял