![]() |
Как создать голосование
Как создать голосование на рнр с выводом на экран результатов в виде диограмки ну или полосочек просто? Не могу понять с чего начать :idontnow:
|
Стефания
С бд или без? А начать надо, полюбому, с формы выбора пунктов голосования и кнопки проголосовать! |
Цитата:
А если влом разбираться, то вкратце: Сначала пользователю должна выдаться формочка с возможностью выбора какого-то варианта ответа (делается <input type=radio> или <input type=checkbox>, если вариантв может быть несколько), затем кнюпель <input type=submit>, потом опять эта (или уже другая страничка) получает данные, записывает их куда-либо (либо в базу, либо в файл, смотря что тебе нужно), потом в ней же читается файл или база, выбираются в массив все варианты с количеством ответов, а затем строится график (если нужно не слишком наворочено, то я например, делаю простую табличку в которой ячейки <td> имеют определенную длину, закрашиваю их в разные цвета, для красоты можно еще и ширину ячейки поменьше сделать - смотрится лучше), и соответственно либо перед полоской, либо после нее пишем, что за пункт:) вроде бы все... |
Псих
Цитата:
Цитата:
Naked Вот это все я теоретически представяю.....вот у меня лично был вопрос....нужно ли делать массив и как распределять соответственно значения голосов. Кстати да, нужно поискать готовый скрипт. |
Цитата:
|
Добавлю лишь по поводу того, как можно распределять. Нужно просто для каждого варианта вычислить относительное значение результата(количество ответов на данный вопрос разделить на общее число ответов). После этого зная максимальную длину полосочки можно (например) домножить относительное значение результата на эту длину, округлить и поставить в качестве width gif'у.
Аналогично можно генерить картинку в GD - только вместо длины gif'а рисовать прямоугольнички/сектора круга... |
Добрый день. Вопрос стал следующим образом. Есть голосования на 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: |
Цитата:
|
Цитата:
|
Ну а какие видны проблемы?
|
Просто вопрос был чтобы база не нагружалась при большом количестве голосов, но также есть вариант например сделать:
IP | Date | ID_of_poll и будут как-то так 192.168.0.1 | 20.03.2010 14:52 | 1,2,4,20,65,34 и через explode сделать проверку из ID_of_poll, чтобы небыло огромного кол-ва записей в базе. |
Так все равно будет дописываться при каждом голосовании. И потом при проверке будет еще больше нагрузка!
|
Вопрос следующий - а голосования идут по порядку? Просто по описанию мне так показалось - тогда:
IP | Date | Number_of_poll где number_of_poll - номер следующего голосования, т.е. человек 1 проголосовал - в number_of_poll стоит 2 - т.е. он может начать только со второго голосования.... А вообще вариант с 20 000 записей нормальный - только грамотно индекс нужно сделать, тогда все будет быстро, по опыту мускул 1 500 000 записей обрабатывает вполне адекватно - и таблица более нагружена была:) |
Часовой пояс GMT +4, время: 14:17. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.