Сценарий голосования и пример простой программы голосования

Сегодня, наконец-то я добрался до темы голосования. Давно себе хотел сделать опрос php на сайте. Но никак не получалось!

Начнем с того, к чему я пришел, потратив целый день, проштудировав сеть!? Надо отметить, что все виды голосовалок, которые я проштудировал, ну, мягко скажем не очень! Кроме тех, которые используют базу данных и имеет админку! Это да! Мне понравился из всего лишь такой вариант – smart php poll!

И для того, чтобы не было путаницы на странице с описанием голосования, сделаем навигацию по странице:

Установка.
Настройка.
Админка.
Создание опроса.
Редактирование опроса.

И вот я хочу вам рассказать о таком скрипте голосования.

Системы голосования на web-серверах

Есть несколько вариантов ОТВЕТОВ.

Посетитель должен выбрать правильный с его точки зрения ответ (при этом он имеет право узнать, какова полная картина голосования в данный момент).

На самом деле, если бы все было так просто, существовал бы один или несколько простых скриптов (вроде раздаваемых на http://www.script.ru/), которые можно было бы брать за основу и переделывать под конкретные нужды. Но при внимательном рассмотрении оказывается, что здесь существует еще масса тонких моментов и подводных камней. Поэтому я полагаю, что универсального скрипта подобного рода просто не существует, и лучше всего углубляться в процесс написания системы голосования, начиная с простых примеров, шаг за шагом отслеживая возможные возникающие проблемы и при этом четко понимая, как можно научиться их обходить.

Итак, если с исходной формулировкой задачи все более или менее понятно, то с методом ее решения нужно определиться. В принципе, вариантов использования голосования на сайте не так много. Я постараюсь осветить варианты реализации некоторых из них.

Разделим для начала задачу на два класса: “простой счетчик” и “счетчик со статистикой”.

В качестве инструментов я предлагаю выбрать PHP3 (http://www.php3.net/) в качестве on-line-препроцессора и Perl5 (http://www.perl.com/) для off-line-обработки.

Язык PHP3 уже достаточно распространен среди хостинг-провайдеров (webmaster.comset.net) как в России, так и за рубежом. Он был создан специально для написания скриптов, исполняемых на стороне сервера. Для сервера Apache он работает в виде дополнительного модуля, обеспечивая высокую скорость работы и удобство программирования.

Программа на PHP представляет собой файл на языке HTML с включенными в него тегами PHP, которые выглядят следующим образом:

Читайте также:  Пресс-центр

Таким образом, вы можете легко подготовить весь дизайн страницы в любимом редакторе HTML, а затем вставить в него необходимые команды PHP.

Скриншоты, т.е. как будет выглядеть блока опроса и его результаты на сайте:

Сценарий голосования и пример простой программы голосования

Сценарий голосования и пример простой программы голосования

Сценарий голосования и пример простой программы голосования

Сценарий голосования и пример простой программы голосования

Формат хранения результатов на сервере (JSON):

Как подключить голосовалку к страницам сайта:
1. Вставить в необходимую часть страницы следующий HTML-код голосовалки (оформление формы выполнено с помощью стилей Bootstrap):

Внимание: В HTML коде необходимо указать путь к файлу poll-vote.php (если конечно он не находится в той же директории, в которой расположена и страница).
Если на сайте не используется Bootstrap, то тогда необходимо написать стили для оформления опроса и результатов голосования.
2. Вставить следующий фрагмент сценария JavaScript на страницу (после подключения jQuery):

В файле polls.php хранятся все опросы в формате ассоциативного массива (каждый опрос – это объект).
Синтаксис опроса:

Для того чтобы добавить новый опрос, необходимо продублировать этот код и ввести необходимые значения в соответствующие переменные.
Установка, какой опрос показывать на страницах управляется с помощью значения переменной $current.

$current = ‘pool-1’;

Это очень удобно, т.к. ничего не надо править на страницах. Т.е. для того чтобы установить показ другого опроса на всех страницах сайта достаточно будет просто указать необходимый ключ опроса в качестве значения этой переменной.
Также этот файл возвращает результаты, если пользователь уже проголосовал на сайте (для этого используются COOKIE).

Второй файл (poll-vote.php) записывает данные голосования в файл poll-results.txt, который создаётся по умолчанию в той же директории, в которой расположены эти 2 php файла. В качестве формата данных используется ассоциативный массив. Кроме этого данный файл после того как пользователь проголосовал ещё возвращает результаты голосования (в качестве ответа).

Код файла polls.php:

Код файла poll-vote.php:

Админка голосования

Заходим в админку по адресу

Сценарий голосования и пример простой программы голосования

Создание опроса.

Заходим в создание опроса и создаем опрос, там настолько все просто, что и писать то нечего! Создаем название, количество строк – готово.

После этого заполняем строки.

Здесь нужно отметить, что количество строк не регулируется, поэтому определитесь сразу, сколько у вас будет строк!

От простого к сложному.

Эх, усложнять так усложнять. Убьем сначала первого зайца. Давайте заведем отдельный файл “конфигурации” опроса и переименуем vote.html в vote.phtml. Вот пример такого настроечного файла (назовем его vote.cfg):

Читайте также:  Как голосовать на РОИ. Инструкция

# Файл счетчиков
vote.dat
# Вопрос
Кто будет президентом?
# Ответы
мэр Лужков
мэр Петушков

Будем игнорировать пустые строки и строки, начинающиеся с символа #.

Первая строка – имя файла, вторая – вопрос, а следующие – ответы.

Теперь, если написать “умный” обработчик vote.cfg, можно легко менять анкету на странице опроса, не меняя скриптов. Доверить изменения настроечного файла можно даже неспециалисту (см. врезку).

Таким образом файл vote.phtml, содержащий форму, будет выглядеть так:

Как видите, наша форма совсем не зависит от количества и содержания данных.

Код загрузки файла конфигурации можно вынести в отдельный файл, скажем vote.cfg.inc, и включать его командой include:

Теперь файл stat.phtml будет выглядеть так:

Выводим результаты голосований в виде таблицы:

Итак, мы устранили недостатки 1 и 2 первоначального варианта. Решение же задачи 3 требует более сложных действий. Напомню, речь идет о “накрутках”, когда нехороший человек пытается проголосовать не один, а много раз. К сожалению, полностью избежать накруток очень тяжело. В общем случае задача состоит в том, чтобы не допустить повторное голосование. Для этого надо как-то идентифицировать посетителя. Для поиска новых механизмов идентификации вам пригодится полезная функция phpinfo(), которая выводит всю доступную информацию о посетителе (и многое другое) на экран. Что нам может пригодиться?

Установить голосование на сайт.

Первое, что нам понадобится – это база данных, мы уже говорили о том, как её создать. Называем её smartphppoll.

Далее скачиваем архив со скриптом.

Бросаем папку code в корневую папку.(Если вам нужно изменить положение или название папки, то в самом начале запустите скрипт с корневой папки, а уж потом экспериментируйте!)

“Импортируем все” данные из базы данных base.sql в нашу созданную базу данных

Открываем файл conf.php – записываем все данные для доступа к базе данных.

Здесь нужно отметить, если вы ранее подключали jquery, то строчка № 8 не нужна!

Далее открываем файл ajax.js и заменяем все три строчки которые имеют в своем составе fetch.php .. меняем на

Редактирование опроса.

Если не работает скрипт.

Необходимо проверить работоспособность скрипта!

Несколько людей жаловались на то, что данный скрипт опроса не работает!

И действительно после проверки – оказалось, что не все в порядке с данным опросом!

Читайте также:  Вход в личный кабинет по номеру телефона или по СНИЛС

Я его единожды проверил и подумал, что все работает!

Как не работает!?

Алгоритм проверки, установили на сайт по инструкции, которая здесь на сайте, либо внутри архива!

На повторное голосование используется проверка айпи.

И естественно, что нужно проверить с разных айпи,

Для того, чтобы не просить кого-то, что бы он проголосовал, то можно воспользоваться функцией определения вашего ip.

Изменить его, к примеру прибавив единицу к любому числу, либо вообще поставить любое число с такой записью..

Если вообще не поняли о чем это я в пункте №1, то попросите, кого-то, кто не сидит на вашем проводе интернета зайти и проголосовать! Если у него не получится то далее:

Если не голосуется, то решение проблемы:

Открываем файл fetch.php

И заменяем её на

Не благодарите, но ссылкой можете поделиться!

Название скрипта :Голосование php + mysql

COMMENTS+

 
BBcode

Cookies.

Можно в начале файла stat.phtml (до вывода первого символа) проверить наличие переменной, например, if (isset ($reload)). Если она определена – значит, отказать в голосовании, если нет, то использовать функцию setcookie (‘reload’,’yes’) и разрешить голосование. Недостаток такого метода очевиден: накрутчик может отключить куки. Но такой метод спасает от случайных обновлений страницы stat.phtml.

Настройка других страниц.

Для работы на других страницах нужна ссылка на javascript, о котором мы говорили в пункте № 6.

Плюс код, который будет отвечать за вывод опроса:

Где -“1467574880” – номер опроса, вам его дадут, после того, как вы создадите опрос!

Простой пример программы голосования.

С чего начинается система опроса? Правильно, с формы. Итак:

Поместим эти строки в наш файл vote.html. Обратите внимание на то, что суффикс у обработчика формы .phtml, а не .html или .cgi. Так обычно обозначают скрипт для PHP. Вам не требуется делать этот файл исполняемым, так как его выполняет сам сервер. И, соответственно, вам не требуется выкладывать его в отдельный каталог cgi-bin.

Поставим задачу как “Сделать счетчик для каждого варианта ответа”.

В простейшем случае файл stat.phtml должен содержать следующие строки:

Файл vote.dat должен быть доступен на запись пользователю, от имени которого работает www-server. Этот вопрос следует уточнить у системного администратора вашего сервера. Обычно достаточно сделать его доступным для записи (группе) командой ftp

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *