Вторник, 26.11.2024, 22:44 Вы вошли как Гость | Группа "Гость" | RSS
 

 
Главная | Форум | Чат | Информация для пользователей
[Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Голосование на PHP своими руками
Grinya Дата: Вторник, 14.06.2011, 15:09 | Сообщение # 1
Легендарный
Группа: Администратор
Сообщений: 365
Статус: Offline
.: Дополнительные данные :.
Бог сайта и форума За хорошую посещаемость на форуме За супер посещаемость За Легендарныйа
Голосование на PHP своими руками

Один из самых частых вопросов начинающих веб-программистов является вопрос "А как сделать онлайн голосование?". Очень просто! И даже если сейчас Вам так не кажется, уверяю Вас, стоит лишь вдумчиво прочитать данную статью, и Вы забудете про вопросы о голосования раз и навсегда.

Бредисловие: если вдруг Вы являетесь не новичком в PHP, советую не кидать статью дочитав до середины, чертыхаясь на автора, а прочитать данный небольшой материальчик полностью.

Для начала давайте определимся, что нам нужно для создания голосования.

Итак, первое что понадобиться - форма для отображения пунктов голосования и передачи результатов на сервер соответствующему скрипту для сохранения. Сразу выделяются два новых объекта - скрипт для приема, обработки и сохранения результатов и место для хранения этих самых результатов голосования. Местом для хранения данных спокойно может быть обычный файл. Чего-то не хватает? Ах, да! Нам же нужно еще отображать результаты голосования. Эту функцию можно спокойно исполнить в нашем едином скрипте.

Ну что же, приступим. Начнем, конечно же, с формы для отображения пунктов голосования и передачи данных на сервер. В нем нет ничего сложного:

Code
<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 - тут начинающие программисты часто путаются. Я советую не использовать первую строку для хранения результатов голосования, а написать там какой-нибудь комментарий, например, что это файл для хранения результатов такого-то голосования.

Самое время перейти к скрипту голосования. Он не такой тяжелый, так что я напишу весь скрипт сразу, а уже в нем буду давать комментарии каждой строчке.

Code
<?php
//имя файла с результатами голосования:
$file = "golos.dat";
//считываем данные голосования в массив:
$a = file($file);
//инициализируем переменные:
$i = 1;
$n = 0;
//получаем количество элементов в массиве голосований:
$fi = Count($a);
//в цикле обрабатываем каждый элемент массива:
while ($i <= $fi):
//удаляем переносы строк:
$a[$i] = trim(str_replace ("\n","", $a[$i]));
//считаем количество голосов:
$n = $n+$a[$i];
$i++;
endwhile;

//если был дан голос:
if ($otvet!= "")
{
//выводим соотв. сообщение:
echo "<br>Спасибо, Ваш голос принят";
//увеличиваем на 1 соотв. пункт голосования:
$a[$otvet]++;
//и общее количество голосов:
$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;
?>


Сразу скажу, что данный скрипт я нашел в кодах одного из моих знакомых, считающего себя большим спецом. Данный скрипт стоит у него на сайте.

Ну что же. Вот и все! Вы уже побежали ставить себе на сайт голосование? А зря! Ведь данный код лишь демонстрация алгоритма, слабого алгоритма, я уже молчу про возможности самого кода. Он даже не сможет обеспечить надежной работы - при большом количестве обращений файл голосований будет периодически обнуляться. Или, например, у нас нет абсолютно никакой защиты от многократных голосований - один человек может голосовать столько раз, сколько ему захочется. Я уже молчу про недоработанный алгоритм скрипта - посмотрите в первой части мы очень неплохо используем цикл, который не зависит от количества пунктов голосования, а вот при выводе результатов - мы жестко привязаны к этому числу. А вывод результатов? Куда это годиться...

В общем, продолжать перечислять недостатки скрипта можно долго. Давайте лучше я покажу, как можно от них избавиться на примере моего скрипта для голосований. Но это уже в продолжении статьи.
Прикрепления: 6379638.gif (3.7 Kb)


  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Последнии темы Читаемые темы Лучшие пользователи Новые пользователи
  • Я был ТУТ! (24)
  • Наши кнопки (0)
  • Общие правила на сайте (0)
  • Описание различных видео форматов (0)
  • Шаблоны оформления новостей (2)
  • Как вы нашли наш сайт? (8)
  • Сектор Газа, все только о них... (1)
  • Какие хорошие комедии вы видели? (5)
  • Вакансии по разделам на www.7x.net.ua (0)
  • Приглашаем! Журналистов, Риперов... (0)
  • Я был ТУТ! (24)
  • Как вы относитесь к сериалу Звёздные врата: SG-1 (17)
  • Фото приколы. (16)
  • Конкурс на лучший баннер (11)
  • Красивый шаблон для системы uCoz (10)
  • Досчитаем до 100 (9)
  • Анимированное меню (9)
  • Как вы нашли наш сайт? (8)
  • Видео приколы. (8)
  • Увеличь количество посещений своего сайта (7)
  • Grinya
  • A1rBoRnE
  • Chibcha
  • DarkSpirit
  • Змей
  • Fantom
  • Borman
  • Worlak
  • Mister_Coob
  • Anatoliy
  • ZoYOping
  • LeoFreskos
  • Avalancheflu
  • Candyktg
  • Portableddx
  • olemit
  • Valeron83Oping
  • AviorT
  • Blendermog
  • Holographictkx
  • ()


    Copyright MyCorp © 2024 Хостинг от uCoz