Речь пойдет о практической работе, которую мы с Вами вместе проведем и
усвоим. Голосование - это средство узнать мнение Ваших посетителей по
разным вопросам. Сами вопросы могут быть как полезными так и
бесполезными - эту тему мы рассматривать не будем. А для нашего примера
возьмем простой вопрос - Ваше мнение о сайте? Предположим, у Вас
например появилось желание узнать, что думает большинство посетителей
Вашего сайта. Варианты ответов предоставим следующие:
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>
Пока
это все. Тут нет и строчки кода РНР, но на будущее полезно иметь
возможность вставить сюда что-то, так что расширение файла выбрано
правильно, тем более что оно больше ни на что не влияет. В коде все
просто, и сделать подобное или похожее легко в любом редакторе. Мы
просто предлагаем указать с помощью переключателя нужный вариант ответа
и нажать на кнопку Отправить. Этот код можно легко интегрировать в
любые странички и править так, как только вздумается. Только нужно
обращать внимание на соответствие имен и значений переменной в форме. И
что самое главное - данные формы должны передаваться в скрипт РНР с
обработкой результатов, поэтому имя файла в action должно
соответствовать имени файла с скриптом. Напомню, все имена форм,
присвоенные в этом файле, станут соответствующими переменными в скрипте
РНР, куда отправляются данные формы. Так как тут ничего сложного больше
не предвидится, пойдем дальше.
Golos.txt
Здесь
надо определиться, в каком формате мы будем хранить вводимую
информацию. Проще всего организовать четыре строки (по количеству
вариантов ответов) и считать их номера соответствующими номеру
выбранного варианта ответа. Все это безобразие можно считывать с
помощью команды РНР ввода файла в массив, при этом не забывайте, что
массив всегда начинается с индекса ноль. Соответственно - первая строка
нашего файла не будет использована, и ввести туда можно все что угодно.
Например - информацию о файле: Результаты голосования. Если это
сделано, введите еще четыре строки с нулями. Не забывайте нажимать ввод
для перевода строки. Это - готовые результаты (пока только начальные) нашего голосования. Так как пока никто не проголосовал :-) они нулевые.
Golos.phtml
Вот
и дошли мы до самого главного и интересного. С самого начала я приведу
весь код скрипта, а дальше дам пояснения в его применении и работе.
} else { echo " Результаты голосования"; } echo " Круто! - ".$a[1].""; echo " Так себе - ".$a[2].""; echo " Сойдет - ".$a[3].""; echo " Это что-то страшное! - ".$a[4].""; echo "
Всего проголосовало: ".$n; ?>
Опять
же хочу предупредить, что код не самый лучший и простой, но зато
логичный и работоспособный. Вариантов реализации масса, но мне не
хотелось брать что-то уже готовое, и поэтому я, не особо заботясь об
удобочитаемости и дизайне (это Вы и сами можете сделать :-), написал
свой собственный код, что заняло вместе с настройкой и отладкой
буквально полчаса. Скрипт ориентирован на конкретно поставленную
задачу, но Вам ничего не стоит переделать его под свое количество
ответов на вопрос. Напомню - наша главная задача на практическом
примере научиться создавать свои собственные системы опроса и
голосования. Теперь о том, как все работает.В первых строчках мы
определяемся с именем файла результатов и считываем результаты
голосования в массив данных с именем $a. Дальше идет цикл, в котором мы
обрабатываем полученный массив таким образом, что бы он не содержал
символов перевода каретки (ввод строки) и пробелов: $a[$i] =
trim(str_replace (" ","", $a[$i])); Параллельно ведем подсчет
количества проголосовавших, что не сложно так как это просто сумма
значений нашего массива. Удалять символы ввода и пробела необходимо для
преобразования считанных данных из символьной строки в целое число. Это
можно сделать разными методами, но в этом случае просто удаляются
символы " " (что в РНР соответствует переводу строки) и обрезаются
пробелы с начала и с конца строки функцией 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
- на похожем алгоритме там реализован опрос мнения посетителей. Кроме
того, там Вы так же найдете пример голосования с графическим выводом
результатов. Если возникнут затруднения или вопросы, с большим
удовольствием отвечу Вам по электронной почте.