-=:
Тех. поддержка =-
|
-=: Warning :=- |
©
Copyright Алекс aka TrigGer &
x-graphic studio © Все права защищены. |
![]() |
Интернет раскрутка: с чего начинать?
Советы
по созданию и раскрутке сайта
Хитрости
оформления HTML страниц - правильный выбор цвета
Для
чего нужны формы
Как установить Windows по телефону
Мой
диалог с Windows
Мужчина-прграммист
(краткое приложение по использованию
Диалог
у монитора
Динамическое определение разрешения монитора
Такие
разные ссылки
Стильные
курсоры
Оптимизируем
таблицы
-= Голосование на PHP =-
Автор:
Андрей Кухарчик
http://virtual.bresttelecom.by/php/
Речь пойдет о практической работе, которую мы с Вами вместе проведем и усвоим.
Голосование - это средство узнать мнение Ваших посетителей по разным вопросам.
Сами вопросы могут быть как полезными так и бесполезными - эту тему мы рассматривать
не будем. А для нашего примера возьмем простой вопрос - Ваше мнение о сайте?
Предположим, у Вас например появилось желание узнать, что думает большинство
посетителей Вашего сайта. Варианты ответов предоставим следующие:
1 Круто!
2 Нормально.
3 Мне все равно.
4 Это что-то страшное.
Продолжить список Вы можете уже сами... Для работы нам понадобится некоторое
знание основ HTML, РНР версии 3 или выше и три файла. Три - потому что в
первом будем спрашивать посетителя о его мнении, во втором хранить результаты,
и в третьем - выводить их и обрабатывать. Собственно говоря, нет надобности
разносить все эти функции в разные файлы, но для простоты и удобства мы
сделаем так. Первый файл будет иметь имя index.phtml, второй - golos.txt
и третий - golos.phtml. Создать их для Вас не составит особого труда, и
это то, с чего мы и начнем. Когда Вы все сделаете и зальете готовые файлы
к себе на сервер, не забудьте установить атрибуты файла golos.txt таким
образом, что бы он был доступен для записи. Обычно, это атрибуты 666 или
777. Сделать это можно как правило с помощью Вашего FTP менеджера. Если
нет, воспользуйтесь IE 5.0 и выше в режиме FTP, тогда
нужно просто посмотреть свойства уже залитого на сервер файла и установить
все галочки.
Index.phtml
Вы можете обозвать этот и другие наши файлы так, как Вам угодно, только
не меняйте расширений (кроме, конечно, txt). Это необходимо для работы РНР,
на котором и будет реализован алгоритм голосования. Дизайн и оформление
предлагаю Вам сделать самостоятельно, я не буду в статье обращать на это
внимание. Прежде всего сделаем нужную форму. Можно было бы оспользоваться
любым редактором HTML, они неплохо делают сами формы, но
я привожу уже готовый и работоспособный код.
<FORM METHOD="POST" action="golos.phtml">
<TABLE BORDER=1><TR><TD><TABLE BORDER=0>
<TR><TD>Ваше мнение о сайте?</TD></TR>
<TR><TD><INPUT TYPE=radio NAME=answer
VALUE=1>Круто!</TD></TR>
<TR><TD><INPUT TYPE=radio NAME=answer
VALUE=2>Нормально</TD></TR>
<TR><TD><INPUT TYPE=radio NAME=answer VALUE=3>Мне
все равно</TD></TR>
<TR><TD><INPUT TYPE=radio NAME=answer VALUE=4>Это
что-то страшное!</TD></TR>
<TR><TD><INPUT TYPE=Submit NAME=vote VALUE="
отправить "></TD></TR>
<TR><TD><INPUT TYPE=Submit NAME=result VALUE="
смотреть результат
"></TD></TR></TABLE></TD></TR></TABLE></FORM>
Пока это все. Тут нет и строчки кода РНР, но на будущее полезно иметь возможность
вставить сюда что-то, так что расширение файла выбрано
правильно, тем более что оно больше ни на что не влияет. В коде все просто,
и сделать подобное или похожее легко в любом редакторе. Мы просто предлагаем
указать с помощью переключателя нужный вариант ответа и нажать на кнопку
Отправить. Этот код можно легко интегрировать в любые странички и править
так, как только вздумается. Только нужно обращать внимание на соответствие
имен и значений переменной в форме. И что самое главное - данные формы должны
передаваться в скрипт РНР с обработкой результатов, поэтому имя файла в
action должно соответствовать имени файла с скриптом. Напомню, все имена
форм, присвоенные в этом файле, станут соответствующими еременными в скрипте
РНР, куда отправляются данные формы. Так как тут ничего сложного больше
не предвидится, пойдем дальше.
Golos.txt
Здесь надо определиться, в каком формате мы будем хранить вводимую нформацию.
Проще всего организовать четыре строки (по количеству вариантов ответов)
и считать их номера соответствующими номеру выбранного варианта ответа.
Все это безобразие можно считывать с помощью команды РНР ввода файла в массив,
при этом не забывайте, что массив всегда начинается с
индекса ноль. Соответственно - первая строка нашего файла не будет использована,
и ввести туда можно все что угодно. Например - информацию о
файле: Результаты голосования. Если это сделано, введите еще четыре строки
с нулями. Не забывайте нажимать ввод для перевода строки. Это - готовые
результаты (пока только начальные) нашего голосования. Так как пока никто
не проголосовал :-) они нулевые.
Golos.phtml
Вот
и дошли мы до самого главного и интересного. С самого начала я приведу весь
код скрипта, а дальше дам пояснения в его применении и работе.
<?php
$file = "golos.txt";
$a = file($file);
$i = 1; $fi = Count($a);
$n = 0;
while ($i <= $fi):
$a[$i] = trim(str_replace ("\n","", $a[$i]));
$n = $n+$a[$i];
$i++;
endwhile;
if ($answer
!= "") {
echo "<br>Спасибо, Ваше мнение учтено:";
$a[$answer]++; $n++;
$rez
= "Результаты голосования!\n".$a[1].
"\n".$a[2]."\n".$a[3]."\n".$a[4];
$fp = @fopen($file,"w");
if ($fp) { $counter=fputs($fp,$rez); fclose($fp);
}
else { echo "Произошла ошибка записи
результатов!"; }
} else
{ echo "<br>Результаты голосования"; }
echo "<br>Круто! - <b>".$a[1]."</b>";
echo "<br>Так себе - <b>".$a[2]."</b>";
echo "<br>Сойдет - <b>".$a[3]."</b>";
echo "<br>Это что-то страшное! -
<b>".$a[4]."</b>";
echo "<br><br>Всего проголосовало: ".$n;
?>
Опять
же хочу предупредить, что код не самый лучший и простой, но зато логичный
и работоспособный. Вариантов реализации масса, но мне не хотелось брать
что-то уже готовое, и поэтому я, не особо заботясь об удобочитаемости и
дизайне (это Вы и сами можете сделать :-), написал свой собственный код,
что заняло вместе с настройкой и отладкой буквально полчаса. Скрипт ориентирован
на конкретно поставленную задачу, но Вам ничего не стоит переделать его
под свое количество ответов на вопрос. Напомню - наша главная задача на
практическом примере научиться создавать свои собственные системы опроса
и голосования. Теперь о том, как все работает.В первых строчках мы определяемся
с именем файла результатов и считываем результаты голосования в массив данных
с именем $a. Дальше идет цикл, в котором мы обрабатываем полученный массив
таким образом, что бы он не содержал символов перевода каретки (ввод строки)
и пробелов: $a[$i] = trim(str_replace ("\n","", $a[$i]));
Параллельно ведем подсчет количества проголосовавших, что не сложно так
как это просто сумма значений нашего массива. Удалять символы ввода и пробела
необходимо для преобразования
считанных данных из символьной строки в целое число. Это можно сделать разными
методами, но в этом случае просто удаляются символы "\n" (что
в
РНР соответствует переводу строки) и обрезаются пробелы с начала и с конца
строки функцией trim (). Результаты заносятся обратно в массив, но уже в
виде целочисленного значения, которое можно сложить, увеличить, делить и
т.д. Нас будет интересовать увеличение на единицу определенного
элемента массива, номер которого (его индекс) хранится в переменной $answer,
которая в свою очередь, пришла к нам по наследству из формы.
После
обработки полученного массива скрипт должен принять решение относительно
выбранного посетителем режима - или просто показать результаты, или добавить
голос в соответствующую позицию. Достигается это проверкой переменной $answer,
в которой сохраняется значение выбранного
посетителем сайта варианта голосования. Если эта переменная пуста, значит
была нажата кнопка показа результатов, и скрипт пропустит блок подсчета
голоса. Если переменная $answer не пуста, в ней содержится номер выбранного
варианта голосования, а значит, мы можем просто увеличить на единицу
значение нужной ячейки массива: $a[$answer]++; Кроме того
нужно увеличить значение количества проголосовавших для того, что бы учесть
голос только что проголосовавшего человека.
Когда
нужная ячейка массива увеличена, пришла пора записать результаты в файл.
Для этого сначала открывается соединение с файлом: $fp = fopen($file,"w");
Символ w указывает на необходимость очистки содержимого файла перед записью.
Если соединение не установлено, выводится сообщение об ошибке, если установлено
- предварительно отформатированное значение
переменной $rez записывается в файл. Переменная $rez формируется следующим
образом: значение всех ячеек массива (кроме самой первой - нулевой, которая
не используется) склеивается таким образом, что бы разделителем был символ
перевода строки. Это позволит в дальнейшем корректно считать полученный
таки образом файл. Для склейки строк в РНР применяется разделитель - точка.
Обратите внимание, что наш массив из
целочисленного перешел в разряд символьных, и может использоваться и обрабатываться
любым доступным РНР способом.
И наконец
- пришла пора вывести результаты на экран. Не нужно забывать о переводе
строки в HTML, что несколько иное, чем в РНР. Делается это
простым выводом на экран (а значит и в код HTML) тега <BR>. Когда
отформатированные результаты выведены, скрипт заканчивает свою работу. Этот
блок можно организовать тоже по-разному, а примененный тут метод самый простой.
Лучше всего вложить результаты и пункты в табличку, тогда
выведенная информация будет смотреться более красиво. Если Вы обратили внимание,
эта часть скрипта выполняется в любом случае, как и считывание данных из
файла. Таким образом достигается гарантированный вывод езультатов на экран.
Вот и
вся работа. Надеюсь, что Вы теперь без труда сможете организовывать опросы
своих посетителей на различные темы. Кроме того, голосование можно
оснастить другими полезными функциями – например, подсчетом процентного
соотношения голосов, графическим представлением результатов, памятью на
IP опрошенного, чтобы дважды не голосовали. Да мало ли… Только тут придется
Вам проявить собственную фантазию и знание элементарной алгебры (вот где
оно аукнулось :-). А узнать более подробно о функциях и операторах РНР Вы
всегда сможете в Интернете. Например тут:
http://virtual.bresttelecom.by/php
Если Вы хотите посмотреть в Интернете на рабочий пример голосования - воспользуйтесь
адресом http://virtual.bresttelecom.by
- на похожем алгоритме там реализован опрос мнения посетителей. Кроме того,
там Вы так же найдете пример голосования с графическим выводом результатов.