|
Voting-система на PHP
Xakep, номер #049, стр. 049-090-1 Никита "Nikitos" Кислицин (nikitoz@real.xakep.ru) Необходимое условие полноценного развития любого www-проекта - наличие обратной связи пользователя твоего продукта с производителем, т.е. с тобой :). Форумы, гостевые книги - это все, конечно, здорово, но в них ты видишь довольно субъективные мнения, обычно поляризованные: от "все отстой" до "супер-стар". Чему же верить? Голосованию. Introduce Прежде всего давай решим, как технологически мы будем реализовывать задачу. В частности, где мы будем хранить информацию об опросе. Можно, конечно, в текстовом файле, но я решил с самого начала делать упор на базы данных - даже в довольно простых случаях. Говоря "базы данных", я подразумеваю mySQL, поскольку это очень мощный, надежный и быстрый агрегат, идеально подходящий для работы в связке с PHP. С его помощью можно эффективно реализовать почти любую задачу, не требующую сверхсекретности (банковские транзакции, БД по налогоплательщикам и т.п.). Да и вообще, писать с использованием mySQL значительно проще, нежели геморроиться с файлами. Весь смак SQL-баз данных проявляется при написании приложений, которые должны хитрым образом сортировать записи - язык запросов SQL чрезвычайно гибок и позволяет получать данные из БД уже в отсортированном порядке, что порой избавляет от многих килобайтов лишнего кода. mySQL Обсудим процесс взаимодействия интерпретатора PHP с сервером баз данных. Первым делом осуществляется подключение к серверу БД, которое требует аутентификации пользователя. Залогинившись, пользователь может выполнять различные действия с базами данных, отправляя серверу запросы на языке SQL. Но об этом чуть позже. Сейчас же я опишу основные php-функции, используемые для работы с мусклом (mySQL). Подключение к серверу БД осуществляется функцией Mysql_connect($host:$port, $user, $passwd), где $host - адрес mySQL сервера, $port - порт, на котором висит демон БД, $user - юзер, $passwd – пароль. Пример: mysql_connect("localhost:3306","nikitos","KoyRNhsL2") Выбор активной БД осуществляется функцией Mysql_select_db($database,$link), где $database - имя БД, $link - указатель на активное соединение с БД. SQL-запрос отправляется функцией Mysql_query($query, $link), где $query - строка запроса, $link - указатель на активное соединение с базой данных. Функций еще очень много, но их мы будем обсуждать по мере необходимости. Этих же вполне хватит для того, чтобы начать писать голосование. Таблицы в SQL Прежде чем приступать к написанию кода, следует продумать структуру таблиц, в которых будут храниться данные. В нашем случае постоянно будут использоваться три таблицы. Первая - vote - имеет следующие поля: no - идентификатор голосования. vopros - вопрос голосования. voters - число проголосовавших. vote_table - имя таблицы, в которой хранятся варианты ответов для данного голосования. Вторая таблица - adm - используется для хранения информации об администраторах голосования и имеет следующие поля: id login Passwd name И третья - ips - содержит ip-адреса голосовавших, используется для защиты от накручивания голосований. Вот ее структура: |