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
Форумы портала PHP.SU :: Версия для печати :: Клас для опроса.
Форумы портала PHP.SU » PHP » Пользовательские функции » Клас для опроса.

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

1. OrmaJever - 26 Января, 2011 - 23:54:12 - перейти к сообщению
Вот написал класс для опроса. Постарался всё зделать понятным и динамичным.
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] = 'новый стиль';
2. annihilus - 27 Января, 2011 - 00:47:48 - перейти к сообщению
Прикольно , но почему ограничение в 10 ответов?
Можно ведь сделать что бы ограничений вообще не было, либо их можно было бы устанавливать.
3. OrmaJever - 27 Января, 2011 - 02:17:13 - перейти к сообщению
Можно но зачем? Вы где видели опрос где больше 10 вариантов ответов? Можно зделать неограничено но тогда кода будет больше и выглядетьбудет не красиво!
4. Craken - 19 Февраля, 2011 - 19:18:29 - перейти к сообщению
При создании класса - лучше инициализировать переменные в конструкторе!
И кстати перегружать функцию rand() не стоит, хоть она и в классе! Лучше переназвать!
5. OrmaJever - 19 Февраля, 2011 - 20:00:47 - перейти к сообщению
Craken пишет:
При создании класса - лучше инициализировать переменные в конструкторе!
И кстати перегружать функцию rand() не стоит, хоть она и в классе! Лучше переназвать!

какие переменые? В конструкторе подключение к бд.
Методы не перегружают функции. Какая версия php?
6. ALEN - 20 Февраля, 2011 - 13:44:46 - перейти к сообщению
- При выводе опроса на странице, уже подразумевает, что сайт использует соединение с БД, поэтому создавать новое подключение к БД как-то не прикольно, лучше вместо доступов передавать в класс идентификатор подключения.
- Как на счет того, что многие работают с mysqli , а не с mysql - нет желания модернизировать?
- Было бы прикольно, если шаблоны нужные ля класса можно было передать в скрипт, а не использовать, что есть.
- Ну и действительно лучше делать неопределенное количество вопросов, во первых это упростит использование, а во вторых немного упростит код. Можно, чтоб человек вводил с новой строки каждый вопрос, а класс циклом перебирал строки.
- А еще, если у меня на сайте человек авторизован, и его друг с его же подсети так же - то проголосует все равно один. Поэтому кроме ip добавить проверку по id юзера.
7. OrmaJever - 20 Февраля, 2011 - 13:59:05 - перейти к сообщению
1) Логично! Задумаюсь
2) Я не против mysqli но я не знаю точное описание методов Недовольство, огорчение на php.su описания нету, а на других я и не искал Улыбка
3) Конешно я хотел отделать html и php но не совсем придумал как Растерялся Я ещё хотел зделать вывод статистики (как для админки) но из-за шаблона закинул эту идею.
4) Нащёт простоты кода не согласен. Тогда пришлось бы создавать ещё одну таблицу в бд. Я хочю чтобы кто то показал мне голосование с > 10 вариантами ответа?) Это редчайший случай! )
5) этот пункт я продумал. Можно в бд записывать логин или id пользователя (то по чему его можно узнать). В конце описал как это зделать.
А вобще замечания верные! Сегодня буду думать над ними Улыбка
8. ALEN - 20 Февраля, 2011 - 16:11:34 - перейти к сообщению
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.  


Кто мешает построчно читать и записывать. И потом в голосовании никогда не выдирают часть голосования, поэтому все варинты ответа можно записать в виде массива в одну колонку в таблице, вот и все. А при чтении работать с этим готовым массивом.
9. OrmaJever - 25 Февраля, 2011 - 01:57:41 - перейти к сообщению
ALEN спасибо! Исправил все пункты.
1) Можно передавать ресурс первым параметром в конструктор.
2) Подержка mysql & mysqli.
3) Отделил шаблон. Масивы $Atpl & $Rtpl.
4) Вариантов ответа сколько угодно.
10. ALEN - 25 Февраля, 2011 - 08:23:11 - перейти к сообщению
Еще не пробовал, но теперь намного прикольней

 

Powered by ExBB FM 1.0 RC1