Перейти на главную   
  helloworld.ru - документация и книги по программированию  
helloworld.ru - документация и книги по программированию
    главная     хостинг    
Поиск по сайту:  
Смотрите также
Языки программирования
C#
MS Visual C++
Borland C++
C++ Builder
Visual Basic
Quick Basic
Turbo Pascal
Delphi
JavaScript
Java
PHP
Perl
Assembler
AutoLisp
Fortran
Python
1C

Интернет-технологии
HTML
VRML
HTTP
CGI
FTP
Proxy
DNS
протоколы TCP/IP
Apache

Web-дизайн
HTML
Дизайн
VRML
PhotoShop
Cookie
CGI
SSI
CSS
ASP
PHP
Perl

Программирование игр
DirectDraw
DirectSound
Direct3D
OpenGL
3D-графика
Графика под DOS

Алгоритмы
Численные методы
Обработка данных

Сис. программирование
Драйверы

Базы данных
MySQL
SQL

Другое

Хостинг


Друзья
demaker.ru
Реклама

Лучший хостинг. Аренда серверов




helloworld.ru

Сборник скриптов на 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 (" ","", $a[$i]));
$n = $n+$a[$i];
$i++;
endwhile;

if ($answer != "") {
echo "<br>Спасибо, Ваше мнение учтено:";
$a[$answer]++; $n++;

$rez = "Результаты голосования! ".$a[1].
" ".$a[2]." ".$a[3]." ".$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 (" ","", $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/ - на похожем алгоритме там реализован опрос мнения посетителей. Кроме того, там Вы так же найдете пример голосования с графическим выводом результатов. Если возникнут затруднения или вопросы, с большим удовольствием отвечу Вам по электронной почте.











helloworld.ru © 2001-2021
Все права защищены
Rambler's Top100