|
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); //Отправляем запрос серверу |