Голосование на PHP

Автор: Topol Вторник, Апрель 17th, 2012 Нет комментариев

Рубрика: Программирование

К нам на передачу часто поступают вопросы как сделать разного вида скрипты.
Но я вообще программист, а не дизайнер — поэтому извиняйте за кривоту кода.

Начнём с того зачем нам голосование ?
Как вы видели на сайте www.imania.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>Результаты голосования»; }

Вуаля !
Скрипт ГОТОВ !!!
Теперь голосуйте сколько хотите !

Источник: woweb.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты