Ошибка: Failed to parse the Currency Converter XML document.
$2 790.94


Ошибка: Failed to parse the Currency Converter XML document.
$1 856.97


Ошибка: Failed to parse the Currency Converter XML document.
$24 308.53


Голосование на базе

«А зачем на базе?» — спросите Вы и будете абсолютно правы. В принципе незачем. Просто делая как-то систему управления, я столкнулся с необходимостью дать абсолютно некомпетентному в кодинге человеку рули от здорового сайта. Я человек ленвиый, и представив, сколько места на винте будет занимать архив голосований, и как мне надо форматировать текстовые файлы, чтобы собирать ту статистику, которую хотел заказчик, решил пойти изващенным, но более универсальным путем.

«А зачем на базе?» — спросите Вы и будете абсолютно правы. В принципе незачем. Просто делая как-то систему управления, я столкнулся с необходимостью дать абсолютно некомпетентному в кодинге человеку рули от здорового сайта. Я человек ленвиый, и представив, сколько места на винте будет занимать архив голосований, и как мне надо форматировать текстовые файлы, чтобы собирать ту статистику, которую хотел заказчик, решил пойти изващенным, но более универсальным путем.


Сперва поставим задачку:
Нужно иметь сколько угодно голосований.

Количество вопросов варьируется от 3 до 6. (вполне условные цифры — это понятно)
Каждое голосование должно иметь 3 состояния: Активно, В архиве, Пассивно. Принимать участие пользователь может только в первых двух. Третья категория только для просмотра результатов.


Голосование должно быть редактируемо (Вопрос, варианты ответов).

Защиту прикрутим минимальную — по IP. (это вообще отдельная тема)
А теперь будем последовательно реализовывать задуманное.

Для начала создадим таблицу голосований в нашей базе (Коннект я пропущу. Итак все понятно.:).
<?
...
baseconnect(); // функция коннекта к базе.

$query = «CREATE TABLE poll(
id int(6) not null auto_increment, //Уникальный номер
name text, // Название голосования
quest text, // Вопрос
answ text, //Варианты Ответов
graph_type INT (2) DEFAULT «0» not null, // Тип вывода статистики (текст или графика)
active int(2), // Флаг активности
first_page INT (1) DEFAULT «0» not null, //На первой странице голосование или нет
anumber text, // Количество голосов по каждому ответу
total int(6) DEFAULT «0» not null, // Всего проголосовавших
PRIMARY KEY (id)
)»;
if (mysql_query($query)):
echo«Таблица создана»;
else:
die(mysql_error());
endif;
?>
Запускать данный скрипт надо только один раз.

Теперь напишем скрипт, который будет выводить данные по активному голосованию. Назовем его show.php:
<?
...
baseconnect(); // Коннектимся к базе.

$sql = «SELECT * FROM poll WHERE first_page=1»;
$res = mysql_query($sql) or die(mysql_error());
if (mysql_num_rows($res)>0)
{
$poll = mysql_fetch_assoc($res);
$graph_flag = mysql_result($res,0,«graph_type»);
echo«
».$poll[«name»].«
Вопрос
».$poll[«quest»].«
Варианты ответов
.»$ans[$step].«    ».$by_answers[$step].«    
Количество проголосовавших    colspan=«2»>».$poll[«total»].«

»;
echo«
»;
echo«
»;
$sql = «SELECT * FROM poll WHERE active=«0» AND first_page=«0»»; // Выбираем остальные голосования
$res = mysql_query($sql) or die(mysql_error());
$nums = mysql_numrows($res);
for ($step=0;$step<$nums;$step++)
{
$name = mysql_result($res,$step,«name»);
$uin = mysql_result($res,$step,«id»);
echo«
»;
// Список остальных голосований
}
echo«Остальные активные голосования
».$name.«
Архив голосований

»;
// Ссылка на архив.
}
?>

С выводом определились. Теперь разберемся со списком остальных голосований. Итак у нас есть два скрипта shall.php и arch.php. Один дает возможность принять участие в других голосованиях, а другой дает доступ к статистике уже прошедших.

Рассмотрим первый скрипт. В качестве параметра ему передается номер голосования. Это самый простой и очевидный способ. Функцию коннекта я опущу.
<?
...
$sql = «SELECT * FROM poll WHERE id=«$id»»; // Выбираем всю инфу по запрошенному голосованию
$res = mysql_query($sql) or die(mysql_error());
$uin = mysql_result($res,0,«id»);
$name = mysql_result($res,0,«name»);
$quest = mysql_result($res,0,«quest»);
$answ = mysql_result($res,0,«answ»);
$ans_kol = mysql_result($res,0,«qkol»);
$graph_flag = mysql_result($res,0,«graph_type»);
$stat = mysql_result($res,0,«anumber»);
$tot = mysql_result($res,0,«total»);
echo«
».$name.«
Вопрос
».$quest.«
Варианты ответов
».$ans[$step].«    ».$by_answers[$step].«    
Количество проголосовавших    ».$tot.«
";?>
Принять участие

»;
$sql = «SELECT * FROM poll WHERE active=«0»»;
$res = mysql_query($sql) or die(mysql_error());
$nums = mysql_numrows($res);
for ($step=0;$step<$nums;$step++)
{
$name = mysql_result($res,$step,«name»);
$uin = mysql_result($res,$step,«id»);
if ($uin <> $id){

echo«
»;
// Перейти к голосованию
echo«
»;
//Принять учатие в данном голосовании
}
}
echo«
Остальные голосования
».$name.«    Принять участие
На первую страницу
Архив голосований

»;
?>

Схема такая:
show.php — Первая страница раздела голосований. Показывает статистику по активному голосованию и открывает дотуп к остальным голосованиям.
2fp.php — Вывод формы для принятия учатия в голосовании.
arch.php — Вывод архива голосований(показ статистики).
adv.php — Скрипт, добавляющий голос и делающий элементарную проверку.
shall.php — Вывод всех активных голосований.

Первый и последний стрипт мы рассмотрели. Рассмотрим остальные три. Начнем с того, что попроще — 2fp.php:
<?
...
switch($ad)
{
default:
$sql = «SELECT * FROM poll WHERE first_page=1»;
// Делаем выборку, если нужно голосование с первой страницы
$res = mysql_query($sql) or die(mysql_error());
break;
case «1»:
$sql = «SELECT * FROM poll WHERE id=«$id»»;
// Делаем выборку из других активных голосований
$res = mysql_query($sql) or die(mysql_error());
break;
}
$name = mysql_result($res,0,«name»);
// Выбираем информацию. Этот блок общий для обеих вриантов
$quest = mysql_result($res,0,«quest»);
$answ = mysql_result($res,0,«answ»);
$ans_kol = mysql_result($res,0,«qkol»);
echo«
»;
// Скрипт голосования
echo«
»;
echo«
»;
$answer = explode(«}{»,«$answ»); // Выводим форму. С кнопкой :)
for ($step =0;$step <$ans_kol;$step++)
{

echo«
»;

}
echo«».$name.«
».$quest.«
».$answer[$step].«

»;
?>
Надеюсь, что здесь вопросов не возникнет. Как не возникнет их и в скрипте adv.php:
<?
...
if (ipcheck()) // Проверка IP адреса. Рассмотрим в другой статье
{
echo«NOt Allowed!»;
}
else
{
echo«Added
»;
$sql = «SELECT * FROM poll WHERE name=$uin»; // Выбираем инфу
$res = mysql_query($sql) or die(mysql_error());
$rt = mysql_result($res,0,«anumber»);
$kol = mysql_result($res,0,«qkol»);
$tot = mysql_result($res,0,«total»);
if ($ret=«»)
{
for ($step=0;$step<$kol;$step++)
{
if ($step == $ans){$an[$step]=1;}else{$an[$step]=0;} // Заносим голос
echo«$an[$step]
»;
$retr .= $an[$step].«}{»;
}
}else
{
$addt = explode(«}{»,«$rt»);
for ($step=0;$step<$kol;$step++)
{
if($step==$ans){
$adt[$step] = (int) $addt[$step] +1; // Увеличиваем суммарное число проголосовавших
}else
{$adt[$step]=(int) $addt[$step];}
}
for ($step=0;$step<$kol;$step++)
{
$retr .= $adt[$step].«}{»; // Переписываем поле ответов
}
}
$tot++;
$sql = «UPDATE poll SET anumber=«$retr»,total=«$tot» WHERE name=$uin»;
// Пишем результат в базу.
$res = mysql_query($sql) or die(mysql_error());
echo«Complete»;
}
?>

И, наконец, скрипт дла просмотра результатов уже прошедших голосований.
<?
...
echo«
»;
if (!isset($id)){
$sql = «SELECT * FROM poll WHERE active=«1»»; // Выбираем голосования из архива.
}
else{
$sql = «SELECT * FROM poll WHERE active=«1» AND id=«$id»»;
// Выбираем конкретное голосование
}
$res = mysql_query($sql) or die(mysql_error());
$name = mysql_result($res,0,«name»);
$id = mysql_result($res,0,«id»);
$quest = mysql_result($res,0,«quest»);
$answ = mysql_result($res,0,«answ»);
$ans_kol = mysql_result($res,0,«qkol»);
$graph_flag = mysql_result($res,0,«graph_type»);
$stat = mysql_result($res,0,«anumber»);
$tot = mysql_result($res,0,«total»);

echo«
»;
echo«
»;
echo«
»;
echo«
»;

$ans = explode(«}{»,«$answ»);
$by_answers = explode(«}{»,«$stat»);
for ($step=0;$step<$ans_kol;$step++) // Отображоаем варианты ответов.
{
echo«
».$ans[$step].«
»;
}

echo«
Количество проголосовавших».$tot.«
»;
echo«».$name.«
Вопрос
».$quest.«
Варианты ответов
».$by_answers[$step].«    

»;

$nums = mysql_numrows($res); // Выводим ссылки на остальные голосования
for ($step=0;$step<$nums;$step++)
{
$name = mysql_result($res,$step,«name»);
$uin = mysql_result($res,$step,«id»);
if ($uin <> $id)
{
echo«
»;
}
}
echo«Остальные голосования
».$name.«
На первую страницу

»;
?>

В следующий раз я расскажу, как все это управляется, а так же о некоторых методах защиты от накрутки.

 

Интересное

Что нового в SQL Server...
Наконец-то процесс создания SQL Server 2005 завершен. Если вы на протяжении долгого времени следили за подготовкой новой версии SQL, устанавливали и использовали бета-версии, с пристрастием...
Подробнее...
Настройка DHCP сервера
Настройка DHCP сервера. Автоматическое распределение адресного ространства: Грамотное распределение имеющегося адресного пространства внутри локальной сети с количеством компьютеров более двадцати...
Подробнее...
10 способов проверки среды...
Служба Каталогов (Active Directory Services) — действующий стандарт для инициализации учётных записей, базового системного управления и DNS-идентификации в большинстве сред. Ведение отчётности...
Подробнее...
Счетчик посещений на Delphi
Счетчики предназначены для учета количества посетителей на Ваш сайт. Кроме этого на счетчик можно возложить операции ведения статистики, учет хостов откуда пришли посетители и т.д.Данный пример...
Подробнее...
10 полезных приёмов при...
Если вы недостаточно хорошо освоили PowerShell, то наверняка не стремитесь применять этот инструмент в повседневной работе. Однако дананя оболочка является ядром таких систем, как Exchange 2007,...
Подробнее...
Переустановка Windows за...
<img src=«http://i-faq.ru/uploads/posts/2007-09/1189770008_1180901603_834d62a53d8f4ee88b7ff5f6dcf97.gif» align=«left» style=«border: none;» alt=«Переустановка Windows за 10 минут» />Даже у...
Подробнее...
Проверка данных из формы
Наверное все встречались с некоторой недобросовестностью некоторых посетителей Вашей страничкипри отправлении форм... То ерунду какую то напишут, то неправильно укажут адрес электронной почты, то...
Подробнее...
Краткий HELP по реестру...
Как известно, реестр windows имеет много назначений. Там хранятся текущие настройки системы и установленных программ, информация об установленном железе, ссылки на объекты, исполняемые на старте...
Подробнее...
Виртуальный выделенный сервер
В последнее время некоторые российские провайдеры стали предоставлять услуги хостинга на виртуальных выделенных серверах. Во всём мире эта услуга не нова. Там, наряду с обычным хостингом, она...
Подробнее...
Cмешение цветов с помощью...
Привет всем. Сегодня мы будем писать програмку, которая может размыть картинку.Бросай на форму Timage и Tbutton имена оставь по умолчанию, создавай событие button1.click
Подробнее...