$res=$this->fetch_object($this->query('SELECT count(*) AS `count` FROM `'.$this->prefix.'poll_result` WHERE name = "'.mysql_escape_string($this->name).'" AND ip = "'.$ip.'"'));
$ob=$this->fetch_object($this->query("SELECT count(`r`.`ip`) AS `ctn`, `p`.`count` FROM `".$this->prefix."poll_result` AS `r` LEFT JOIN `".$this->prefix."poll` AS `p` USING (`name`) WHERE `name` = '{$this->name}' GROUP BY `name`"));
$this->i['all']=$ob->ctn;
for($i=1;$i<=$ob->count;$i++)
{
$q=$this->query("SELECT count(*) AS `count` FROM `".$this->prefix."poll_result` WHERE `name` = '{$this->name}' AND `result` = '{$i}'");
$res=$this->fetch_object($this->query("SELECT * FROM `".$this->prefix."poll` LEFT JOIN `".$this->prefix."poll_result` USING (`name`) WHERE `name` = '{$this->name}'"));
2. Создание опроса:
Конешно же нужно создать опрос Их можно создавать сколько хотите. У опроса должно быть имя (как его отличить от других опросов в таблице), сам вопрос и варианты ответа.
Вот пример как это можно зделать:
echo$poll->form();// заметьте параметр передавать не нужно!
if(isset($_POST['submit']))// проверяем нажата ли кнопка
{
$poll->insert($_POST['answer'],$_POST['name']);// Добавляем результат пользователя.
}
И тут же могу добавить что голосовать можно в каждом голосовании по 1 разу (определяется по ip пользователя)
4. Список дополнительных методов $poll->show(); - вернёт масив с именами опросов. $poll->check('poll_name', ip); проверить голосовал ли пользователь. $poll->delete('poll_name', 'ip'); тут 3 варинта.
1) Если есть 1 параметр (имя опроса) удалит отпрос целиком с его результатами.
2) Если есть только 2 параметр ('', 'ip') удалит все голоса пользователя (ip) со всех опросов
3) Если есть оба параметра то удалит удалит голос юзера с опроса poll_name
Ну ещё напоследок напишу что если вы хотите привязать опрос не к ip а например к нику пользователя (для зарегистрированы) то в методах check() - второй параметр insert() - трейтий параметр form() - второй delete() - второй
Передавайте (2 или 3 указано выше) логин пользователя.
Например для пунта 3 это будет выглядеть так
echo$poll->form('poll_name','OrmaJever');// Второй параметр имя пользователя чтобы проверить голосовал он или нет
echo'</form>';
if(isset($_POST['submit']))// проверяем нажата ли кнопка
{
$poll->insert($_POST['answer'],$_POST['name'],'OrmaJever');// Трейтий параметр имя пользователя от которого добавить голос.
}
Ух так много написал надеюсь оцените. Буду рад услышать ошибки или более удобные варианты кусков кода
В методе form() есть дефолтный стиль, он надится в двух масивах (для вопроса и для ответа) его можно изменить $poll->Atpl и $poll->Rtpl. Стандартные масивы выгледят так:
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
annihilus
Отправлено: 27 Января, 2011 - 00:47:48
Гость
Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2009
Помог: 0 раз(а)
Прикольно , но почему ограничение в 10 ответов?
Можно ведь сделать что бы ограничений вообще не было, либо их можно было бы устанавливать.
OrmaJever
Отправлено: 27 Января, 2011 - 02:17:13
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Можно но зачем? Вы где видели опрос где больше 10 вариантов ответов? Можно зделать неограничено но тогда кода будет больше и выглядетьбудет не красиво!
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Craken
Отправлено: 19 Февраля, 2011 - 19:18:29
Новичок
Покинул форум
Сообщений всего: 20
Дата рег-ции: Май 2010
Помог: 0 раз(а)
При создании класса - лучше инициализировать переменные в конструкторе!
И кстати перегружать функцию rand() не стоит, хоть она и в классе! Лучше переназвать!
OrmaJever
Отправлено: 19 Февраля, 2011 - 20:00:47
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Craken пишет:
При создании класса - лучше инициализировать переменные в конструкторе!
И кстати перегружать функцию rand() не стоит, хоть она и в классе! Лучше переназвать!
какие переменые? В конструкторе подключение к бд.
Методы не перегружают функции. Какая версия php?
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
ALEN
Отправлено: 20 Февраля, 2011 - 13:44:46
Участник
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
- При выводе опроса на странице, уже подразумевает, что сайт использует соединение с БД, поэтому создавать новое подключение к БД как-то не прикольно, лучше вместо доступов передавать в класс идентификатор подключения.
- Как на счет того, что многие работают с mysqli , а не с mysql - нет желания модернизировать?
- Было бы прикольно, если шаблоны нужные ля класса можно было передать в скрипт, а не использовать, что есть.
- Ну и действительно лучше делать неопределенное количество вопросов, во первых это упростит использование, а во вторых немного упростит код. Можно, чтоб человек вводил с новой строки каждый вопрос, а класс циклом перебирал строки.
- А еще, если у меня на сайте человек авторизован, и его друг с его же подсети так же - то проголосует все равно один. Поэтому кроме ip добавить проверку по id юзера.
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
1) Логично! Задумаюсь
2) Я не против mysqli но я не знаю точное описание методов на php.su описания нету, а на других я и не искал
3) Конешно я хотел отделать html и php но не совсем придумал как Я ещё хотел зделать вывод статистики (как для админки) но из-за шаблона закинул эту идею.
4) Нащёт простоты кода не согласен. Тогда пришлось бы создавать ещё одну таблицу в бд. Я хочю чтобы кто то показал мне голосование с > 10 вариантами ответа?) Это редчайший случай! )
5) этот пункт я продумал. Можно в бд записывать логин или id пользователя (то по чему его можно узнать). В конце описал как это зделать.
А вобще замечания верные! Сегодня буду думать над ними
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
ALEN
Отправлено: 20 Февраля, 2011 - 16:11:34
Участник
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Помог: 11 раз(а)
2) Так же как и в mysql только в маленькими корректировками
3) В многомерный массив, чтоб люди могли делать, что угодно, кто картинки рисовать, кто еще чего
4) Посмотри мой вариант получения колонки и значения на типе записи в БД http://forum.php.su/topic.php?fo...35&topic=735 :
Кто мешает построчно читать и записывать. И потом в голосовании никогда не выдирают часть голосования, поэтому все варинты ответа можно записать в виде массива в одну колонку в таблице, вот и все. А при чтении работать с этим готовым массивом.
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
ALEN спасибо! Исправил все пункты.
1) Можно передавать ресурс первым параметром в конструктор.
2) Подержка mysql & mysqli.
3) Отделил шаблон. Масивы $Atpl & $Rtpl.
4) Вариантов ответа сколько угодно.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
ALEN
Отправлено: 25 Февраля, 2011 - 08:23:11
Участник
Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008 Откуда: Крым
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.