Голосование на php
Начнём с того зачем нам голосование ?
Как вы видели на сайте wwwimania.zp.ua его используют чтоб узнать мнение пользователей . Голосование это один из лучших методов привлечение посетителей на сайт.
Начнём.
Для написания скрипта вам понадобится драйвер DLL_прямые_пальцы.
Вот что нам нужно будет вставить в HTML код, чтоб получить формочку.
<FORM METHOD="POST" action="vote.php"> <TABLE BORDER=1><TR><TD><TABLE BORDER=0> <TR><TD>Вопрос голосования</TD></TR> <TR><TD><INPUT TYPE=radio NAME=answer VALUE=0>Ответ №1</TD></TR> <TR><TD><INPUT TYPE=radio NAME=answer VALUE=1> Ответ №2</TD></TR> <TR><TD><INPUT TYPE=radio NAME=answer VALUE=2> Ответ №3</TD></TR> <TR><TD><INPUT TYPE=radio NAME=answer VALUE=3> Ответ №4</TD></TR> <INPUT TYPE="hidden" NAME=von VALUE="1" <INPUT TYPE="hidden" NAME=a1 VALUE="Ответ №1" <INPUT TYPE="hidden" NAME=a2 VALUE="Ответ №2" <INPUT TYPE="hidden" NAME=a3 VALUE="Ответ №3" <INPUT TYPE="hidden" NAME=a4 VALUE="Ответ №4" <TR><TD> <INPUT TYPE=Submit NAME=vote VALUE=" Отправить "> </TD></TR> <TR><TD> <INPUT TYPE=Submit NAME=result VALUE=" смотреть результат "> </TD></TR></TABLE></TD></TR></TABLE></FORM>
Надеюсь, все поняли смысл этого кода …
Я хочу объяснить только эту строку “<INPUT TYPE="hidden" NAME=von VALUE="1">”
Эта строка передаёт скрипту № голосования. Т.е. вы сразу можете проводить большое количество голосований.
Далее нам нужно будет в чём-то хранить статистику.
Для этого нам понадобится обычный файл.
Имя файла будет зависеть от № голосования.
Пример vote1.txt – для первого и т.д.
Обязательно если скрипт будет работать на *NIX платформе выставить права доступа
как 777 (Read/Write/eXecute)
Файл состоит из четырёх строк которые заполнены по 1 нулю.
Пример :
0 0 0 0
Теперь сам скрипт.
Vote.php
<? $file = "vote".$von.".txt"; $a = file($file); $i = 0; $fi = Count($a)-1; $n = 0; while ($i <= $fi): $a[$i] = trim(str_replace ("\n","", $a[$i])); $n = $n+$a[$i]; $i++; endwhile; if ($answer != "") { echo "<br>Спасибо, Ваше мнение учтено:"; $a[$answer]++; $n++; $fp = @fopen($file,"w"); if ($fp) { $counter=fputs($fp,$a[0]." "); $counter=fputs($fp,$a[1]." "); $counter=fputs($fp,$a[2]." "); $counter=fputs($fp,$a[3]." "); fclose($fp); } else { echo "Произошла ошибка записи результатов!"; } } else { echo "<br>Результаты голосования"; } echo "<br>".$a1." - <b>".$a[0]."</b>"; echo "<br>".$a2." - <b>".$a[1]."</b>"; echo "<br>".$a3." - <b>".$a[2]."</b>"; echo "<br>".$a4." - <b>".$a[3]."</b>"; echo "<br><br>Всего проголосовало: ".$n; echo "<!-- Скрипт от KLEVO-SOFT специально для INTERNET@MANIA -->" ?>
Пару советов :
Я вообще ленивый человек , но не люблю оставлять дырки.
В данном голосование 1 человек может проголосовать хоть 100 раз , но мы это сейчас исправим.
Проверять по IP человека можно , но 1 сейчас есть много прокси серверов и можно просто перезвонить к провайдеру и ты получишь новый IP.
Но у меня идея покруче …
Cookies.
Но они работают не во всех браузерах.
Мысль состоит в том чтоб обрабатывать голосовал ли уже человек …
Допустим можно голосовать 1 раз в день .
Значит перед echo "<br>Спасибо, Ваше мнение учтено:";
Мы должны написать
setcookie("voted","yes",time() + 86400);
Если вам интересно что такое 86400 то это 1 день
1 день=24часа=24*60 минут=24*60*60 секунд или 86400 секунд.
Это значит что юзер целый день не сможет голосовать.
Далее заменяем
if ($answer != "")
на
if (($answer != "") && ($voted !="yes")){
и заменяем
} else { echo "<br>Результаты голосования"; }
на
} else { if ($voted =="yes") { echo "Вы уже голосовали !"; } echo "<br>Результаты голосования"; }
Вуаля !
Скрипт ГОТОВ !!!
Теперь голосуйте сколько хотите !