PDA

Просмотр полной версии : Как создать голосование


Стефания
14.05.2006, 23:32
Как создать голосование на рнр с выводом на экран результатов в виде диограмки ну или полосочек просто? Не могу понять с чего начать :idontnow:

Псих
15.05.2006, 01:30
Стефания
С бд или без?

А начать надо, полюбому, с формы выбора пунктов голосования и кнопки проголосовать!

Naked
15.05.2006, 17:58
Стефания:
Не могу понять с чего начать
а я бы все-таки сначала скачал стандартный скрипт на твоем месте и посмотрел там все как делается, благо таких ну просто огромная куча:)
А если влом разбираться, то вкратце:
Сначала пользователю должна выдаться формочка с возможностью выбора какого-то варианта ответа (делается <input type=radio> или <input type=checkbox>, если вариантв может быть несколько), затем кнюпель <input type=submit>, потом опять эта (или уже другая страничка) получает данные, записывает их куда-либо (либо в базу, либо в файл, смотря что тебе нужно), потом в ней же читается файл или база, выбираются в массив все варианты с количеством ответов, а затем строится график (если нужно не слишком наворочено, то я например, делаю простую табличку в которой ячейки <td> имеют определенную длину, закрашиваю их в разные цвета, для красоты можно еще и ширину ячейки поменьше сделать - смотрится лучше), и соответственно либо перед полоской, либо после нее пишем, что за пункт:) вроде бы все...

Стефания
15.05.2006, 21:23
Псих
Псих:
С бд или без?
Без БД.Псих:
А начать надо, полюбому, с формы выбора пунктов голосования и кнопки проголосовать!
Хи.....формочку-то я уже сделала....осталось сделать, чтоб она работала :)
Naked
Вот это все я теоретически представяю.....вот у меня лично был вопрос....нужно ли делать массив и как распределять соответственно значения голосов.
Кстати да, нужно поискать готовый скрипт.

Псих
15.05.2006, 21:35
Стефания:
нужно ли делать массив и как распределять соответственно значения голосов.
Идеальный вариант считывать в массив кол-во говолосов, а потом просто циклом отрисовывать колонки (я это делал заполняя нужное кол-во ячеек в таблице цветом), хотя правильнее конечно же используя gd бибилотеку

Al-x
16.05.2006, 21:48
Добавлю лишь по поводу того, как можно распределять. Нужно просто для каждого варианта вычислить относительное значение результата(количество ответов на данный вопрос разделить на общее число ответов). После этого зная максимальную длину полосочки можно (например) домножить относительное значение результата на эту длину, округлить и поставить в качестве width gif'у.
Аналогично можно генерить картинку в GD - только вместо длины gif'а рисовать прямоугольнички/сектора круга...

Necromancer
20.03.2010, 14:23
Добрый день. Вопрос стал следующим образом. Есть голосования на PHP, их грубо говоря штук 500 на 1 сайте [возможно будет и больше]. Изпользуем БД. Нужно сделать чтобы человек с 1 IP мог проголосовать только 1 раз за день в 1 голосовании, т.е. он голосует в 1м и переходит на второе голосование и так пока они не закончатся, НО человек не должен иметь право проголосовать в 1 голосовании 2 раза.

Идея была следующая:
таблица в БД - sessions
где все разпределаятся на:
IP | Date | id_poll

Там где ИП - ип юзера, дата - момент голосования, id_poll - ID голосования.

Таблица будет обнуляться каждые 24 часа в 00:00.

И потом идет проверка для соответствующего голосования, голосовал ли человек с его IP.

Но этот путь не очень правилен, ибо если в день проголосуют 1000 человек, хотя бы в 20 голосованиях, получится - 20000 записей в базу.

Может у кого-нибудь есть уже готовое решение задачи. :beer: :help:

Hubbitus
20.03.2010, 15:44
Но этот путь не очень правилен, ибо если в день проголосуют 1000 человек, хотя бы в 20 голосованиях, получится - 20000 записей в базу.

Ну так и что? Если много голосуют, много записей и будет. Результаты голосования-то Вы же все равно считаете? Или храните только агрегированные данные?

Necromancer
20.03.2010, 15:45
Ну так и что? Если много голосуют, много записей и будет. Результаты голосования-то Вы же все равно считаете? Или храните только агрегированные данные?

То есть этот метод вполне имеет право жить?

Hubbitus
20.03.2010, 15:52
Ну а какие видны проблемы?

Necromancer
20.03.2010, 17:44
Просто вопрос был чтобы база не нагружалась при большом количестве голосов, но также есть вариант например сделать:

IP | Date | ID_of_poll
и будут как-то так
192.168.0.1 | 20.03.2010 14:52 | 1,2,4,20,65,34

и через explode сделать проверку из ID_of_poll, чтобы небыло огромного кол-ва записей в базе.

Hubbitus
20.03.2010, 17:49
Так все равно будет дописываться при каждом голосовании. И потом при проверке будет еще больше нагрузка!

Naked
21.03.2010, 12:58
Вопрос следующий - а голосования идут по порядку? Просто по описанию мне так показалось - тогда:
IP | Date | Number_of_poll

где number_of_poll - номер следующего голосования, т.е. человек 1 проголосовал - в number_of_poll стоит 2 - т.е. он может начать только со второго голосования....

А вообще вариант с 20 000 записей нормальный - только грамотно индекс нужно сделать, тогда все будет быстро, по опыту мускул 1 500 000 записей обрабатывает вполне адекватно - и таблица более нагружена была:)