Голосование за рейтинг статьи

Нужно дать возможность незарегистрированым пользователям голосовать за статью

#32 30 марта 2016 в 21:48


Совсем не актуально.....................

Сергей Сергеевич

Это кому как
#33 17 октября 2016 в 00:58
бамп теме
#34 25 декабря 2016 в 20:39
Сделал голосование гостям за рейтинг статей. Но заметил такую фишку. Гости могут голосовать только один-единственный раз. То есть, если какой-либо гость первым нажал статье плюсик и рейтинг статьи стал +1, то больше никто из гостей, независимо с этого же или с другого IP он зашел, голосовать не может. Кто подскажет, в чем причина, как поправить?
#35 25 декабря 2016 в 20:45
al955, проверьте в базе данных что там записалось id пользователя = 0 или i адрес.
#36 25 декабря 2016 в 22:01


al955, проверьте в базе данных что там записалось id пользователя = 0 или i адрес.

Нил™

В какой таблице это посмотреть?
#37 25 декабря 2016 в 22:17
cms_ratings

item_id это id статьи.
После того как вы под гостем проголосовали за статью, можно посмотреть что в поле user_id

как я понял автор хака, предлагает для гостей вместо user_id записывать ip адрес, что бы другой гость с другим ip мог тоже голосовать. Если у вас там 0 то вероятно по каким то причинам туда записался 0 id гостя и другой гость не может проголосовать. Если там ip то вероятно проблема в том, что пытаетесь проголосовать повторно с того же ip
#38 25 декабря 2016 в 22:26


cms_ratings

item_id это id статьи.
После того как вы под гостем проголосовали за статью, можно посмотреть что в поле user_id

как я понял автор хака, предлагает для гостей вместо user_id записывать ip адрес, что бы другой гость с другим ip мог тоже голосовать. Если у вас там 0 то вероятно по каким то причинам туда записался 0 id гостя и другой гость не может проголосовать. Если там ip то вероятно проблема в том, что пытаетесь проголосовать повторно с того же ip

Нил™

Посмотрел. Везде где голосовали гости, в поле user_id стоит 0
#39 25 декабря 2016 в 22:48

Посмотрел. Везде где голосовали гости, в поле user_id стоит 0

al955
ну тогда логично, что другой гость (а у него тоже id 0 ) не может проголосовать.

Проверьте верно ли вы сделали правки в lib.karma.php

По моему, вот это

  1. if(cmsAlreadyKarmed($target, $item_id, $inUser->id)){ return false; }
  2.  
  3. //вставляем новый голос
  4. $sql = "INSERT INTO cms_ratings (item_id, points, ip, target, user_id, pubdate)
  5. VALUES ('$item_id', '$points', '$ip', '$target', '{$inUser->id}', NOW())";

Нужно заменить на это

  1. if ($inUser->id){
  2.  
  3. if(cmsAlreadyKarmed($target, $item_id, $inUser->id)){ return false; }
  4.  
  5. //вставляем новый голос
  6. $sql = "INSERT INTO cms_ratings (item_id, points, ip, target, user_id, pubdate)
  7. VALUES ('$item_id', '$points', '$ip', '$target', '{$inUser->id}', NOW())";
  8. } else {
  9.  
  10. if(cmsAlreadyKarmed($target, $item_id, $ip)){ return false; }
  11.  
  12. //вставляем новый голос
  13. $sql = "INSERT INTO cms_ratings (item_id, points, ip, target, user_id, pubdate)
  14. VALUES ('$item_id', '$points', '$ip', '$target', '$ip', NOW())";
  15.  
  16. }

По идее, для гостя должен писаться его ip, только вместо 127.0.0.0 запишется как 127000
И тогда с другого ip можно голосовать
Остальную часть правок в других файлах я не изучал. Как я понял проблема у вас только здесь.
Не проверял.
#40 25 декабря 2016 в 23:01
Только при таком подходе, если вы выводите или в будущем попытаетесь выводить список пользователей, кто голосовал за статью, возникнет путаница, так как будет по ip которое записывается в user_id искать пользователя с таким id. Это стоит сразу иметь ввиду
#41 25 декабря 2016 в 23:10
Да теперь все работает, но только в отношении новых статей или тех, за которые еще не голосовали. Старые статьи, за которые уже раньше проголосовали гости, больше голосовать не дают. Видимо, нужно в базе править. Что там необходимо прописать в поле?
#42 25 декабря 2016 в 23:11


Только при таком подходе, если вы выводите или в будущем попытаетесь выводить список пользователей, кто голосовал за статью, возникнет путаница, так как будет по ip которое записывается в user_id искать пользователя с таким id. Это стоит сразу иметь ввиду

Нил™

Понятно. Но этого я делать не планирую
#43 25 декабря 2016 в 23:23

только вместо 127.0.0.0 запишется как 127000

Нил™

Не совсем так. Вместо 127.0.0.0 запишется 2130706433. Там есть функция, обрабатывающая айпи. php.net/ip2Long
Так что перед инсертом советую обработать айпи.
$ip = sprintf('%u', ip2long($ip));
#44 25 декабря 2016 в 23:23
Рзобрался, нужно вместо ноля любое значение IP прописать.

Спасибо за помощь!
#45 25 декабря 2016 в 23:23
Замените нулевое значение на другое какое нибудь типа
UPDATE `cms_ratings` SET `user_id`= '' WHERE `user_id` = '127000';

сначала бэкап таблицы

Вообще то глядя на это, ещё одна мысль.
Если когда нибудь у вас будет пользователь с таким же id как записанный ip, то он не сможет проголосовать потому что уже проголосовал)
Хотя вряд ли конечно id пользователя будет таким же длинным числом как ip, но если у вас 100000 пользователей и выше…
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.