Советы по PHP : Создание голосования на PHP
смотрим также
Материал из Справочник Web-языков
Ниже приводится неправильный способ создание голосования на файлах. Основная ошибка в том, что при изменении результатов голосования файл не блокируется. Также код выкопан археологами, разбирающими код php3 - основная ошибка этих скриптов - register_globals
Создание голосования на PHP
Для начала надо определиться, о чем мы будем спрашивать посетителей. Например, понравился им ваш сайт или нет.
Для нашего голосования нам потребуются четыре файла:
- В первом будет находиться форма с голосованием (form.html).
- Второй файл будет отвечать за обработку результатов (golos.php).
- В третьем будут храниться данные голосования (data.txt).
- Четвертый будет отвечать за выдачу графической информации (img.php).
Например мы хотим задать посетителям следующие вопросы:
- Ваше мнение о сайте
-
- просто супер
- нормальный
- так себе
- мне все равно
- плохой
- хуже не видел
В файл form.html запишем:
<form action=golos.php method=post> <table cellspacing cellpadding=0 border=0> <tr><td align=center colspan=2><B>Голосование:</B></td></tr> <tr><td align=center colspan=2><B>Ваше мнение о сайте:</B></td></tr> <tr><td><input type=radio name=otv value=1 checked></td> <td>Просто супер!</td></tr> <tr><td><input type=radio name=otv value=2></td> <td>Нормальный.</td></tr> <tr><td><input type=radio name=otv value=3></td>< td>Так себе.</td></tr> <tr><td><input type=radio name=otv value=4></td>< td>Мне все равно.</td></tr> <tr><td><input type=radio name=otv value=5></td>< td>Плохой.</td></tr> <tr><td><input type=radio name=otv value=6></td>< td>Хуже не видел!</td></tr> <tr><td colspan=2 align=center> <input type=submit name=golos value="Голосовать"></td></tr> </table</form>
После нажатия кнопки Голосовать переменная $otv перейдет на обработку сценарием в файле golos.php
В файл data.txt надо записать начальные данные, которые затем будут оттуда считаны и обработаны.
Создайте файл data.txt и в текстовом редакторе запишите в него следующие строки:
Результаты голосования: 0 0 0 0 0 0
Первая строка у нас учитываться не будет.
В остальные шесть строк надо ввести нули, нажимая после каждой цифры клавишу Enter.
В файле golos.php, который у нас отвечает за обработку результатов, напишем следующее:
Обработка голосования <?php if(@$golos) { // Здесь мы запускаем обработку данных только если // была нажата клавиша Голосовать $file_name="data.txt"; // Переменная $file_name задает имя файла с результатами $file=file($file_name); // Записываем файл с данными в массив $file $file_len=count($file); // $file_len - количество строк в файле data.txt for($i=1,$n=0;$iСпасибо, Ваше мнение учтено!
";$file[$otv]++; $n++; // Здесь мы учитываем номер ответа, который пришел к нам из формы, // увеличив соответствующее значение в массиве и число проголосовавших на 1 $rez="Результаты голосования:n"; // Переменная $rez будет содержать данные о голосовании, // которые затем запишем обратно в файл for($i=1;$i// Записали в массив $pr, сколько процентов от общего числа голосовавших // занимает каждый ответ // Далее идет кусок HTML-кода, который // отвечает за вывод наших данных на экран ?>
Ваше мнение о сайте:
Просто супер! (<?php echo $file[1];?>): | |
Нормальный. (<?php echo $file[2];?>): | |
Так себе. (<?php echo $file[3];?>): | |
Мне все равно. (<?php echo $file[4];?>): | |
Плохой. (<?php echo $file[5];?>): | |
Хуже не видел! (<?php echo $file[6];?>): |
Всего проголосовало: |
}; ?>
Записав в атрибут SRC тега <IMG> значение "img.php?pr=количество процентов" мы тем самым передаем файлу img.php (который отвечает за вывод графической информации) значение, на основании которого будет на лету сгенерировано изображение голосования.
Далее приведу листинг файла img.php:
<?php $otstup=35; // $otstup - задает отступ, в прелелах которого // в картинку впишем процентное значение $string=$pr."%"; // $string - содержит значение процентов плюс знак процента $im=imageCreate($pr*2+$otstup,15); // Здесь создаем идентификатор, при помощи // которого мы будем работать с картинкой $fon=imageColorAllocate($im,220,20,60); $fon1=imageColorAllocate($im,255,20,147); // Задаем цвет фона $col_b=imageColorAllocate($im,0,0,0); // Задаем цвет обводки $shrift=imageColorAllocate($im,255,255,255); // Цвет вывода процентного значения imageFill($im,2,2,$fon); // Заполнили наш прямоугольник основным фоном $x1=0;$x2=$pr*2+$otstup-1; $y1=0;$y2=14; // Формирование улов для обводки контуром imageLine($im,$x1,$y1,$x2,$y1,$col_b); imageLine($im,$x2,$y1,$x2,$y2,$col_b); imageLine($im,$x2,$y2,$x1,$y2,$col_b); imageLine($im,$x1,$y1,$x1,$y2,$col_b); imageLine($im,$x1+$otstup,$y1,$x1+$otstup,$y2,$col_b); // Создание контура и разделяющей полосы if($pr!=0) imageFill($im,$otstup+1,2,$fon1); // Если значение процента не равно 0, то заполняем // правую часть цветом $fon1 imageString($im,3,5,1,$string,$shrift); // Пишем в правую часть картинки процентное значение header("Content-type: image/png"); imagePng($im); imageDestroy($im); // Здесь производим вывод полученной картинки в // стандартный поток вывода и уничтожаем идентификатор ?>