Справочник по PHP

Создание голосования на 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 и в текстовом редакторе запишите в него следующие строки:

Результаты голосования:000000


Первая строка у нас учитываться не будет.

В остальные шесть строк надо ввести нули, нажимая после каждой цифры клавишу Enter.

В файле golos.php, который у нас отвечает за обработку результатов, напишем следующее:

<html><head><title>Обработка голосования</title></head><body><?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_len;$i++) {    $file[$i]=trim($file[$i]);    $n=$n+$file[$i];  };  // В этом цикле мы убираем символы перевода строки и записываем в   // переменную $n сколько человек уже проголосовало  echo "<center><h2>Спасибо, Ваше мнение учтено!</h2></center>";  $file[$otv]++;  $n++;  // Здесь мы учитываем номер ответа, который пришел к нам из формы,  // увеличив соответствующее значение в массиве и число проголосовавших на 1  $rez="Результаты голосования:\n";  // Переменная $rez будет содержать данные о голосовании,  // которые затем запишем обратно в файл  for($i=1;$i<$file_len;$i++) $rez.=$file[$i]."\n";  $rez=trim($rez);  $file_rec=@fopen($file_name,"w");  // Здесь мы создаем новый файл, в который затем запишем обновленные данные  if($file_rec) {    $counter=fputs($file_rec,$rez);    // Запись обновленных данных в файл data.txt    fclose($file_rec);  }  else echo "Произошла ошибка записи результатов!";  for($i=1;$i<$file_len;$i++) $pr[$i]=round(($file[$i]/$n)*100);// Записали в массив $pr, сколько процентов от общего числа голосовавших// занимает каждый ответ// Далее идет кусок HTML-кода, который// отвечает за вывод наших данных на экран?><center><h2>Ваше мнение о сайте:</h2></center><BR><table border=1 align=center><tr><td><B>Просто супер! (<?echo $file[1];?>):</B></td><td><img src="img.php?pr=<?echo $pr[1];?>" height=15></td></tr><tr><td><B>Нормальный. (<?echo $file[2];?>):</B></td><td><img src="img.php?pr=<?echo $pr[2];?>" height=15></td></tr><tr><td><B>Так себе. (<?echo $file[3];?>):</B></td><td><img src="img.php?pr=<?echo $pr[3];?>" height=15></td></tr><tr><td><B>Мне все равно. (<?echo $file[4];?>):</B></td><td><img src="img.php?pr=<?echo $pr[4];?>" height=15></td></tr><tr><td><B>Плохой. (<?echo $file[5];?>):</B></td><td><img src="img.php?pr=<?echo $pr[5];?>" height=15></td></tr><tr><td><B>Хуже не видел! (<?echo $file[6];?>):</B></td><td><img src="img.php?pr=<?echo $pr[6];?>" height=15></td></tr></table><table border=1 align=center><tr><td align=center><B>Всего проголосовало:</B></td></tr><tr><td align=center><?echo $n." человек";?></td></tr></table><?};?></body></html>



Записав в атрибут SRC тега <IMG> значение "img.php?pr= количество процентов" мы тем самым передаем файлу img.php (который отвечает за вывод графической информации) значение, на основании которого будет на лету сгенерировано изображение голосования. Далее приведу листинг файла img.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);  // Здесь производим вывод полученной картинки в   // стандартный поток вывода и уничтожаем идентификатор?>

В итоге получиться что-то типа:


Содержание раздела