WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




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


Прислал: Дмитрий Меладзе [ 19.06.2002 @ 15:03 ]
Раздел:: [ Статьи по PHP ]


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

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

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

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

Все, что от Вас потребуется - это начальные (буквально азы) знания PHP и хостинг с поддержкой этого языка. Данный скрипт сейчас успешно работает на площадке провайдера //www.eServer.ru, чего и Вам настоятельно рекомендую.

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

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

ВАШЕ МНЕНИЕ:
Как Вам наш новый дизайн?
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 код формы и код, выводимый в скрипте. Здесь очень просто что-либо изменить.

Надеюсь, мой материал сможет быть Вам полезен и пригодиться на практике. При возникновении любых вопросов, пишите мне на e-mail.

До встречи!
Дмитрий Меладзе.
dima@eserver.ru



 :::::  Eric пишет 19.02.2003 @ 20:24 
Данные которые передаются в vote.php не сохраняются в 1.dat!!! :(
 :::::  Dmitry пишет 21.02.2003 @ 00:07 
Может, стоит попробовать поменять права доступа на этот файл? Поставьте 755.
 :::::  a1 пишет 23.02.2003 @ 01:18 
Ne, ne4ego ne polu4aetsa. Prosmotr rezultatov vqdajot pustuju stranicu.
 :::::  GooD пишет 26.02.2003 @ 15:55 
Всё получилось. Мне очень понравилось. Если есть какие-ибудь интересные скрипты покажи их. Спасибо
 :::::  Hotpepper пишет 06.03.2003 @ 15:42 
U menja toze ni4ego ne polu4aetsja.... Vqvodit pustuju stranicu.. :( Menjal prava na fail, ne pomogaet
 :::::  Maxim пишет 15.03.2003 @ 21:39 
Дмитрий, спасибо за досканальное пояснение.:)

 :::::  uytu пишет 18.03.2003 @ 08:17 
ytuytutyuyuyuy
 :::::  marcel пишет 21.03.2003 @ 17:42 
cool

 :::::  Xmen пишет 29.03.2003 @ 12:38 
Система записи в файл не работает. так как у меня сразуже виснет ИЕ....


 :::::  Ray Adams пишет 09.04.2003 @ 14:57 
<form action="/php/vote.php" method="post" target="_blank">
Вообщето такую штуку желательно делать через POST.

 :::::  Zorro пишет 11.07.2003 @ 13:07 
Прикольно, тока 1.dat в каталог /php надо класть с именем $1.dat
 :::::   пишет 17.07.2003 @ 03:29 
C названием файла можно вото что решить :


 :::::  Likeman пишет 17.07.2003 @ 03:33 
C названием файла можно вот что решить :
...
if ($vote) {
$fopr=$id.".dat";
$f = fopen($fopr,"w");
...

Ну так чтобы голову не ломать. А вообще может сделать так, чтобы полсе нажатия на кнопку ответить открывалось маленькое окошо и усе ! Кстати я бы не стал бы использовать скрытую переменну, чтобы указать ID опроса. Для защиты (бред но все же) имееть файл opros.ini куда и вкатить номер активного опроса, тогда мимо, никто не проголосует :)



 :::::  Max пишет 30.07.2003 @ 21:23 
Фигня. Скрипт голосования не ведущий статистики по проголосовавшим нафиг не нужен. Потому как один большой на голову запросто сведёт на нет всю пользу от опроса просто сто раз нажав релоад сразу после своего ответа.
 :::::  mashinist пишет 17.08.2003 @ 15:02 
А как сделать, чтобы внизу формы голосования показывались текущие результаты ?
 :::::  Arekus пишет 25.08.2003 @ 16:50 
Согласен с Мах'ом. Слабый скрипт. По хорошему в нем обязательно должна быть установка/проверка куки, да отслеживание айпишников голосующих.
 :::::  ZeroCool пишет 23.01.2004 @ 23:08 
Поймите, статьи, которые сдесь написаны не учат вас делать что-то конкретное или описывают конкретные скрипты.
Сдесь вас учат основам, того как этого достичь
сам алгоритм.
Не учто вы сами не напишите проверку куков и IP???
 :::::  ZeroCool пишет 23.01.2004 @ 23:09 
Поймите, статьи, которые сдесь написаны не учат вас делать что-то конкретное или описывают конкретные скрипты.
Сдесь вас учат основам, того как этого достичь
сам алгоритм.
Не учто вы сами не напишите проверку куков и IP???
 :::::  kiberman пишет 31.01.2004 @ 04:21 
Клас спасибо у меня всё получилось и работает!!!! Только ищё б хотел чтоб вы написали голосование тоб могли только по одному разу голосовать, а то один как засядет нажимать на кноку ужасно:(
 :::::  Ard пишет 05.02.2004 @ 02:08 
первый раз сегодня прикасаюсь к пхп и вообще к веб-программингу... Так вот, проблема с правильным составлением файла ( ... "$1.dat" ... ) решилась только после того, как я написал вот такую строчку в самом начале vote.php:

$id = $id+1;
$data = File("$id.dat");
....................
 :::::  Ard пишет 05.02.2004 @ 02:22 
Подозрение на то, что $id просто не передается вообще ...
Видимо это связано с кривыми настройками php.ini. Может кто-нибудь вкурсе где что прописать для правильной работы? Или просто объясните в чем трабл, плз.

ЗЫ. у меня почемуто весь руский текст ( на моих страиничках только) иероглифами отображается. Не подскажете, опять же, что и где надо написать, чтобы все ок было?
 :::::  Ard пишет 05.02.2004 @ 02:25 
ой.. простите за флуд, но не мог не написать, что теперь все передается как надо :))
в php.ini почемуто стояло register_globals = Off. После того как я изменил на On все заработало! :)
 :::::  Reva пишет 05.02.2004 @ 16:00 
Народ, что за хрень? У меня работает голосование, страница со статистикой открывается, но в ней стандартные значения, т.е. так:
Как Вам наш новый дизайн?
Отлично! : 5
Так себе, потянет... : 3
Ужасно!!!: 1

Подскажите как с этим бороться...
И громко не орите, я пока только начинаю на php программировать =)
 :::::  PHPirat пишет 08.11.2004 @ 19:14 
Ну так выучи и все ОК будет!

Кстати, некоторые халявные хостеры не разрешают размещение на вашем сайте скриптов, вычисляющих IP, тогда остаётся только Cookie, которые этот самый "один большой на голову" возьмёт да и отключит или напишет свой скрипт для отправки/удаления_куки/отправки... и т.д..

Вся суть этой статьи : "Пишите всё сами, так надёжней!"
 :::::  SnaKe пишет 29.06.2006 @ 13:18 
Народ ХЕЛП! испробовал всё что тут написано было, но всё равно запись в файл не идёт, что делать?!=(
Имя:
Email:
URL

Введите сумму двух чисел девять и шесть (девять+шесть=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0342951