|
РНР Голосование на РНР.
Для работы понадобится три файла.Первый файл будет иметь имя 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>
|
|