Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Скрипт голосования ЗА и ПРОТИВ

#1 winston3d

winston3d
  • Пользователь
  • 135 сообщений
  • Репутация: 2
0

Отправлено 07 Февраль 2013 - 17:03

Привет всем!
Подскажите пожалуйста скрипт голосования ЗА и ПРОТИВ. Нужно только это, полноценные опросы не нужны. Весь инет обшарил и ничего не нашёл.
Скрипт должен работать на PHP с MySQL.
В принципе могу и сам написать, только подскажите как сделать защиту по IP - целесообразно ли хранить в одной ячейке все IP голосовавших, а потом искать там полное совпадение с IP зашедшего на страницу?
Планируется использовать так - человек заходит на страницу и видит голосование - понравилась/не понравилась. Т.е в БД должны быть следующие столбцы: ID (страницы) UP (за) DOWN (против) IP (ip всех голосовавших)
А ещё по всей видимости придётся не просто IP вносить в БД, а IP_UP И IP_DOWN что бы можно было голосовать против если проголосовал за и на оборот...

Как-то так полагаю делать

определяем ID страницы
определяем IP клиента
ищем IP клиента в IP_UP и IP_DOWN
если IP клиента есть в IP_UP, то разрешаем голосовать только ПРОТИВ
если IP клиента есть в IP_DOWN, то разрешаем голосовать только ЗА
если IP клиента нет в IP_UP и IP_DOWN то разрешаем голосовать и ЗА и ПРОТИВ
при голосовании ЗА заносим +1 в поле UP и IP клиента в IP_UP
при голосовании ПРОТИВ заносим +1 в поле DOWN и IP клиента в IP_DOWN
если клиент уже голосовал, то выполняем выше описанное, но при этом удаляем его IP из IP_ПРОТИВОПОЛОЖНОГО и делаем -1 в проивоположном


 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Помогите пожалуйста установить скрипт рейтинг голосования
  2. Скрипт голосования PHP + MySQL
  3. Скрипт голосования для 2 картинок что лучше
  4. Поставил скрипт против копирования материалов. Как отнесутся к этому поисковики?
  5. Скрипт голосования за фото

#2 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 07 Февраль 2013 - 17:21

Привет.
Хранить все IP в одной ячейке, конечно же, не целесообразно. Под IP лучше выделить отдельную таблицу. Тогда структура БД будет следующей: например, оцениваются статьи. В таблице статей добавляется поле под общий результат голосования (дефолтное значение поля - 0), либо 2 поля (UP и DOWN). В таблице IP будет 3 поля - ID, IP, ID_статьи.
Соответственно при выводе статей можно и кнопку голосования сделать неактивной, если текущий IP голосовал за статью. Ну а на сервере перед добавлением голоса проверяется есть ли запись в таблице IP, для которой выполняется условие: IP_юзера = IP_в_таблице_IP И ID_голосуемой_статьи = ID_в_таблице_IP. Если таковая запись есть, значит голос не принимается.

если IP клиента есть в IP_UP, то разрешаем голосовать только ПРОТИВ если IP клиента есть в IP_DOWN, то разрешаем голосовать только ЗА

ИМХО, не логично. Юзер должен голосовать только раз - либо понравилось, либо не понравилось.
  • 1


#3 winston3d

winston3d
    Topic Starter
  • Пользователь
  • 135 сообщений
  • Репутация: 2

Отправлено 07 Февраль 2013 - 17:40

Ага, спасибо за подсказку... Придумал как ещё лучше сделать:
Создаём таблицу со следующими полями - IP | ID | VOTE
при голосовании создаём запись занося IP в соответствующее поле, то же самое с ID и 1 если голосовали за и 0 если голосовали против.
Что бы подсчитать голоса за определённую страницу - делаем выборку значений где ID соответствует id страницы и значение поля VOTE равно 1 и аналогично для подсчёта голосов против.
Ну а дальше всё понятно...

Привет.
Хранить все IP в одной ячейке, конечно же, не целесообразно. Под IP лучше выделить отдельную таблицу. Тогда структура БД будет следующей: например, оцениваются статьи. В таблице статей добавляется поле под общий результат голосования (дефолтное значение поля - 0), либо 2 поля (UP и DOWN). В таблице IP будет 3 поля - ID, IP, ID_статьи.
Соответственно при выводе статей можно и кнопку голосования сделать неактивной, если текущий IP голосовал за статью. Ну а на сервере перед добавлением голоса проверяется есть ли запись в таблице IP, для которой выполняется условие: IP_юзера = IP_в_таблице_IP И ID_голосуемой_статьи = ID_в_таблице_IP. Если таковая запись есть, значит голос не принимается.


ИМХО, не логично. Юзер должен голосовать только раз - либо понравилось, либо не понравилось.

Ну в контакте же можно поставь лайк и убрать его... Всё норм

Но тогда в таблице будет много записей - это плохо?
  • 0

#4 alex159

alex159
  • Пользователь
  • 492 сообщений
  • Репутация: 32

Отправлено 27 Февраль 2013 - 20:45

winston3d, Лучше уже самому написать, если знаете как это делать. Ну для начала поставьте зашиту от чайников это кукиксы. А также по IP.
Лучше если было бы голосование с авторизацией через социальные сети(но это не удобно), тогда ограничение на голосование с одного аккаунта 999 дней( если хотите что бы вобще не голосовали больше одного раза)
  • 0

#5 denis79513

denis79513
  • Пользователь
  • 56 сообщений
  • Репутация: 7

Отправлено 06 Март 2013 - 16:27

Сделайте 2 таблицы, первая pages
Структура:
id | name | url

Вторая таблица ips
Структура:
pid | ip | value

Открывается страница с голосованием и сразу же проверяется ip пользователя, если записи в таблице ips нет, то предлагается 2 варианта, после выбора выполняется запрос, который добавляет запись в таблицу ips со значениями: ИД_СТРАНИЦЫ, ИП, UP/DOWN.

Если же совпадение в таблице ips найдено, то из него берется значение (из поля value) и предлагается поменять значение и запись обновляется.

Так же могу рекомендовать вам ипользовать текстовый файл для хранения таблицы ips.
И так же стоит обратить внимание при определении ip адреса пользователя, при использовании прокси механизм весьма усложняется.
  • 0


Оформление форума – IPBSkins.ru