Голосование на PHP
MostInfo.net (http://mostinfo.net/article/3/41.htm)

К нам на передачу часто поступают вопросы как сделать разного вида скрипты...
 
KLEVO
imania.zp.ua
26-05-2008
 

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

Начнём с того зачем нам голосование ?
Как вы видели на сайте http://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>


Надеюсь, все поняли смысл этого кода …
Я хочу объяснить только эту строку “
Эта строка передаёт скрипту № голосования. Т.е. вы сразу можете проводить большое количество голосований.

Далее нам нужно будет в чём-то хранить статистику.
Для этого нам понадобится обычный файл.
Имя файла будет зависеть от № голосования.
Пример 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 (" ","", $a[$i]));
$n = $n+$a[$i];
$i++;
endwhile;

if ($answer != "") {
echo "
Спасибо, Ваше мнение учтено:";
$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 "
Результаты голосования"; }
echo "
".$a1." - ".$a[0]."";
echo "
".$a2." - ".$a[1]."";
echo "
".$a3." - ".$a[2]."";
echo "
".$a4." - ".$a[3]."";
echo "

Всего проголосовало: ".$n;
echo ""
?>


Пару советов :

Я вообще ленивый человек , но не люблю оставлять дырки.

В данном голосование 1 человек может проголосовать хоть 100 раз , но мы это сейчас исправим.

Проверять по IP человека можно , но 1 сейчас есть много прокси серверов и можно просто перезвонить к провайдеру и ты получишь новый IP.
Но у меня идея покруче …
Cookies.
Но они работают не во всех браузерах.
Мысль состоит в том чтоб обрабатывать голосовал ли уже человек …
Допустим можно голосовать 1 раз в день .
Значит перед echo "
Спасибо, Ваше мнение учтено:";
Мы должны написать
setcookie("voted","yes",time() + 86400);
Если вам интересно что такое 86400 то это 1 день
1 день=24часа=24*60 минут=24*60*60 секунд или 86400 секунд.
Это значит что юзер целый день не сможет голосовать.

Далее заменяем
if ($answer != "")

На
if (($answer != "") && ($voted !="yes")){

И заменяем
} else { echo "
Результаты голосования"; }

На
} else {
if ($voted =="yes") {
echo "Вы уже голосовали !";
}
echo "
Результаты голосования"; }

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

KLEVO



Оригинал статьи находится по адресу http://mostinfo.net/article/3/41.htm