Скрипт опроса на php

Скрипт опроса на php

Часто на различных сайтах мы видим блоки с опросом общественного мнения. Как сделать подобный скрипт, для проведения голосования на своем сайте, да еще и таким образом, чтобы при выборе нужного пункта страница не перегружалась целиком, а изменялся только блок с опросом и сразу показывал результаты. Об этом и пойдет речь в данной статье.

Важно!
Для того, чтобы пример работал корректно, необходимо:
1. Все файлы должны быть записаны в кодировке UTF-8.
2. Скрипты должны выполняться на веб-сервере, а не запускаться в браузере, как файл.

Скачать пример можно здесь, 3,1 Кб

Пример состоит из 5 различных файлов, рассмотрим каждый из них в отдельности.

Служит для соединения с базой данных, для создания необходимой таблицы и для заполнения её примером нашего голосования.

В нашем случае база данных состоит из одной таблицы с тремя полями:
id – идентификатор записи;
title – название записи;
votes – количество голосов, отданных за эту запись.

Первоначально таблица заполняется следующими значениями:

id title votes
1 Куда вы сегодня пойдете NULL
2 Никуда
3 В кино
4 В клуб
5 В магазин
6 Другое

Запись, для которой поле votes имеет значение NULL – считаем названием опроса, которое содержится в поле title.

Содержит в себе AJAX-функцию showContent() для обновления контента без перезагрузки страницы. Подробное описание работы данной функции приведено в статье «AJAX и JavaScript. Загрузка контента без перезагрузки страницы".

Содержит описание двух функций, применяющихся нами в программе.

Функция drawForm() отображает форму для голосования.

Функция drawResults() отображает результаты голосования.

Данные для построения формы и вывода результатов берутся из базы данных.

Основной файл скрипта голосования. Здесь мы рассмотрим его основную часть. Как мы видим — тело документа состоит из контейнера contentBody.

При загрузке этой страницы мы сперва проверяем, было ли уже произведено голосование. Проверку осуществляем через переменную cookie, поскольку это является наиболее простым случаем. Если голосование произведено не было, то мы выводим в контейнер contentBody форму для голосования. Если же пользователь уже голосовал — выводим результаты поиска.

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

Поскольку, выполнение этого файла вызывается через AJAX функцию showContent(), то перезагрузки всей страницы не происходит и результаты выполнения файла помещаются в контейнер contentBody.

Reg.ru: домены и хостинг

Крупнейший регистратор и хостинг-провайдер в России.

Более 2 миллионов доменных имен на обслуживании.

Продвижение, почта для домена, решения для бизнеса.

Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Бесплатный Курс "Практика HTML5 и CSS3"

Освойте бесплатно пошаговый видеокурс

по основам адаптивной верстки

на HTML5 и CSS3 с полного нуля.

Фреймворк Bootstrap: быстрая адаптивная вёрстка

Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.

Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.

Верстайте на заказ и получайте деньги.

Что нужно знать для создания PHP-сайтов?

Ответ здесь. Только самое важное и полезное для начинающего веб-разработчика.

Узнайте, как создавать качественные сайты на PHP всего за 2 часа и 27 минут!

Создайте свой сайт за 3 часа и 30 минут.

После просмотра данного видеокурса у Вас на компьютере будет готовый к использованию сайт, который Вы сделали сами.

Вам останется лишь наполнить его нужной информацией и изменить дизайн (по желанию).

Изучите основы HTML и CSS менее чем за 4 часа.

После просмотра данного видеокурса Вы перестанете с ужасом смотреть на HTML-код и будете понимать, как он работает.

Вы сможете создать свои первые HTML-страницы и придать им нужный вид с помощью CSS.

Бесплатный курс "Сайт на WordPress"

Хотите освоить CMS WordPress?

Получите уроки по дизайну и верстке сайта на WordPress.

Научитесь работать с темами и нарезать макет.

Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!

Хотите изучить JavaScript, но не знаете, как подступиться?

После прохождения видеокурса Вы освоите базовые моменты работы с JavaScript.

Развеются мифы о сложности работы с этим языком, и Вы будете готовы изучать JavaScript на более серьезном уровне.

*Наведите курсор мыши для приостановки прокрутки.

Скрипт опроса на PHP и MySQL с использованием Ajax и админкой

Размер: 56,3 Мб.

Длительность: 23 мин. 33 сек.

В этом видеоуроке мы с вами рассмотрим установку на сайт опроса "Smart PHP Poll".

Он использует базу данных и технологию Ajax для отображения результатов голосования без перезагрузки страницы.

Данный опрос легко интегрируется в любую страницу сайта и обладает гибко настраиваемым внешним видом.

Управление опросами осуществляется через удобную админ-панель. Оттуда вы можете создавать, редактировать и удалять опросы, смотреть статистику и настраивать их внешний вид на сайте.

Исходный скрипт был мной немного доработан, в частности исправлены проблемы с кодировками и произведена локализация интерфейса.

Читайте также:  Как настроить цифровую приставку дом ру

Вы можете просмотреть этот урок прямо сейчас, либо скачать его себе на компьютер по ссылке выше.

Под видео вы найдете сокращенную текстовую версию для этого видеоурока.

Краткий обзор урока (все подробности смотрите в видео):

Будем действовать по небольшому плану, который вы найдете чуть ниже. Итак, начинаем:

Подготовительный этап — создаем на локальном компьютере хост, с которым будем работать. Если вы хотите работать сразу с "живым" сервером — то пожалуйста, данный этап можете пропустить.

1. Указываем в файле conf.php данные для подключения к базе данных

— Хост: localhost (обычно)

— Имя базы данных: smartphppoll (создадим ее чуть позже)

— Пользователь, подключающийся к базе данных: root (по умолчанию; в вашем случае указывайте нужного пользователя)

— Пароль для подключения к базе данных: » (отсутствует по умолчанию для пользователя root; в вашем случае указывайте нужный пароль)

2. Загружаем файлы на сервер

Берем папку с дополнительными материалами и закачиваем содержимое папки smart_php_poll на сервер.

Вдобавок к этому, закидываем в ту же папку файл poll.php (страница, в которую мы будем интегрировать опрос), файл .htaccess (для изменения кодировки веб-сервера в Денвере на UTF-8) и папку styles (в ней лежат стили для страницы poll.php).

3. Создаем в phpmyadmin базу данных с именем smartphppoll

При создании базы выставляем везде кодировку utf8_unicode_ci.

4. Выполняем со вкладки SQL запрос из приложенного SQL-файла (или импортируем его через вкладку import)

Из папки с дополнительными материалами берем файл base.sql, копируем все его содержимое и вставляем в специальное поле для выполнения SQL-запроса к базе smartphppoll.

5. После успешного выполнения запроса проверяем содержимое базы данных и убеждаемся, что все ок

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

6. Обращаемся к файлу admin.php через браузер и логинимся (логин по умолчанию: admin, пароль по умолчанию: password)

7. Создаем новый опрос в админ-панели и получаем его ID.

На первом шаге нам надо указать название опроса и количество вариантов ответа. На следующем шаге нужно указать эти самые варианты ответа.

После завершения создания запроса вы получите соответствующее сообщение и ID созданного опроса:

8. Используем ID опроса для его вывода на страницу

Для того, чтобы вывести опрос на странице, в нужном месте вставьте следующий код:

Вместо ID_опроса нужно подставить числовой идентификатор опроса, который вы хотите вывести на экран.

Примечание: данный код будет работать в том случае, если страница с опросом находится на том же уровне, что и сам опрос.

Если страница с опросом находится вне папки с опросом, то нужно указать полный путь до файла ajax.js и также поменять пути на полные в самом файле ajax.js.

9. И еще напоследок один момент

Если вы хотите, чтобы опрос появлялся плавно и после голосования результаты появлялись с эффектом, то можно сделать так:

— кладем в папку js библиотеку jquery (в доп. материалах она уже находится там);
— в файле с опросом подключаем эту библиотеку наряду с файлом ajax.js;
— теперь в файле ajax.js в функции handleResponse мы можем закомментировать или удалить строку:

и вместо нее написать, например, так:

Так мы сначала мгновенно скрываем блок с опросом, а затем заставляем его медленно появиться за полторы секунды. Вместо hide и fadeIn вы можете использовать другие функции jQuery аналогичного назначения.

Все. На этом установку скрипта опроса можно считать завершенной. Теперь в вашем распоряжении скрипт, который позволяет создавать, редактировать и удалять опросы, изменять их внешний вид и смотреть статистику из админки.

При желании вы можете его немного доработать под свои нужды, модифицировав файлы скрипта.

Если краткий обзор вам не до конца понятен, то изучите полную версию урока в видеоформате на этой странице выше.

Удачи вам и успехов!

P.S. Присмотритесь к премиум-урокам по различным аспектам сайтостроения, включая PHP, JavaScript, jQuery и Ajax, а также к бесплатному курсу по созданию своей CMS-системы на PHP с нуля. Все это поможет вам быстрее и проще освоить практические навыки веб-программирования:

Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!

Ранее мы уже приводили код скрипта голосования на PHP. Теперь настало время рассмотреть более продвинутый код скрипта для голосования на PHP с использованием БД MySQLi.

Плюсом данного кода является то, что все необходимые данные хранятся в БД MySQLi в трех таблицах независимо от количества созданных опросов. В рассмотренном же ранее скрипте голосования, который не использует БД, для каждого опроса создавалось по два файла. Так же представленный в данной теме скрипт сделан более наглядным и позволяет оставить голос и посмотреть результаты без перезагрузки страницы.

Читайте также:  Гта 5 игромания обзор

Пример работы предлагаемого нами скрипта голосования на PHP с использованием MySQLi БД и без перезагрузки страницы расположен ниже:

Какую CMS для сайта Вы предпочитаете?

Скрипт учитывает только один голос с одного IP адреса для каждого голосования в отдельности. Таким образом, если с указанного IP адреса голосуют первый раз, то под результатами голосования Вы увидите надпись "Ваш голос учтен!" и Ваш голос будет засчитан. При попытке повторного голосования с IP адреса, который уже принимал участие в опросе, под результатами голосования появится надпись "Вы уже голосовали!" и голос не будет засчитан.

Теперь давайте перейдем непосредственно к созданию подобного скрипта голосования на Вашем сайте. Для начала Вам понадобится создать три таблицы в MySQLi для хранения всех необходимых данных по опросам, как на скриншотах ниже:


Таблица: polls.


Таблица: poll_ip.


Таблица: poll_answer.

Для создания указанных таблиц, Вы можете воспользоваться следующим кодом:

CREATE TABLE IF NOT EXISTS ` polls ` (
` id ` int ( 10 ) unsigned NOT NULL auto_increment , ` title ` varchar ( 255 ) NOT NULL ,
PRIMARY KEY (` id `)
) ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1 ;

CREATE TABLE IF NOT EXISTS ` poll_answer ` (
` id ` int ( 10 ) unsigned NOT NULL auto_increment , ` poll_id ` int ( 10 ) unsigned NOT NULL ,
` title ` varchar ( 255 ) NOT NULL , ` votes ` int ( 10 ) unsigned NOT NULL default ‘0’ ,
PRIMARY KEY (` id `)
) ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1 ;

CREATE TABLE IF NOT EXISTS ` poll_ip ` (
` id ` int ( 10 ) unsigned NOT NULL auto_increment , ` poll_id ` int ( 10 ) unsigned NOT NULL ,
` ip ` int ( 10 ) unsigned NOT NULL , ` date ` int ( 10 ) unsigned NOT NULL ,
PRIMARY KEY (` id `)
) ENGINE = MyISAM DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1 ;

Далее Вам понадобится создать файл, например, polls.php, который будет отвечать за отображение Ваших опросов.

В данный файл (polls.php), либо на уже имеющеюся у Вас страничку поместите следующий код:

php
$db = mysqli_connect ( "localhost" , "Логин" , "Пароль" , "Имя_БД" );
$res = mysqli_query ( $db , "set names utf8" );

$res = mysqli_fetch_array ( mysqli_query ( $db , "SELECT max(id) FROM polls LIMIT 1" ));
$poll_id = $res [ 0 ];

if (isset( $_GET [ "poll_id" ]) and is_numeric ( $_GET [ "poll_id" ]) and $_GET [ "poll_id" ]> 0 ) <
$res = mysqli_fetch_array ( mysqli_query ( $db , "SELECT id FROM polls
WHERE id=’" . $_GET [ "poll_id" ]. "’ LIMIT 1" ));
if ( $res [ 0 ]!= » ) $poll_id = $res [ 0 ];
>
$poll = mysqli_fetch_array ( mysqli_query ( $db , "SELECT id,title FROM polls
WHERE id=’" . $poll_id . "’" ));
?>

script type = "text/javascript" >
$( document ). ready (function() <
$( ".poll input:first" ). prop ( "checked" , true );

$( "#vote" ). click (function() <
jQuery . post ( "polls_result.php" , < poll_id :$( this ). parents ( ".poll" ). attr ( "id" ).
split ( ‘_’ )[ 1 ], answer_id :$( ‘input:checked’ ). val ()>, rating_poll );>);

$( "#view_res" ). click (function() <
jQuery . post ( "polls_result.php" , < poll_id :$( this ). parents ( ".poll" ). attr ( "id" ).
split ( ‘_’ )[ 1 ]>, rating_poll );>);

Обращаем Ваше внимание на то, что если у Вас на сайте не подключена библиотека jQuery, или Вы делаете отдельную страничку для опросов, то в файле polls.php Вам необходимо подключить ее следующим образом:

Для того чтобы не создавать для каждого опроса свою страничку, как Вы могли заметить, мы добавили переменную $_GET["poll_id"]. Таким образом, при обращении к файлу polls.php следующим образом: polls.php?poll_id=3, будет отображен опрос с >

Как говорилось ранее, скрипт голосования работает без перезагрузки странички, следовательно, нам понадобится создать еще один файл, например, polls_result.php. Данный файл будет вносить изменения в БД и выводить результаты голосования по нужному опросу.

Обращаем Ваше внимание на то, что наименование файла polls_result.php используется в предыдущем файле (polls.php), так что если Вы захотите переименовать файл polls_result.php, то следует внести изменения и в файл polls.php.

В файл polls_result.php, поместите следующий код:

php
if (isset( $_POST [ "poll_id" ]) and is_numeric ( $_POST [ "poll_id" ])) <
$poll_id = $_POST [ "poll_id" ];
>
else $poll_id = » ;
if (isset( $_POST [ "answer_id" ]) and is_numeric ( $_POST [ "answer_id" ])) <
$answer_id = $_POST [ "answer_id" ];
>
else $answer_id = » ;

if ( $poll_id > 0 ) <
$db = mysqli_connect ( "localhost" , "Логин" , "Пароль" , "Имя_БД" );
$res = mysqli_query ( $db , "set names utf8" );

if ( $answer_id != » ) <
$ip = $_SERVER [ ‘REMOTE_ADDR’ ];
$res = mysqli_query ( $db , "SELECT count(id) FROM poll_ip
WHERE poll_id=’" . $poll_id . "’ and ip=INET_ATON(‘" . $ip . "’) LIMIT 1" );
$number = mysqli_fetch_array ( $res );
if ( $number [ 0 ]== 0 ) <
$res = mysqli_query ( $db , "INSERT INTO poll_ip (poll_id,ip,date)
values (‘" . $poll_id . "’,INET_ATON(‘" . $ip . "’),’" . time (). "’)" );
$res = mysqli_query ( $db , "UPDATE poll_answer SET votes=(votes+1)
WHERE id=’" . $answer_id . "’ LIMIT 1" );
$answer = ‘Ваш голос учтен!’ ;
>
else $answer = ‘Вы уже голосовали!’ ;
>

$summa = mysqli_fetch_array ( mysqli_query ( $db , "SELECT max(votes) AS max_v, sum(votes)
AS sum_v FROM poll_answer WHERE poll_id=’" . $poll_id . "’ LIMIT 1" ));
if ( $summa [ "max_v" ]== 0 ) $summa [ "max_v" ]= 1 ;
$res = mysqli_query ( $db , "SELECT title,votes FROM poll_answer
WHERE poll_id=’" . $poll_id . "’ ORDER BY votes DESC" );

Читайте также:  Отзывы о медиаплеере dune hd pro 4k

while ( $rating = mysqli_fetch_array ( $res )) <
echo ‘

После того, как Вы создали БД, файл опросов (polls.php) и файл, вносящий изменения в БД (polls_result.php), можно считать, что все готово, но осталось лишь самое простое — сделать админку по добавлению, изменению и удалению опросов. Для этого лучше создать отдельный файл, закрытый от других пользователей паролем (например, admin_polls.php), в который добавьте следующий код:

php
if ( session_id ()== » ) session_start ();
$db = mysqli_connect ( "localhost" , "Логин" , "Пароль" , "Имя_БД" );
$res = mysqli_query ( $db , "set names utf8" );

if (isset( $_POST [ "add_poll" ])) $res = mysqli_query ( $db , "INSERT INTO polls (title)
values (‘" . $_POST [ "new_poll" ]. "’)" );
if (isset( $_POST [ "add_answer" ])) $res = mysqli_query ( $db , "INSERT INTO poll_answer
(poll_id,title) values (‘" . $_SESSION [ "this_id" ]. "’,’" . $_POST [ "new_answer" ]. "’)" );
if (isset( $_POST [ "del_answer" ])) $res = mysqli_query ( $db , "DELETE FROM poll_answer
WHERE id=’" . $_POST [ "del_answer_id" ]. "’ LIMIT 1" );
if (isset( $_POST [ "del_poll" ])) <
$res = mysqli_query ( $db , "DELETE FROM polls WHERE id=’" . $_SESSION [ "this_id" ]. "’" );
$res = mysqli_query ( $db , "DELETE FROM poll_answer WHERE
poll_id=’" . $_SESSION [ "this_id" ]. "’" );
>
if (isset( $_POST [ "end_poll" ]) or isset( $_POST [ "del_poll" ])) $_SESSION [ "this_id" ]= » ;
if (isset( $_POST [ "edit_answer" ])) $res = mysqli_query ( $db , "UPDATE poll_answer
SET title=’" . $_POST [ "text_answer" ]. "’ WHERE id=’" . $_POST [ "id_answer" ]. "’" );
if (isset( $_POST [ "edit_question" ])) $res = mysqli_query ( $db , "UPDATE polls SET
title=’" . $_POST [ "text_question" ]. "’ WHERE id=’" . $_SESSION [ "this_id" ]. "’" );

if (isset( $_POST [ "edit_poll" ])) <
$res = mysqli_fetch_array ( mysqli_query ( $db , "SELECT id FROM polls WHERE
id=’" . $_POST [ "poll_id" ]. "’" ));
if ( $res [ "id" ]!= 0 ) $_SESSION [ "this_id" ]= $_POST [ "poll_id" ];
>

if (isset( $_POST [ "add_poll" ]) or isset( $_POST [ "add_answer" ]) or
isset( $_POST [ "edit_poll" ]) or isset( $_POST [ "edit_question" ]) or
isset( $_POST [ "edit_answer" ]) or isset( $_POST [ "del_answer" ]) or
isset( $_POST [ "del_poll" ])) < header ( "Location: admin_polls.php" );exit;>
?>

style type = "text/css" >
. forms < border : 1px solid #555555;background-color:#DDDDDD;padding:10px;width:440px;>
style >
div class= "forms" > form method = "POST" action = "admin_polls.php" >
b > Добавить новый опрос ! b > br >
Вопрос : input type = "text" name = "new_poll" maxlength = "255" size = "40" required >
input type = "submit" name = "add_poll" value = "Добавить" > form >

form method = "POST" action = "admin_polls.php" > b > Редактировать опрос № b >
input type = "text" name = "poll_id" maxlength = "5" size = "5" required >
input type = "submit" name = "edit_poll" value = "Редактировать" > form > div >

php
if ( $_SESSION [ "this_id" ]!= » ) <
$res = mysqli_fetch_array ( mysqli_query ( $db , "SELECT id,title FROM polls WHERE
id=’" . $_SESSION [ "this_id" ]. "’" ));
echo ‘

‘ . $res [ "title" ]. ‘ (id=’ . $res [ "id" ]. ‘)
‘ ;
$res = mysqli_query ( $db , "SELECT id,title FROM poll_answer WHERE
poll_id=’" . $_SESSION [ "this_id" ]. "’ ORDER BY id" );
while ( $answer = mysqli_fetch_array ( $res ))
echo ‘- ‘ . $answer [ "title" ]. ‘ (id=’ . $answer [ "id" ]. ‘)
‘ ;
?>

div >
div class= "forms" > form method = "POST" action = "admin_polls.php" >
b > Добавить варианты ответов к опросу : b > br >
Ответ : input type = "text" name = "new_answer" maxlength = "255" size = "40" required >
input type = "submit" name = "add_answer" value = "Добавить" > form >
form method = "POST" action = "admin_polls.php" > b > Изменить ответ b >
c id = input type = "text" name = "id_answer" maxlength = "4" size = "4" required > br >
Ответ : input type = "text" name = "text_answer" maxlength = "255" size = "40" required >
input type = "submit" name = "edit_answer" value = "Изменить" > form >
form method = "POST" action = "admin_polls.php" > b > Изменить вопрос на b > br >
input type = "text" name = "text_question" maxlength = "255" size = "47" required >
input type = "submit" name = "edit_question" value = "Изменить" > form >
form method = "POST" action = "admin_polls.php" > b > Удалить ответ b >
c id = input type = "text" name = "del_answer_id" maxlength = "4" size = "4" required >
input type = "submit" name = "del_answer" value = "Удалить" > form >
form method = "POST" action = "admin_polls.php" >
input type = "submit" name = "del_poll" value = "Удалить текущий опрос" >
input type = "submit" name = "end_poll" value = "Закончить редактирование" >
form > div >
php
>
?>

Пусть размер приведенного кода в данной теме Вас не пугает, т.к. это все-таки код для трех разных файлов, выполняющих разные функции. Если же Вы все сделали так, как написано в данной теме, то у Вас должна получиться страничка для проведения опросов на PHP и MySQLi, как в примере, продемонстрированном на данной страничке.

Ссылка на основную публикацию
Сколько времени нельзя есть после лечения зубов
Одной из самых популярных стоматологических услуг является пломбирование зуба и каналов. Как правило, оно производится после лечения ротовой полости, зубов...
Сетевой город 71 щекино школа 12
Запрошенная Вами страница не найдена. Возможно, Вы перешли по устаревшей ссылке или неверно ввели адрес. 2019 Электронное образование Министерство по...
Сетевой драйвер для ноутбука асер
Драйвера для ноутбуков и нетбуков Acer Поддерживаемые операционные системы: Windows 7 Для начала загрузки данного файла, найдите под пунктом номер...
Сколько времени нужно чтобы стать программистом
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого...
Adblock detector