Welikeit.Ru | |
|
| |
|
|
PHP - Уроки - Голосование на PHPОдин из самых частых вопросов
начинающих веб-программистов является вопрос "А как сделать онлайн
голосование?". Очень просто! И даже если сейчас Вам так не кажется, уверяю Вас,
стоит лишь вдумчиво прочитать данную статью, и Вы забудете про вопросы о
голосования раз и навсегда.Бредисловие: если вдруг Вы являетесь не
новичком в PHP, советую не кидать статью дочитав до середины, чертыхаясь на
автора, а прочитать данный небольшой материальчик полностью.Для начала
давайте определимся, что нам нужно для создания голосования.Итак, первое
что понадобиться - форма для отображения пунктов голосования и передачи
результатов на сервер соответствующему скрипту для сохранения. Сразу выделяются
два новых объекта - скрипт для приема, обработки и сохранения результатов и
место для хранения этих самых результатов голосования. Местом для хранения
данных спокойно может быть обычный файл. Чего-то не хватает? Ах, да! Нам же
нужно еще отображать результаты голосования. Эту функцию можно спокойно
исполнить в нашем едином скрипте.Ну что же, приступим. Начнем, конечно
же, с формы для отображения пунктов голосования и передачи данных на сервер. В
нем нет ничего сложного:<FORM METHOD="POST" action="golos.php">
<TABLE BORDER=1><TR><TD> <TABLE> <TR><TD>Как Вам мой сайт?</TD></TR> <TR><TD><INPUT TYPE=radio NAME=otvet VALUE=1>Супер!</TD></TR> <TR><TD><INPUT TYPE=radio NAME=otvet VALUE=2>Хорошо</TD></TR> <TR><TD><INPUT TYPE=radio NAME=otvet VALUE=3>Нормально</TD></TR> <TR><TD><INPUT TYPE=radio NAME=otvet VALUE=4>Слабо</TD></TR> <TR><TD><INPUT TYPE=radio NAME=otvet VALUE=5>Лажа!</TD></TR> <TR><TD> <INPUT TYPE=Submit NAME=golos VALUE="Голосовать"> <INPUT TYPE=Submit NAME=result VALUE="Результаты"> </TD></TR> </TABLE> </TD></TR></TABLE> </FORM> Как Вы видите, обычная форма, которая передает данные методом POST скрипту golos.php, имеется 5 вариантов ответа, кнопка Голосовать - для голосования и Результаты - просмотр результатов голосования без участия в самом голосовании.Что дальше? Скрипт? Нет, в начале нужно определиться как мы будим хранить данные. Первое что приходит в голову - в каждой строчке по значению. Довольно удобно - все сразу можно считать в массив. Однако, не стоит забывать что при этом первая строка примет индекс 0 - тут начинающие программисты часто путаются. Я советую не использовать первую строку для хранения результатов голосования, а написать там какой-нибудь комментарий, например, что это файл для хранения результатов такого-то голосования.Самое время перейти к скрипту голосования. Он не такой тяжелый, так что я напишу весь скрипт сразу, а уже в нем буду давать комментарии каждой строчке.<?php //имя файла с результатами голосования: $file = "golos.dat"; //считываем данные голосования в массив: $a = file($file); //инициализируем переменные: $i = 1; $n = 0; //получаем количество элементов в массиве голосований: $fi = Count($a); //в цикле обрабатываем каждый элемент массива: while ($i <= $fi): //удаляем переносы строк: $a = trim(str_replace ("\n","", $a)); //считаем количество голосов: $n = $n+$a; $i++; endwhile;//если был дан голос: if ($otvet!= "") { //выводим соотв. сообщение: echo "<br>Спасибо, Ваш голос принят"; //увеличиваем на 1 соотв. пункт голосования: $a++; //и общее количество голосов: $n++;//подготавливаем данные для записи в файл: $rez = "Опрос на сайте - это комментарий в файле\n".$a[1]."\n".$a[2]."\n".$a[3]."\n".$a[4]; //открываем файл для записи: $fp = @fopen($file,"w"); //если успешно: if ($fp) { //записываем данные в файл: 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>Лажа! — <b>".$a[5]."</b>"; echo "<br><br>Всего голосов: ".$n; ?>Сразу скажу, что данный скрипт я нашел в кодах одного из моих знакомых, считающего себя большим спецом. Данный скрипт стоит у него на сайте.Ну что же. Вот и все! Вы уже побежали ставить себе на сайт голосование? А зря! Ведь данный код лишь демонстрация алгоритма, слабого алгоритма, я уже молчу про возможности самого кода. Он даже не сможет обеспечить надежной работы - при большом количестве обращений файл голосований будет периодически обнуляться. Или, например, у нас нет абсолютно никакой защиты от многократных голосований - один человек может голосовать столько раз, сколько ему захочется. Я уже молчу про недоработанный алгоритм скрипта - посмотрите в первой части мы очень неплохо используем цикл, который не зависит от количества пунктов голосования, а вот при выводе результатов - мы жестко привязаны к этому числу. А вывод результатов? Куда это годиться...В общем, продолжать перечислять недостатки скрипта можно долго. Автор: Владислав Путяк www.docs.com.ru |
|
Copyright © 2006-09.
| |