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

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


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

Юзер ставит галочку напротив какого-то варианта, нажимает submit. Данные передаются этому же скрипту, нам надо их соответствующим образом обработать. Это делается в блоке if(isset($submit)) {..

Следует обратить внимание на защиту от накруток. Прежде чем добавить голос, я отправляю запрос к таблице ips, в котором прошу вернуть все записи, относящиеся к текущему голосованию, у которых в поле ip находится ip-адрес человека, отправившего запрос. Если запрос ничего не вернет, либо с момента, когда с этого адреса голосовали, прошло более 10 минут, то я считаю, что пользователь новый. Было бы несколько неразумным полностью блокировать ip - у большинства dialup-пользователей динамический адрес. Кроме того, сейчас очень много локальных сетей, юзеры которых лазают в инет через один гейт.

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

Файл vote.php

$user="serfer";

require("xakep.php");

require("vote_set.php"); //Подключаем конфигурационный скрипт

if($user=='serfer') {

function connect () //Описываем функцию, которая будет подключаться к серверу БД и выбирать активную базу

{

require("vote_set.php");

$db = mysql_connect($mysql_server, $mysql_login, $mysql_passwd);

mysql_select_db("$dbname", $db);

}

if(!isset($submit)) //Если html-форма еще не отправлена..

{

connect(); //Используем описанную ранее функцию

if(!isset($gol)) // если номер голосования не указан явно, то..

{

$sql="select * from vote order by 'time' desc limit 1"; // .. выбираем из таблицы последнее голосование. Оно только одно. Чтобы посмотреть другие - есть ссылка внизу.

} elseif(isset($gol)) //Если номер голосования указан явно, то...

{

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

}

$rez=mysql_query($sql); //Отправляем запрос серверу

Назад на стр. 049-090-2  Содержание  Вперед на стр. 049-090-4