Ciko

PHP: Своя система голосования.

1 сообщение в этой теме

PHP: Своя система голосования.

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

В общем, достоинства собственной системы голосования очевидны. Но что делать, когда под рукой нет необходимого скрипта? Можно, конечно, воспользоваться бесплатными системами голосования, которые позволяют Вам установить форму с несколькими вопросами на свой сайт. В этом случае сам скрипт находиться на удаленном сервере и выполняет всю работу. Но, на мой взгляд, это не очень подходящий вариант: во-первых, эти системы вставляют свой баннер в голосование, во-вторых, работоспособность системы от Вас совершенно никаким образом не зависит. Также, некоторые системы требуют довольно продолжительного нахождения в Сети, поскольку вся настройка голосования происходит обычно on-line. А для некоторых пользователей это совсем немаловажный момент.

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

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

Итак, начнем.

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

 

ВАШЕ МНЕНИЕ:

Как Вам наш новый дизайн?

5 - Отлично!

3 - Так себе, потянет...

1 - Ужасно!!!

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

Двигаемся дальше. Для начала нам нужно сделать этот опрос в виде HTML, определив имена для переменных.

 

<form action="/php/vote.php" method="get" target="_blank">

<input type="Hidden" name=id value=1>

<b>Как Вам наш новый дизайн?</b><p>

<input type="Radio" name=vote value=1 checked>Отлично!<br>

<input type="Radio" name=vote value=2>Так себе, потянет...<br>

<input type="Radio" name=vote value=3>Ужасно!!!<p>

<input type="Submit" value=" Голосовать! "><p>

<a href="/php/vote.php?id=1" target="_blank">Текущие результаты</a>

</form>

Это все. Теперь можно приступить к самому скрипту. Как видно из формы, нашему скрипту передается две переменных:

  • id=1: это номер голосования. Дальше Вы увидите, как он используется для создания нескольких независимых голосований.

     

  • vote=1: номер ответа, то есть конкретно выбранный вариант ответа Вашим посетителем.

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

Продолжаем. Нашему скрипту потребуется собственная база данных с текстами вопросов и ответом к ним. Конкретное голосование - это один вопрос и набор ответов к нему, а также количество мнений на каждый ответ. Все голосования хранятся в отдельных текстовых файлах и определяются по переменной id, передаваемой через форму. В примере id - это цифра (или что угодно другое), которая является первой частью имени файла. Для примера, если id=1, значит база данных голосования лежит в таком файле: 1.dat или, в терминах PHP, $id.dat. 

Впрочем, Вы увидите это далее на конкретном примере. Отсюда получается, что для создания голосования Вам достаточно создать новый файл в очень простом формате (см. далее) и html-форму, содержащую тексты вопросов и id голосования.

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

 

Как Вам наш новый дизайн?

5~Отлично!

3~Так себе, потянет...

1~Ужасно!!!

Где 1я строка: это сам вопрос, остальные строки - пара "количество_мнений~ответ", как Вы поняли, разделенных тильдой "~". Теперь все, что нам осталось, это обрабатывать результаты.

Это делает следующий скрипт:

 

<?

// файл с конкретным голосованием

$data = File("$id.dat");

// выводим благодарности,

// если это не просто просмотр результатов

if ($vote) echo "<b><font color=red>

Спасибо за Ваше мнение!

</font></b><p>";

// выводим заголовок голосования - 1я строка файла

echo "<b>$data[0]</b><p>";

// печатаем список ответов и результатов - остальные строки

for ($i=1;$i<count($data);$i++) {

$votes = split("~", $data[$i]);    // значение~ответ

echo "$votes[1]: <b>$votes[0]</b><br>";

}

// если это не просмотр результатов, а голосование,

// производим необходимые действия для учета голоса

if ($vote) {

$f = fopen("$id.dat","w");

fputs($f, "$data[0]");

for ($i=1;$i<count($data);$i++) {

$votes = split("~", $data[$i]);

if ($i==$vote) $votes[0]++;

fputs($f,"$votes[0]~$votes[1]");

}

fclose($f);

}

?>

Собственно, это все, что требуется. Как видите, скрипт достаточно прост, не выполняет каких-либо специфический действий, да и ресурсов много не потребляет. Конечно, сюда можно добавить многие другие полезные функции, например, сделать администраторский интерфейс для управления голосованиями через броузер и держать все данные по голосованиям в одном файле, чтобы не возиться каждый раз с $id.dat. Но это - в следующий раз, а пока моей целью было показать Вам, что столь полезная система голосования очень просто реализуется.

Теперь Вы можете создать свой собственный дизайн, поправив html код формы и код, выводимый в скрипте. Здесь очень просто что-либо изменить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зареєструвати аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу