- •Оглавление
- •Что такое интернет
- •Готовимся к созданию Web-страниц
- •Железо, железо и еще раз железо...
- •Домашняя эргономика — безопасность прежде всего!
- •Программное обеспечение для Web-мастера
- •Выбор хостинга
- •Знакомьтесь — РНР
- •История создания РНР
- •Установка РНР
- •Настройка РНР для Apache
- •Виртуальные хосты в Apache
- •Тестирование РНР
- •Установка и настройка дополнительных модулей
- •Переносимость и совместимость
- •Синтаксис РНР
- •Возможности РНР
- •Работа с базами данных
- •HTTP-аутентификация средствами РНР
- •Работа с изображениями
- •Поддержка закачки файлов
- •Поддержка HTTP-cookie
- •Использование регулярных выражений
- •Обработка ошибок
- •Управление электронными письмами
- •Вывод на экран и переменные в РНР
- •Простейшие арифметические операции
- •Простейшие логические операции
- •Циклы
- •Массивы
- •Работа со строками
- •Сессии
- •Программирование на РНР
- •Сравнение чисел
- •Вложение файлов в документ
- •Простейший счетчик посещений
- •Обработка форм
- •Отправление почты
- •Отправление письма в HTML-формате
- •Дата по-русски
- •Счетчик посещений с использованием базы данных
- •Счетчик персональной посещаемости
- •Сохраняем информацию о посещениях
- •Ах, баннеры, баннеры...
- •Счетчик посещений с выводом информации на экран
- •Счетчик сессий
- •Создание динамического меню
- •«Грабим» странички
- •Голосование на сайте
- •Гостевая книга
- •Технология создания
- •Свой чат — это просто
- •Использование специального привата
- •Интернет-магазин
- •Технология создания
- •Сервисы интернет-магазина
- •Архив рассылок
- •Совет первый: а нужно ли вам это?
- •Совет второй: забудьте все советы
- •Пример системы безопасности
- •HTTP-аутентификация в РНР
- •Защита программы
- •РНР в вопросах и ответах
- •Приложения
- •Приложение 3. Некоторые функции РНР
- •Приложение 4. Cookie
- •Приложение 5. Методы передачи данных POST и GET
- •Приложение 6. Время Unix
Голосованиенасайте |
125 |
Голосование на сайте
Голосование — это средство узнать мнение ваших посетителей по разным вопросам. Сами вопросы могут быть как полезными, так и бесполезными, но эту тему мы рассматривать не будем
идля нашего примера возьмем простой вопрос: «Ваше мнение
осайте?» Варианты ответов предоставим следующие:
•Отлично!
•Нормально.
•Мне все равно.
•Это что-то страшное.
Можете сами продолжить список.
Для работы нам понадобятся три файла. В первом файле будем спрашивать посетителя о его мнении, во втором — хранить результаты и в третьем — выводить их и обрабатывать.
Острой необходимости сохранять все эти функции в разные файлы нет, но для простоты и удобства сделаем именно так. Первый файл будет иметь имя index.phtml, второй — golos.txt и третий — golos.phtml (вы, конечно, можете называть свои файлы, как хотите, только расширения должны быть такими, как я указал). Создайте эти три пустых файла.
Файл Index.phtml. Вы можете назвать этот и другие наши файлы так, как вам угодно, только не меняйте расширений. Дизайн и оформление предлагаю вам сделать самостоятельно, я не буду обращать на это внимание.
Прежде всего сделаем форму. Можно воспользоваться любым редактором HTML, они неплохо делают сами формы, но я привожу уже готовый и работоспособный код:
<form method="POST" action="golos.phtml"> <table border="l"><tr><td><table border="0"> <tr><td>Baшe мнение о сайте?</td></tr>
126 |
|
|
|
Программирование на РНР |
|
<tr><td><input |
type="radio" |
name="answer" |
value="l"> |
||
Отлично!</td></tr> |
|
|
|
||
<tr><td><input |
type="radio" |
name="answer" |
value="2"> |
||
Hopмaльнo</td></tr> |
|
|
|
||
<tr><td><input |
type="radio" |
name="answer" |
value="3"> |
||
Мне все paвнo</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="Cмотреть результат"> </td></tr></tablex/td></tr></table></ form>
Здесь нет ни строчки кода РНР, но мы задали файлу расширение PHTML, чтобы в дальнейшем в этот файл можно было вставить РНР-код. Получилась такая форма (рис. 22).
Рис. 22. Полученная форма для голосования
Голосованиенасайте |
127 |
В HTML-коде все просто, мы предлагаем указать с помощью переключателя нужный вариант ответа и нажать на кнопку «Отправить».
Этот код можно легко вставить на любую страницу и внести в него нужные изменения. И самое главное — данные из формы должны передаваться РНР-скрипту, обрабатывающему результаты, поэтому имя файла, присваиваемое атрибуту action, должно соответствовать имени файла со скриптом.
Все имена форм, присвоенные в этом файле, станут соответствующими переменными в скрипте РНР, в который отправляются данные формы.
Файл golos.txt. В этом файле необходимо определиться, в каком формате мы будем хранить вводимую информацию. Проще всего организовать четыре строки (по количеству вариантов ответов), номера которых будут соответствовать номеру выбранного варианта ответа. Информацию из файла golos.txt можно считывать с помощью команды РНР ввода файла в массив — f i l e ( $ a r r a y ) . Массив всегда начинается с нулевого индекса, поэтому первая строка нашего файла не будет использована и в нее можно ввести все, что угодно, например строку «Результаты голосования».
Далее введите еще четыре строки с нолями. Не забывайте нажимать ввод для перевода строки. Это — результаты (начальные) нашего голосования и, пока никто не проголосовал, они нулевые.
Файл golos.phtml. Мы дошли до самого главного и интересного. Сначала приведу весь код скрипта, а потом поясню его.
1<?php
2$file = "golos.txt";
3$а = file($file) ;
4$i = 1; $fi = count($a) ;
5$n = 0;
6while ($i <= $fi):
7$a[$i] = trim(str_replace ("\n","", $a[$i]));
8$n = $n + $a[$i];
9$i++;
10 endwhile;
128 |
Программирование на РНР |
|
11 if ($answer != "") { |
|
|
12 |
echo "<br>Спасибо, Ваше мнение учтено"; |
|
13 |
$a[$answer]++; $n++; |
|
14$rez = "Результаты голосования\n".$а[1]. "\n".$а[2]."\n".$а[3]. "\n".$а[4];
15$fp = @fopen($file,"w");
16if ($fp) { $counter = fputs{$fp,$rez); fclose($fp); }
17else { echo "Произошла ошибка записи результатов!"; }
18} else { echo "<br>Результаты голосования"; }
19echo "<br>Отлично! - <b>".$а[1]."</b>";
20echo "<br>Нормально - <b>".$a[2]."</b>";
21echo "<br>Мне все равно - <b>".$a[3]."</b>";
22echo "<br>Это что-то страшное! - <b>".$a[4]."</b>";
23echo "<br><br>Bcero проголосовало: ".$n;
24?>
Этот код не самый лучший и эффективный, зато логичный, простой и работоспособный. Вариантов реализации много, но мне не хотелось использовать что-то готовое, и поэтому я, не особо заботясь о дизайне (это вы и сами можете сделать), написал свой код, что заняло вместе с настройкой и отладкой около получаса.
Скрипт ориентирован на конкретно поставленную задачу, но вам ничего не стоит переделать его для своего количества вариантов ответов на вопрос. Теперь о том, как все работает.
Сначала мы задаем имя файла результатов (строка 2) и считываем результаты голосования в массив данных с именем $а (строка 3). Дальше идет цикл (строки 6—10), в котором мы обрабатываем полученный массив таким образом, чтобы он не содержал символов перевода строки и пробелов (строка 7). Удалять символы ввода и пробела необходимо для преобразования считанных данных из символьной строки в целое число. Это можно сделать разными методами, но в этом случае просто удаляются символы "\n" (что в РНР соответствует переводу строки) и обрезаются пробелы с начала и с конца строки функцией trim (). Результаты заносятся назад в массив, но уже в виде целочисленного значе-
Голосованиенасайте |
129 |
ния, которое можно суммировать, увеличить на единицу, делить и т.д. Нас будет интересовать увеличение на единицу определенного элемента массива, индекс которого хранится в переменной $answer, которая пришла к нам по наследству из формы. Параллельно ведем подсчет количества проголосовавших, что несложно, так как это просто сумма значений нашего массива (строка 8).
После обработки полученного массива скрипт должен принять решение в соответствии с действиями посетителя — или показать результаты, или добавить голос в соответствующую позицию. Достигается это проверкой переменной $answer (строка 11), в которой сохраняется значение выбранного посетителем сайта варианта голосования. Если эта переменная пуста, значит была нажата кнопка показа результатов, и скрипт пропустит блок подсчета голоса (строки 14—16). Если переменная $answer не пуста, в ней содержится номер выбранного варианта голосования, а значит, мы можем просто увеличить на единицу значение нужной ячейки массива (строка 13). Кроме того, нужно увеличить значение количества проголосовавших, чтобы учесть голос только что проголосовавшего человека (строка 13).
Когда нужная ячейка массива увеличена, нужно записать результаты в файл. Для этого сначала открывается соединение с файлом (строка 15). Символ w указывает на необходимость очистки содержимого файла перед записью. Если соединение с файлом установлено, в файл записывается предварительно отформатированное значение переменной $rez (строка 16), а если не установлено — выводится сообщение об ошибке (строка 17).
Переменная $rez формируется следующим образом: значение всех ячеек массива (кроме самой первой — нулевой, которая не используется) объединяется таким образом, чтобы разделителем был символ перевода строки. Это позволит в дальнейшем корректно считать полученный таким образом файл.
Для объединения строк в РНР применяется точка. Обратите внимание, что наш массив из целочисленного перешел в разряд символьных.
