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


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


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


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

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

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


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

Количество вопросов варьируется от 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.«
На первую страницу

»;
?>

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

 

Интересное

Правила хорошей...
Реклама не должна выглядеть как рекламаПри размещении рекламных блоков издатель должен четко представлять, какие области на странице ресурса представляют наибольший интерес для пользователей...
Подробнее...
Сбор статистики вебмастером
Рано или поздно каждому вебмастеру приходит в голову идея подсчитать статистику посещений своего сайта. В простых случаях вполне хватает использования «внешних» служб — таких,...
Подробнее...
Linux Format
Linux Format Номер 1 Январь 2007 Автор: Linux Format Формат: PDF
Подробнее...
Запуск mergemaster для...
В статье рассматривается работа с программой mermemaster при обновлении ОС FreeBSDDisclaimer Я ни в коем разе не претендую, что установка сделана правильно, корректно, «так как надо» и...
Подробнее...
Новый способ удаления Msn...
Не секрет, что жесткая инсталляция и невозможность простого удаления программы Msn Messenger не очень радует многих пользователей Windows XP. Какой бы хорошей не была эта программа, большинство из...
Подробнее...
Чистка Windows
Рано или поздно практически каждый пользователь Windows замечает, как установленная когда-то «с нуля» система начинает неуклонно сдавать позиции, теряя остатки молодецкого задора: загружается с...
Подробнее...
Обзор игровых...
Если ваш стаж общения с компьютерами достаточно велик, то весьма вероятно, что вы помните то знаменательное событие — превращение ПК в мультимедийное устройство. Для России, да и для значительной...
Подробнее...
Скрытая загрузка
Не для кого не секрет, что в наше время Интернет-странички просто переполнены различной графикой (баннеры, дизайн странички, графические счетчики) — без этого уже почти невозможно представить...
Подробнее...
Увеличение...
Настройка сетевой подсистемы FreeBSDЭта статья описывает несколько простых шагов, которые можно выполнить,для получения прироста производительности сетевой подсистемы, а такжеправильно выбрать...
Подробнее...
Удаление стрелок с ярлыков
Удаление стрелок с ярлыковЕсли вам надоели маленькие стрелки, обозначающие ярлыки Windows, и вы хотите чтоб они не закрывали вашу яркую иконку, выполните следующие действия:
Подробнее...