Виртуальный Брест
Главная Портал Форум Рассылки Контакт Для клиентов Статьи

Баня открыта и ждет посетителей!
Баня открыта и ждет посетителей!
 
 
Магазин интимных товаров
Магазин интимных товаров
 

Виртуальный хостинг - дом для вашего сайта - лучшее предложение в Бресте!


Полный список глав книги

Голосование на РНР!


Речь пойдет о практической работе, которую  мы с Вами вместе проведем и усвоим. Голосование - это средство узнать мнение Ваших посетителей по разным вопросам. Сами вопросы могут быть как полезными, так и бесполезными - эту тему мы рассматривать не будем. А для нашего примера возьмем простой вопрос - Ваше мнение о сайте?

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

  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 опрошенного, чтобы дважды не голосовали. Да мало ли… Только тут придется Вам проявить собственную фантазию и знание элементарной алгебры (вот где оно аукнулось :-).

Читать еще...



К. Дари, Б. Бринзаре

AJAX и PHP. Разработка динамических веб-приложений
Книга "AJAX и РНР: разработка динамических веб-приложений" - самый удобный и полезный ресурс, который поможет вам войти в захватывающий мир AJAX. Вы научитесь писать более...

Брайан Хоган, М. Уэбер, К. Уоррен, К. Джонсон, А. Годин

Книга веб-программиста: секреты профессиональной разработки веб-сайтов
Эта книга предлагает широкий спектр передовых методов веб-разработки: от проектирования пользовательского интерфейса до тестирования проекта и оптимизации веб-хостинга. Как...

Н. Закас

JavaScript. Оптимизация производительности
Шестое издание JavaScript. Подробное руководство от Дэвида Флэнагана стало супер бестселлером и самым надежным помощником всех JavaScript-программистов. Но один аспект темы...

Марк Пилгрим

Погружение в HTML5
Подробное руководство по всем новшествам стандарта HTML5. Показано, как использовать в Web-разработках новые функциональные возможности, открывающиеся при применении HTML5....

    Информация

Главная - переход на начало
Тарифы на Российский хостинг
Правила - что можно а что нет
Заказ - сделайте это сейчас
Выбор домена - найди свое имя
Регистрация домена - купить
Оплата - варианты для всех
Панель управления Россия
Панель управления Беларусь
Вопросы и ответы - информация
Разработка сайтов - сопровождение
Виртуальный Брест - портал
Контакт - обратная связь
Наш форум - пообщаемся?

Список доменов
в которых доступна бесплатная регистрация имен при покупке хостинга, а так же открытие поч- тового ящика:

Новости Бреста:

Второй порыв теплосетей в Бресте - двенадцать многоэтажных домов и один детский сад остались без тепла
Почти тонну мёда задержали налоговики при проверке в Бресте
Зарплата в конвертах в Бресте - видео
Трое жителей Кавказа в "поисках работы" забрались прямо в лес в пограничную зону
Профилактика квартирных краж - важно
Современный животноводческий комплекс на 1500 голов строится в СПК "Королевский" Кобринского района - фото
Результаты проходящей на территории Брестской области акции "Не упусти свой шанс"
Осенний месячник по наведению порядка на земле проходит на Брестчине - важно
В Лунинецком районе в водоеме нашли автомобиль с телом внутри
ГАИ: брестчанин решил стать маршрутчиком и в пьяном состоянии вез горожан

© Виртуальный Брест 2001 - 2009 Автор проекта: Андрей Кухарчик Дизайн: Partgraphic