БлогNot. Комментарии к статье #2124 (1-8)

Пишем простой "рейтинг со звёздочками" для сайта


Комментарии отсортированы по убыванию даты, нажмите сюда, чтобы отсортировать их по возрастанию даты


Автор: 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-м не проверял