| веб-мастеру | Услуги SEO | Статьи Веб-Мастера | Доменные имена | SEO Tools | whois | книги веб-мастеру |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
| sashkovishe |
28.6.2007, 22:50
Сообщение
#1
|
![]() Администратор форума ![]() ![]() ![]() ![]() Группа: Администраторы Сообщений: 392 Регистрация: 3.12.2006 Из: России Пользователь №: 4 |
Пишем опрос (голосование) на PHP. Опрос работает на файлах, Mysql не требуется. Помимо самого опроса, у нас так же будет возможность создавать новые опросы (заменяя старые), без особого труда. P.S. готовые файлы этого опроса, можно скачать в конце статьи... И так начнем... Первым делом напишем скрипт, который будет создавать сам опрос... ps. В коде есть комментарии... файл admin.php Код <html> <head> <title>Создание опроса (by sashkovishe)</title> </head> <body> <? // на первой странице показываем форму для ввода кол-во вариантов ответа $body="Создание опроса (1 шаг)<br><Br> <form action='admin.php?action=2' method=POST> Кол-во вариантов ответа: <input type=text name='count_otv' size=3 maxlength=2><Br> <input type=submit value=\”Далее >>\” name=go1> </form>"; ?> если нажата далее, то переходим на следующую страницу создания опроса. Переход по страницам осуществляется посредствам switch(). Код <? switch(@$_GET['action']) { case("2"): // форма для ввода вопроса и ответов $body="Создание опроса (2 шаг)<br><Br> <form action='admin.php?action=3' method=POST> <input type=\"hidden\" name=\"count_otv\" value=\"".$_POST['count_otv']."\"> Вопрос: <input type=text name='question'><br><br> Варианты ответа:<br>"; Строка <input type=\"hidden\" name=\"count_otv\" value=\"".$_POST['count_otv']."\"> нужна для передачи кол-ва ответов введенных в начале странице (потом вы узнаете зачем это нужно) Продолжаем… Код $n=1; $count_otv=$_POST['count_otv']+1; // +1 потому что отсчет начинается с нуля while ($n<$count_otv) { $body.="<input type=\"text\" name=\"otv$n\"><br>"; $n++; } $body.="<input type=submit value='Далее >>' name='go1'> </form>"; break; Этот код генерирует поля типа text. т.е. если в поле "Кол-во вариантов ответа:" было введено 3, то генерируются 3 поля для ответов Код // на следующей странице происходит сохранение всех данных case("3"): $body="Создание опроса. (3 шаг)<br><b>Сохранение опроса:</b> "; $result_file="result.txt"; // файл где будет храниться готовая форма для отображения результатов $voting_file="voting.txt"; // файл где будет храниться результаты голосования $form_file="form.txt"; // файл где будет храниться готовая форма для голосования $question=$_POST['question']; // содержит вопрос опроса=) $count_otv=$_POST['count_otv']; // кол-во ответов всего if ($file=fopen($form_file, "w+")) { // открываем файл для чтения и записи $str_save - эта переменная которая будет содержать готовый сохраняемый текст (в данном случае будем сохранять будущую форму опроса) Код $str_save="<form action=\"index.php\" method=post>\r\n <table cellspacing=0 cellpadding=0 border=0 align=center> <tr><td colspan=3 align=center>\r\n <font size=\"2\" face=\"Verdana\"> <i>Опрос</i><br>".$question."<p>\r\n </td></tr>"; for ($i=1;$i<=$count_otv;$i++) { $otvn=$_POST['otv'.$i]; // содержит названия ответов $str_save.="<tr><td><input type=\"radio\" name=\"otv\" value=\"".$i."\" id=\"".$i."\"> <label for=\"".$i."\">".$otvn."</label></td></tr>"; } Здесь этот код отвечает за кол-во ответов в форме и выводом значение самих ответов, т.е. какие и сколько ответов было введено, то и будет отображаться. Тут как раз и пригодилась строка написанная выше: <input type=\"hidden\" name=\"count_otv\" value=\"".$_POST['count_otv']."\">, которая была нужна для того, чтобы подсчитывать кол-во ответов. Далее мы просто добавляем к переменной $str_save окончание сохраняемой формы Код $str_save.="<tr><td colspan=2 align=center><br> <input type=submit name=golos value=\"Готово\"><br>\r\n <a href='index.php'>Результаты</a></td></tr>\r\n </table></form>"; fwrite($file, $str_save); // записываем все в файл. } Форма для опроса готова, осталось только переписать (можно даже сказать сбросить) значения результатов опроса и переписать (создать) форму для отображения результатов… Далее, код который сбрасывает значения результатов опроса по умолчанию (т.е. делает счетчик = 0). Этот код и последующий, похож на код который был выше (когда сохраняли названия ответов), так что нового здесь ничего нет. Код $str_save2="Результаты опроса:\r\n"; for ($i=1;$i<=$count_otv;$i++) { $str_save2.="0\r\n"; if ($file2=fopen($voting_file, "w+")) { // открываем файл для чтения и записи fwrite($file2, $str_save2); } } Вот и все, осталось только создать и сохранить форму для отображения результатов. Здесь тоже ничего сложного, подобные действия мы выполняли выше. Код if ($file3=fopen($result_file, "w+")) { // открываем файл для чтения и записи $str_save3="<div style=\"font-size: 15px;\"> <center><font size='4'>Результаты опроса<p>\r\n <font size='3'>".$question."</font><hr width=30%></cetner>\r\n <table border=0 align=center>\r\n"; for ($i=1;$i<=$count_otv;$i++) { $otvn=$_POST['otv'.$i]; // Названия ответов $str_save3.="<tr><td><b>".$otvn."</b> <td>(<?=\$file[".$i."];?>)</td><td> <img src=\"linegolos.gif\" height=10 alt=\"<?=\$pr[".$i."];?>%\" width=\"<?=(1+\$pr[".$i."]*3);?>\"> <?=\$pr[".$i."];?>%</td></tr>\r\n"; } $str_save3.="</td></tr></table><center><hr width=30%></cetner> <table border=0 align=center>\r\n <tr><td align=center>Ответили: <B><?=\$n;?></B> чел.<br>\r\n <a href=\"vote.php\">Назад</a></td></tr>\r\n</table>"; fwrite($file3, $str_save3); $body.="<b>OK</b><br><a href='vote.php'>Просмотреть опрос</a>"; } break; } ?> <img src=\"linegolos.gif\" … - это название изображения которое будет менять ширину, в зависимости от кол-ва голосов. <?=\$pr[".$i."];?> - это служит для вывода процентов. “\” – а это нужно чтобы $pr не считалось как переменной к этом коде. width=\"<?=(1+\$pr[".$i."]*3);?> - эта конструкция отвечает за ширину изображения. Умножаем на 3, потому, чтобы ширина изображения была побольше, можно это значения изменить (например на 5). И далее просто заканчиваем код… Код <?=$body;?> </body> </html> Все. Закончили создания опроса. Теперь переходим к написанию скрипта, который подсчитывает и отображает результатов. index.php Код <? if(@$_POST['golos'] && !@$_POST['otv']) { // Если пользователь не выбрали ответ, echo "Вы не выбрали ответ!!!<br> <a href='vote.php'>Назад</a>"; exit; // то пишем об этом и дальше код не выполняется } $file_name="voting.txt"; // имя файла - куда записываются результаты опроса $file=file($file_name); $file_len=count($file); // посчитываем кол-во строк Далее, подсчитываем кол-во голосов всего, сохраняя это число в $n. trim() – удаляем из начала и конца строки пробелы. Код for($i=1,$n=0;$i<$file_len;$i++) { $file[$i]=trim($file[$i]); $n=$n+$file[$i]; }; /* если нажата кнопка "Готово" и выбран вариант ответа, то выполняем сохранения результатов... */ if(@$_POST['golos'] && @$_POST['otv']) { /* при каждом новом ответе, добавляем +1, чтобы каждый голос (ответ) считался как новый */ @$file[$_POST['otv']]++; $n++; $str="Результаты опроса:\n"; $str – будет содержать строку для сохранения результатов… далее создаем цикл. Где добавляем к переменной $str результаты голосов. Код for($i=1;$i<$file_len;$i++) $str.=$file[$i]."\n"; $str=trim($str); // удаляем из начала и конца строки пробелы $file_open=@fopen($file_name,"w"); // открываем файл для записи if($file_open) { // если все ok... $counter=fwrite($file_open,$str); // ...то записываем в файл результаты fclose($file_open); // Закрываем файл } else echo "Произошла ошибка записи"; } Далее, код служит для анализа кол-во голосов и выводит проценты для каждого ответа, относительно всех голосов. Вывод процентов происходит по формуле ($file[$i]/$n)*100 т.е. каждый вариант (кол-во) ответа делится на сумму всех голосов и умножается на 100… round() – округляем проценты. Код for($i=1;$i<$file_len;$i++) $pr[$i]=@round(($file[$i]/$n)*100); ?> Ну вот и все, готово… Теперь просто подключаем файл с готовой формой для отображения результатов (которая создается автоматически в admin.php) Код <? include("result.txt"); ?> Теперь осталось только подключить саму форму опроса. Ее можно подключать куда угодно… Подключаем ее так: <? include("form.txt"); ?> Ну например так: vote.php Код <center><a href="admin.php">Создать новый опрос</a></center></p> <? /* подключаем файл с готовой формой для голосования (которая создается в admin.php) */ include("form.txt"); ?> Все, опрос готов… единственное здесь нет защиты от накрутки. Но этого я думаю достаточно чтобы сделать эту защиту самому Для тех кто не хочет или не получилось собрать все в одно целое, вот архив с готовый опросом:
voting.zip ( 4.96 килобайт )
Кол-во скачиваний: 932Автор: sashkovishe -------------------- Think differently... |
![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 1.8.2010, 14:47 |