Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Клас для опроса.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: PHP5, mysql
OrmaJever
Отправлено: 26 Января, 2011 - 23:54:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Вот написал класс для опроса. Постарался всё зделать понятным и динамичным.
PHP5 + mysql
Спойлер (Отобразить)

Методы использования.
При создании обьекта можно передать ресурс соединения (mysql или mysqli), или 4 параметра логин, пароль, имя бд, хост
PHP:
скопировать код в буфер обмена
  1. $poll = new poll($resours);
  2. //или
  3. $poll = new poll('user', 'pass', 'db_name', 'host'); // host не обязательный параметр.


1. Установка:
Чтобы класс начал работать нужно в бд создать таблицы. Зделать установку можно так
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $poll = new poll('user', 'pass', 'db_name'); // создаём соединение с бд.
  3. $poll->install(); // Устанавливаем. Выведет сообщение.
  4. ?>


2. Создание опроса:
Конешно же нужно создать опрос Улыбка Их можно создавать сколько хотите. У опроса должно быть имя (как его отличить от других опросов в таблице), сам вопрос и варианты ответа.
Вот пример как это можно зделать:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $answer = array('512кб', '1мб', '2мб');
  4. $poll = new poll('user', 'pass', 'db_name'); // соединение с бд
  5. if($poll->create('poll_name', 'Какая скорость интернета?', $answer)) echo 'ok';
  6. // 1 параметр это имя опроса, 2 это сам вопрос, а 3 это масив с вариантами ответов
  7. // вариатнов ответов может быть сколько угодно.
  8. // вернёт true - если опрос создан или false - если неудача;
  9. ?>
  10. <form method="post">
  11. <input type="text" name="name">
  12. <input type="text" name="question">
  13. <textarea name="text"></textarea>
  14. <input type="submit" name="s">
  15. </form>


3. Форма и добавление.
PHP:
скопировать код в буфер обмена
  1. $poll = new poll('user', 'pass', 'db_name');
  2. echo $poll->form('poll_name'); // параметром вводим имя опроса
  3.  
  4. if(isset($_POST['submit'])) // проверяем нажата ли кнопка
  5. {
  6.         $poll->insert($_POST['answer'], $_POST['name']); // Добавляем результат пользователя.
  7. }

Если хотите чтобы опросы выводились хаотично то можно написать так
PHP:
скопировать код в буфер обмена
  1. $poll = new poll('user', 'pass', 'db_name');
  2. $poll->rand();
  3. echo $poll->form(); // заметьте параметр передавать не нужно!
  4.  
  5. if(isset($_POST['submit'])) // проверяем нажата ли кнопка
  6. {
  7.         $poll->insert($_POST['answer'], $_POST['name']); // Добавляем результат пользователя.
  8. }


И тут же могу добавить что голосовать можно в каждом голосовании по 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 это будет выглядеть так
PHP:
скопировать код в буфер обмена
  1. $poll = new poll('user', 'pass', 'db_name');
  2. echo '<form method="post">';
  3. echo $poll->form('poll_name', 'OrmaJever'); // Второй параметр имя пользователя чтобы проверить голосовал он или нет
  4. echo '</form>';
  5.  
  6. if(isset($_POST['submit'])) // проверяем нажата ли кнопка
  7. {
  8.         $poll->insert($_POST['answer'], $_POST['name'], 'OrmaJever'); // Трейтий параметр имя пользователя от которого добавить голос.
  9. }

Ух так много написал Закатив глазки надеюсь оцените. Буду рад услышать ошибки или более удобные варианты кусков кода Подмигивание
В методе form() есть дефолтный стиль, он надится в двух масивах (для вопроса и для ответа) его можно изменить $poll->Atpl и $poll->Rtpl. Стандартные масивы выгледят так:
Спойлер (Отобразить)

масивы имеют 3 индекса 0,1,2. 0 - верхушка, 1 - средина, 2 - низ.
Если мы хотим изменить только средину вопроса делаем так
PHP:
скопировать код в буфер обмена
  1. $poll->Atpl[1] = 'новый стиль';

(Отредактировано автором: 05 Июля, 2011 - 15:16:18)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
annihilus
Отправлено: 27 Января, 2011 - 00:47:48
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




Прикольно , но почему ограничение в 10 ответов?
Можно ведь сделать что бы ограничений вообще не было, либо их можно было бы устанавливать.
 
 Top
OrmaJever
Отправлено: 27 Января, 2011 - 02:17:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Можно но зачем? Вы где видели опрос где больше 10 вариантов ответов? Можно зделать неограничено но тогда кода будет больше и выглядетьбудет не красиво!


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Craken
Отправлено: 19 Февраля, 2011 - 19:18:29
Post Id


Новичок


Покинул форум
Сообщений всего: 20
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




При создании класса - лучше инициализировать переменные в конструкторе!
И кстати перегружать функцию rand() не стоит, хоть она и в классе! Лучше переназвать!
 
 Top
OrmaJever
Отправлено: 19 Февраля, 2011 - 20:00:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Craken пишет:
При создании класса - лучше инициализировать переменные в конструкторе!
И кстати перегружать функцию rand() не стоит, хоть она и в классе! Лучше переназвать!

какие переменые? В конструкторе подключение к бд.
Методы не перегружают функции. Какая версия php?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
ALEN Модератор
Отправлено: 20 Февраля, 2011 - 13:44:46
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




- При выводе опроса на странице, уже подразумевает, что сайт использует соединение с БД, поэтому создавать новое подключение к БД как-то не прикольно, лучше вместо доступов передавать в класс идентификатор подключения.
- Как на счет того, что многие работают с mysqli , а не с mysql - нет желания модернизировать?
- Было бы прикольно, если шаблоны нужные ля класса можно было передать в скрипт, а не использовать, что есть.
- Ну и действительно лучше делать неопределенное количество вопросов, во первых это упростит использование, а во вторых немного упростит код. Можно, чтоб человек вводил с новой строки каждый вопрос, а класс циклом перебирал строки.
- А еще, если у меня на сайте человек авторизован, и его друг с его же подсети так же - то проголосует все равно один. Поэтому кроме ip добавить проверку по id юзера.

(Отредактировано автором: 20 Февраля, 2011 - 13:49:46)

 
 Top
OrmaJever
Отправлено: 20 Февраля, 2011 - 13:59:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




1) Логично! Задумаюсь
2) Я не против mysqli но я не знаю точное описание методов Недовольство, огорчение на php.su описания нету, а на других я и не искал Улыбка
3) Конешно я хотел отделать html и php но не совсем придумал как Растерялся Я ещё хотел зделать вывод статистики (как для админки) но из-за шаблона закинул эту идею.
4) Нащёт простоты кода не согласен. Тогда пришлось бы создавать ещё одну таблицу в бд. Я хочю чтобы кто то показал мне голосование с > 10 вариантами ответа?) Это редчайший случай! )
5) этот пункт я продумал. Можно в бд записывать логин или id пользователя (то по чему его можно узнать). В конце описал как это зделать.
А вобще замечания верные! Сегодня буду думать над ними Улыбка

(Отредактировано автором: 20 Февраля, 2011 - 14:04:19)



-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
ALEN Модератор
Отправлено: 20 Февраля, 2011 - 16:11:34
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




2) Так же как и в mysql только в маленькими корректировками
3) В многомерный массив, чтоб люди могли делать, что угодно, кто картинки рисовать, кто еще чего
4) Посмотри мой вариант получения колонки и значения на типе записи в БД http://forum.php.su/topic.php?fo...35&topic=735 :

PHP:
скопировать код в буфер обмена
  1. foreach($this->tr as $key=>$value)
  2. ....
  3. $insert->tr['title']='титул';
  4. $insert->tr['name']='название';
  5.  


Кто мешает построчно читать и записывать. И потом в голосовании никогда не выдирают часть голосования, поэтому все варинты ответа можно записать в виде массива в одну колонку в таблице, вот и все. А при чтении работать с этим готовым массивом.

(Отредактировано автором: 20 Февраля, 2011 - 16:12:21)

 
 Top
OrmaJever
Отправлено: 25 Февраля, 2011 - 01:57:41
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




ALEN спасибо! Исправил все пункты.
1) Можно передавать ресурс первым параметром в конструктор.
2) Подержка mysql & mysqli.
3) Отделил шаблон. Масивы $Atpl & $Rtpl.
4) Вариантов ответа сколько угодно.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
ALEN Модератор
Отправлено: 25 Февраля, 2011 - 08:23:11
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Еще не пробовал, но теперь намного прикольней
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB