Часто на различных сайтах мы видим блоки с опросом общественного мнения. Как сделать подобный скрипт, для проведения голосования на своем сайте, да еще и таким образом, чтобы при выборе нужного пункта страница не перегружалась целиком, а изменялся только блок с опросом и сразу показывал результаты. Об этом и пойдет речь в данной статье.
Важно!
Для того, чтобы пример работал корректно, необходимо:
1. Все файлы должны быть записаны в кодировке UTF-8.
2. Скрипты должны выполняться на веб-сервере, а не запускаться в браузере, как файл.
В нашем случае база данных состоит из одной таблицы с тремя полями:
id – идентификатор записи;
title – название записи;
votes – количество голосов, отданных за эту запись.
Первоначально таблица заполняется следующими значениями:
id
title
votes
1
Куда вы сегодня пойдете
NULL
2
Никуда
0
3
В кино
0
4
В клуб
0
5
В магазин
0
6
Другое
0
Запись, для которой поле votes имеет значение NULL – считаем названием опроса, которое содержится в поле title.
Файл showcontent.js
Содержит в себе AJAX-функцию showContent() для обновления контента без перезагрузки страницы. Подробное описание работы данной функции приведено в статье «AJAX и JavaScript. Загрузка контента без перезагрузки страницы".
Файл functions.php
Содержит описание двух функций, применяющихся нами в программе.
Функция drawForm() отображает форму для голосования.
function drawForm() // отображение формы для голосования
{
$r=mysql_query ("SELECT * FROM vote WHERE votes is NULL");
$row=mysql_fetch_array($r);
echo "<p>".$row['title']."</p>";
echo "<form name='vote_form'>";
$r=mysql_query ("SELECT * FROM vote WHERE votes is not NULL");
while ($row=mysql_fetch_array($r))
echo "<input type='radio' name='vote' value='{$row['id']}'> {$row['title']}<br/>";
echo "<br/><input type='button'
onclick='showContent(\"vote.php?select=\"
+getRadioGroupValue(document.vote_form.vote));'
value='Проголосовать'>";
echo "</form>";
}
Функция drawResults() отображает результаты голосования.
function drawResults() // отображение результатов
{
$r=mysql_query ("SELECT * FROM vote WHERE votes is NULL");
$row=mysql_fetch_array($r);
echo "<p>".$row['title']."</p>";
$r=mysql_query ("SELECT * FROM vote WHERE votes is not NULL");
while ($row=mysql_fetch_array($r))
echo "{$row['title']}: {$row['votes']}<br/>";
}
Данные для построения формы и вывода результатов берутся из базы данных.
Файл index.php
Основной файл скрипта голосования. Здесь мы рассмотрим его основную часть. Как мы видим — тело документа состоит из контейнера contentBody.
При загрузке этой страницы мы сперва проверяем, было ли уже произведено голосование. Проверку осуществляем через переменную cookie, поскольку это является наиболее простым случаем. Если голосование произведено не было, то мы выводим в контейнер contentBody форму для голосования. Если же пользователь уже голосовал — выводим результаты поиска.
<body>
<div id="contentBody">
<?php
if ($_COOKIE['codething_vote']=='1') // если уже голосовали, то
drawResults(); // выводим результаты,
else
drawForm(); // иначе форму для голосования
?>
</div>
<div id="loading" style="display: none">
Идет загрузка...
</div>
</body>
Файл vote.php
Программный код этого файла выполняется тогда, когда пользователь производит голосование. В этот момент мы создаем переменную cookie, для того, чтобы исключить повторное голосование, сохраняем результат голосования в базу данных и отображаем результаты.
// установка cookie для избежания повторного голосования с одного браузера.
setcookie ("codething_vote","1");
// добавление выбранного варианта
$select = $_REQUEST['select'];
mysql_query ("UPDATE vote SET votes = votes + 1 WHERE id = '$select'");
// отображение результатов
drawResults();
Поскольку, выполнение этого файла вызывается через AJAX функцию showContent(), то перезагрузки всей страницы не происходит и результаты выполнения файла помещаются в контейнер contentBody.