Бесплатные листингиГлавная Бесплатные листинги Руководство по раскрутке сайтов Бесплатные листинги Шаблоны Бесплатные листинги Программирование на VBБесплатные листинги
Статьи

РНР

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

Для работы понадобится три файла.Первый файл будет иметь имя index.phtml, второй - golos.txt и третий - golos.phtm
Когда Вы все сделаете и зальете готовые файлы к себе на сервер, не забудьте установить атрибуты файла golos.txt таким образом, что бы он был доступен для записи. Обычно, это атрибуты 666 или 777. Сделать это можно как правило с помощью Вашего FTP менеджера. Если нет, воспользуйтесь IE 5.0 и выше в режиме FTP, тогда нужно просто посмотреть свойства уже залитого на сервер файла и установить все галочки .

Index.phtml
Вы можно назвать файлы так, как Вам угодно, только не меняйте расширений (кроме, конечно, txt). Это необходимо для работы РНР, на котором и будет реализован алгоритм голосования. Дизайн и оформление предлагаю Вам сделать самостоятельно, я не буду в статье обращать на это внимание.
Golos.txt
Здесь надо определиться, в каком формате мы будем хранить вводимую информацию. Проще всего организовать четыре строки (по количеству вариантов ответов) и считать их номера соответствующими номеру выбранного варианта ответа. Соответственно - первая строка нашего файла не будет использована, и ввести туда можно все что угодно. Например - информацию о файле:Результаты голосования. Если это сделано, введите еще четыре строки с нулями. Не забывайте нажимать ввод для перевода строки. Это - готовые результаты нашего голосования.

Golos.phtml
В первых строчках мы определяемся с именем файла результатов и считываем результаты голосования в массив данных с именем $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) тега
.Когда отформатированные результаты выведены, скрипт заканчивает свою работу. Если Вы обратили внимание, эта часть скрипта выполняется в любом случае, как и считывание данных из файла. Таким образом достигается гарантированный вывод результатов на экран.
Весь код скрипта, и его применении и работа.
?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 "
Спасибо, Ваше мнение учтено:";
$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 "
Результаты голосования"; }
echo "
Круто! - ".$a[1]."";
echo "
Так себе - ".$a[2]."";
echo "
Сойдет - ".$a[3]."";
echo "
Это что-то страшное! - ".$a[4]."";
echo "

Всего проголосовало:".$n;
?(>) кавычки убрать
Прежде всего сделаем нужную форму.
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>