Web - кодинг: PHP:


Скрипт голосования на PHP



  Автор: freetonik

Вы видели на различных сайтах голосования? Так вот, такой вот скрипт мы напишем сегодня сами на языке PHP. Ничего сложного в этом нет – вы сами убедитесь в этом.

Итак, нам нужен хостинг, где можно работать с php3 и выше. Для работы скрипта нужно будет три файла – в одном – само голосование, в другом – результаты, а третий будет выводить эти результаты и обрабатывать. Делаем соответственно index.php, golos.txt и golos.php.

В первом файле нужно создать форму для отправки данных другому файлу. Пишем в HTML’е:

<FORM METHOD="POST" action="golos.php">
<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. То есть если файл, в котором находится форма, находится в папке “test”, а файл golos.php – уровнем выше, то нужно будет писать так:
<FORM METHOD="POST" action="../golos.php">
Две точки с слэш (../) означает переход на уровень выше.
Идем дальше. В файл golos.txt ничего пока не нужно.
Теперь, собственно, пишем главный скрипт на пхп – golos.php


<?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").


Этот скрипт простой и не имеет большх возможностей, таких, как запись IP-адреса, чтобы не учитывать голос одного и того же человека дважды, веб-интерфейс для управления скриптом и т.д. Так что – пробуйте, учите php (я сам его знаю лишь поверхностно) и делайте намного лучшие скрипты. Удачи!






При перепечатке любого материала с сайта, видимая ссылка на источник www.warayg.narod.ru и все имена, ссылки авторов обязательны.

© 2005
 

Hosted by uCoz