Voting-система на PHP

Xakep, номер #049, стр. 049-090-4


$hg=mysql_num_rows($rez);

if($rez){ //Если запрос удачно обработан.. (mysql_query возвращает или false, в зависимости от того, насколько успешно прошла отправка запроса серверу)

if($hg!="0") // если запрос ничего не вернул..

{

$gol=mysql_fetch_array($rez); //Создаем массив с элементами полученных записей

echo "

$gol[vopros]
";//Здесь создаем форму и выводим вопрос голосования

$sql="select * from $gol[vote_table]";//Создаем запрос к таблице, где хранятся варианты ответов на вопрос голосование (ее имя берется из таблицы со всеми голосованиями)

$vot=mysql_query($sql);

while($vott=mysql_fetch_array($vot)) //Поскольку запрос вернет несколько строк, создаем цикл

{

echo "$vott[variant]
";

}} else {print "Голосований пока нет";}

}

else {

$error=mysql_error($db);

print "Произошла ошибка: $error";

}}

if(isset($submit)) //Если пользователь отправил форму...

{

connect(); //Подключаемся

$sql="select * from vote where no='$no'"; //составляем запрос

$q1=mysql_query($sql);//отправляем его

$q2=mysql_fetch_array($q1); //помещаем результат в массив

$sql="select * from ips where ip='$REMOTE_ADDR' and vote='$no'";

$a1=mysql_query($sql);

$a2=mysql_fetch_array($sql);

$a3=mysql_num_rows($a1);

if($a3 != 0 and $a2[time]-time()<600) { //Если с ip уже голосовали и времени прошло меньше чем 10 минут..

echo "

С этого ip-адреса уже голосовали.

";

} else //В противном случае - голосуем

{

$sql="delete * from ips where ip='$REMOTE_ADDR'"; //Удаляем старую запись

mysql_query($sql);

//добавляем голос=)

$sql="select * from $q2[vote_table] where no='$answer'";//Выбираем запись, соответствующую ответу пользователя

$vop=mysql_query($sql);

$rr = mysql_fetch_array($vop);

$rr[rezult]++;//Увеличиваем количество голосов на единицу

$sql = "update $q2[vote_table] SET rezult='$rr[rezult]' where no='$answer'";//записываем изменения

mysql_query($sql);

$sql="update vote SET voters=voters+1, ip='$rr[ip]' where no='$no'";//увеличиваем общее число голосов

mysql_query($sql);

echo "

Голос засчитан!

";//поздравляем пользователя

}

// Выводим результаты голосования

$sql="select * from vote where no='$no'";

$w1=mysql_query($sql);

$w2=mysql_fetch_array($w1);

$kol=$w2[voters];

$sql="select * from $w2[vote_table]";

$e1=mysql_query($sql);

echo "$w2[vopros]
";

while($e2=mysql_fetch_array($e1))

{

$width=$e2[rezult]/$w2[voters]*100;

$width=round($width);

echo "$e2[variant] - $width %
";

if($graph=="1") //Если в конфигурационном скрипте сказано, что надо стоить диаграммы..

{

echo "

";

}}}

} elseif ($user=='hacker') { echo "Hacker? He-he;)";} //Обламываем злоумышленника

?>

Все. Здесь я описал непосредственно скрипт голосования, оставив за бортом скрипты защиты и администрации. На самом деле, про защиту у нас, наверное, будет отдельная статья, а администрация, в общем-то, написана с использованием уже освещенных приемов php + mySQL программирования и, немного подумав, ты разберешься и с этими скриптами. Напомню, дополнительную информацию ты можешь найти на моем сайте nikitos.inc.ru. Там же лежит подробно прокомментированная конечная версия voting-системы. Любой, даже самый глупый вопрос можно задать в форуме на сайте www.phpclub.net. В более интересных случаях смело пиши мне. Не обещаю, что быстро, но отвечу обязательно.

Назад на стр. 049-090-3  Содержание