Форма опроса на php


Сейчас рассмотрим промер создания собственной формы опроса или голосования на сайте на php. Задача не сложная, но интересная по своей структуре.

Работать наш опросник будет на MySQL и PHP. В базе данных будут храниться вопросы, варианты ответов и число проголосовавших за каждый конкретный ответ.

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

Итак поехали!  Для начала создадим в базе данных 2 таблицы: таблицу с вопросами и таблицу с ответами:

CREATE TABLE `questions` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `question` varchar(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `answers` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `questions_id` int(11) NOT NULL,
  `answer` varchar(255) CHARACTER SET ucs2 NOT NULL,
  `how_many` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

В таблице с ответами (answers) есть поле "how_many" в котором будет храниться число проголосовавших за этот ответ и поле "questions_id" которое указывает к какому вопросу относится данный ответ.

Теперь занесём в таблицы один вопрос, для того, чтобы видеть с чем мы работаем и несколько ответов:

INSERT INTO `questions` (`question`) VALUES ('Какой ОС вы пользуетесь?');
INSERT INTO `answers` (`questions_id`, `answer`, `how_many`) VALUES ('1', 'Windows', '0');
INSERT INTO `answers` (`questions_id`, `answer`, `how_many`) VALUES ('1', 'Linux', '0');
INSERT INTO `answers` (`questions_id`, `answer`, `how_many`) VALUES ('1', 'MacOS', '0');

База данных готова. Теперь займемся созданием формы.

Для начала напишем простой вывод формы опроса:

<?
$mysql_login  = "***";
$mysql_psswd  = "***";
$mysql_dbname = "***";
$mysql_host   = "***";

$cont = mysql_connect($mysql_host, $mysql_login, $mysql_psswd) or die("База данных недоступна!.");
mysql_query("set names 'UTF8'", $cont);
$err = mysql_select_db($mysql_dbname, $cont) or die("Нет доступа к базе данных!!!"); 


$questions = 1; // Какой вопрос показываем
$res = mysql_query("SELECT * FROM questions WHERE id = ".$questions);
if ($res)
    {
        // Показываем вопрос:
        $dat = mysql_fetch_array($res);
        echo '<p>Вопрос: '.$dat['question'].'</p>';
        
        // Показываю варианты ответов:
        $res = mysql_query("SELECT * FROM answers WHERE questions_id = ".$questions);
        echo '<form method="post" action="">';
        while ($dat = mysql_fetch_array($res))
            {
                echo '<p><input type="radio" name="answer_id" value="'.$dat['id'].'">'.$dat['answer'].'</p>';
            }
        echo '<input type="submit" value="Проголосовать" >';
        echo '</form>';
    }
?>

Вот мы и сделали первую часть опросника. Она берёт информацию из двух таблиц и показывает её в виде вопроса и вариантов ответов к этому вопросу. Теперь запрограммируем действия для неё. При нажатии на кнопку "Проголосовать", вариант, который выбрал пользователь, отправится в базу данных и занесётся в таблицу "answers". Поле "how_many" плюсанётся на единицу. После этого, если все прошло удачно, программа покажет результат голосования. Будет показан список ответов с количеством проголосовавших за каждый из вариантов. 

Поехали:

<?
$mysql_login  = "***";
$mysql_psswd  = "***";
$mysql_dbname = "***";
$mysql_host   = "***";

$cont = mysql_connect($mysql_host, $mysql_login, $mysql_psswd) or die("База данных недоступна!.");
mysql_query("set names 'UTF8'", $cont);
$err = mysql_select_db($mysql_dbname, $cont) or die("Нет доступа к базе данных!!!"); 

$show_result = false;
if (isset($_POST['answer_id']))
    {
        $res = mysql_query("UPDATE answers SET how_many=how_many+1 WHERE id = ".$_POST['answer_id']);
        $show_result = true;
    }


$questions = 1; // Какой вопрос показываем
$res = mysql_query("SELECT * FROM questions WHERE id = ".$questions);
if ($res)
    {
        // Показываем вопрос:
        $dat = mysql_fetch_array($res);
        echo '<p>Вопрос: '.$dat['question'].'</p>';
        
        // Показываю варианты ответов:
        $res = mysql_query("SELECT * FROM answers WHERE questions_id = ".$questions);
        
        if ($show_result)
            {
            // Показываю результат голосования:  
            while ($dat = mysql_fetch_array($res))
                {
                    echo '<p>'.$dat['answer'].': '.$dat['how_many'].' чел.</p>';
                }
            echo '<p><a href="'.$_SERVER["HTTP_REFERER"].'">Продолжить голосование</a></p>';
            }
            else
            {
            //  Показываю форму для голосования:
            echo '<form method="post" action="">';
            while ($dat = mysql_fetch_array($res))
                {
                    echo '<p><input type="radio" name="answer_id" value="'.$dat['id'].'">'.$dat['answer'].'</p>';
                }
            echo '<input type="submit" value="Проголосовать" >';
            echo '</form>';
            }
    }
?>

Вот я и привел конечный вариант скрипта формы опроса на PHP. Результат его работы показан на следующем изображении:

Стоит отметить что в данной программе возможно использовать сколько угодно вопросов и хранить все результаты голосований в базе данных. Для изменения вопроса вам достаточно всего лишь поменять значение переменной "$questions" на id нужного вопроса.

В любой момент вы сможете поменять вопрос или посмотреть результаты голосования других вопросов.

 


Тэги:

Комментарии: 2

Прокомментировать »

 
 
eroctive2.blogspot.ru
22.04.2017
 

А если я данный скрипт хочу поставить на CMS WP я смогу это сделать, и вывести его в виджетах, если да то можете более подробно написать, куда нужно поместить данный php файл и как его вывести в виджетах wp, заранее спасибо, жду ответа. Вам с данным вопросом лучше обратиться к людям, которые работали с WP, они подскажут, как лучше подключить данный скрипт.

NatalieDiuby
28.09.2017
 

Данное сообщение размещено здесь с помощью XRumer + XEvil 3.0 XEvil 3.0 - революционное приложение, способное обходить практически любую антибот-защиту. Распознавание капчи Google, Facebook, Yandex, VKontakte, Captcha Com и свыше 8400 тысяч других типов! Вы читаете это - значит, это работает! ;) Подробности на официальном сайте XEvil.Net, есть бесплатная демо-версия.

 

Прокомментировать

 
 
Сообщение *
 
Проверочный код *
 
 
 
Яндекс.Метрика