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
|