![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
Имеется анкета, вопросы выводятся из базы данных.
Но имеются и такие вопросы, которые я не знаю как лучше организовать, например:
"-" - это чекбокс "*" - это радио-кнопка. как такое реализовать? чувствую тут надо поле создавать в mysql и указывать там тип каждого вопроса либо чекбокс либо радиокнопка. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
если уж анкета генерируется настолько автоматически, то да, надо в БД сохранять и тип ответа
|
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
наверно это уже относится к разделу js, но раз тут начал спрашивать то думаю не стоит темы размножать...
вот примерно такое можно вывести из базы, 544 - это id вопроса. 1,2,3 - это id ответа но тогда надо чтобы когда пользователь отметит "Нигде не был" убирались все отмеченные ранее чекбоксы и наоборот, если он отметит сначала "Нигде не был", а потом захочет выбрать еще и "Францию", надо чтобы радио-кнопка опять была неотмечена. Это сообщение отредактировал(а) bugsb - 11.9.2009, 13:44 |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
это уже чистая зависимость, которую придётся считать на клиенте, т.е. javascript.
тут бы я тогда предложил не заморачиваться с radio, а чисто строить чекбоксы, просто некоторые с пометкой уникальности. но вопрос всё равно советую перезадать в разделе javascript, здесь всё-таки другим занимаются |
|||
|
||||
| bugsb |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
вот тут http://forum.vingrad.ru/forum/topic-272488...y1963534/0.html
мне даже готовый код написали... =) в принципе все как надо, только щас я не знаю как в бд это сделать... Получается так
"*" - радио-кнопки "-" - чекбоксы но по сути варианта ответа "Здесь я был" нету... на данный момент вот такие поля имеются в mysql
|
||||
|
|||||
| capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 2 Всего: 13 |
bugsb,
anketa_quest - таблица с вопросами - quest_id - идентификатор, выставляется автоматически - quest_variant - если 1, то 1 вариант ответа, если 0, то несколько. - quest_name - сам вопрос я бы добавил поле : - parent_id => quest_id - если 0 - главная т.е. "*" - радио-кнопки если >0 тогда "-" - чекбоксы |
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
capitan, это наверно надо не в таблицу с вопросами, а в таблицу с ответами!? а если в вопросе нет ответов имеющие радио-кнопки? т.е. надо чтобы главными были чекбоксы и небыло подвариантов. вот пример анкеты: http://itay.ru/123.html реально ли вообще такую генерировать автоматически из базы? Это сообщение отредактировал(а) bugsb - 13.9.2009, 12:49 |
|||
|
||||
| capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 2 Всего: 13 |
Генерировать реально.
anketa_quest - таблица с вопросами - quest_id - идентификатор, выставляется автоматически - quest_type - checkbox/ radio/main. - quest_value - quest_text - parent_id - родитель (0 - главный вопрос ) 1. Делаем выборку parent_id = 0 (получим список вопросов) 2. Делаем выборку для подвопросов parent_id = quest_id (id вопроса) 3. IF quest_type = radio => делаем выборку checkbox parent_id = quest_id (id radio) Логика примерно такая. Типа дерева. |
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
capitan, у меня нет подвопросов! у меня есть подответы ;-)
думаю база будет примерно такой Таблица вопросов: quest_id quest_text Таблица ответов: var_id var_idq - ид вопроса var_txt - ответ var_type - 1 - checkbox; 0 - radio var_idv - 0 - главный ответ; >0 значит подответ (указать id родительского ответа) Например 3 | 5 | Где то был | 0 | 0 4 | 5 | Франция | 1 | 3 5 | 5 | Германия | 1 | 3 6 | 5 | Нигде не был | 0 | 0 вот это выведет: * Где то был ---- Франция ---- Германия * Нигде не был по моему эта система рабочая, но тогда очень тяжело придумать как будет создаваться опрос в админке, надо ведь предусмотреть если родительский ответ чекбокс, то подответ не может быть радиокнопкой и вот такие подобные комбинации (если родительский ответ радио, то к этому же вопросу нельзя сделать чекбокс родительским) |
|||
|
||||
| capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 2 Всего: 13 |
quest_id | quest_type | quest_value | quest_text | parent_id
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 main Откуда вы о нас узнали? 0 2 main Где вы были? 0 3 main Порекомендуете ли вы нас друзьям? 0 4 checkbox Газеты 1 5 checkbox Интернет 1 6 checkbox Телевидение 1 7 checkbox Другое 1 8 radio А я был здесь 2 9 checkbox Франция 8 10 checkbox Англия 8 11 radio Нигде не был 2 12 radio Да 3 13 radio Нет 3 Я бы пошел в этом направлении. Это сообщение отредактировал(а) capitan - 17.9.2009, 11:27 |
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
capitan, интересный вариант, вместо двух таблиц использовать одну...
но у таблицы с вопросами есть еще дополнительные поля (количество проголосовавших и т.д.) они будут пустыми у строк с полем type=main а как это все потом выводить? я не очень хорошо понимаю как эту всю иерархию строить.... и в админке надо будет как то запрещать пользователю создавать родительский ответ с чекбоксом и с радио. И к чекбоксу подуровни нельзя радио приделывать и вот много подобных нюансов. |
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
capitan, сделал так как Вы посоветовали, вот что у меня получилось http://itay.ru/quest/
все нормально, кроме последнего вопроса... не знаю как автоматизировать вывод... надеюсь кто-нибудь поможет. вот этой функцией я делаю вывод
не работает последний вопрос из-за $onclick = "onclick=\"choose(this, event);\"";, но если я это уберу, то у меня не будет работать второй вопрос. вопрос решили с помощью исправления JS Это сообщение отредактировал(а) bugsb - 15.9.2009, 20:16 |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
я хотел сделать много разширенное анкетирование... такое как vkontakte.ru, сделать большой конструктор голосования
(и чтобы можно было выбрать свой вариант еще) а есть ли где пример MySQL запросов, статьи? нужно будет перебирать структуры, чтобы отправить все данные в шаблон smarty или template? ===== я пока придумал вариант выбрать из форм данные, потом сериализации структуру через JSON (или пл другому http://ru.wikipedia.org/wiki/Сериализация и сохранить в MySQL само голосование и ответы, так же... (может перевести в MIME тип) потом сделать выборку и десериализации, и отправить прямо в шаблон... тип таблицы: id int vo bigtext только недостаток: что поиск сделать не получиться, так как все сериализации... скорее всего поиск нужен будет... Это сообщение отредактировал(а) gcc - 16.9.2009, 14:28 |
|||
|
||||
| Ипатьев |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2232 Регистрация: 5.7.2009 Репутация: 3 Всего: 37 |
непонятно, при чем здесь MySQL запросы.
непонятно, при чем здесь вопрос про "немного расширенное анкетирование". вроде бы, есть правило, один топик - один вопрос? |
|||
|
||||
| gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: нет Всего: 17 |
автор говориn по-моиму про RDBMS (MySQL)
вопрос такой же... про анкетирование... Это сообщение отредактировал(а) gcc - 16.9.2009, 14:46 |
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
_http://anketa.itay.ru/result.php
вот что у меня на данный момент
вот так примерно составлена БД. Каким образом можно сделать чтобы при выводе результатов полоски у подответов (рождество в музее, сударыня-масленица, остров детства) выводился другим цветом (не зеленым). возьмем к примеру ответ и подответ, они ничем не отличаются в базе, то что один из них по типу чекбокс (type=2) а другой радио (type=1) ничего не значит, т.к. есть ответы с type=2 (чекбоксы). Это сообщение отредактировал(а) bugsb - 11.10.2009, 10:38 |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
при выборке вы их размещаете под родителем, то есть ответы под вопросом, подответы под ответом. не сложно в этом случае расписать стили так, чтобы более глубокий уровень отмечался другим цветом. также не сложно раскидать в разные классы. только это уже относится к использованию условия if(), а не к БД
|
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
вот примерно так формируются уровни. Я вообще не могу себе представить условие по каторому будут различаться второй уровень от первого... |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 9 Всего: 315 |
// если у текущего элемента есть дети
else { $content.="<li>{$type}<ul class="qw">"; // заносим элемент списка li и открываем список детей здесь же достаточно прописать соответствующий класс: |
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
не совсем... этот код что я писал выше формирует вот такой хтмл код (все лишнее убрал)
если добавить класс к <ul> ответы и подответы будут с этим классом. Для скрипта первый уровень - сам вопрос. Это сообщение отредактировал(а) bugsb - 11.10.2009, 12:57 |
|||
|
||||
| capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 2 Всего: 13 |
А что мешает в таблице завести поле level ? И писать в него уровень вложенности.
|
|||
|
||||
| bugsb |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 11.9.2009 Репутация: нет Всего: нет |
в таком случае эта проблема решится, но возникнет другая более сложная, каким образом прописывать уровень? если все вопросы создаются через админ-панель (ну пока еще не создаются, но будут)
можно сделать просто "каким цветом отображать полоску в результатах". - Зеленым - Синим но как то слишком много настроек для простого создания анкеты.... хм.. щас еще мысль пришла, если parent_id у родителя = 0, то это второй уровень, если parent_id отличен от нуля, то это третий, а четвертый и пятый и шестой автоматом никак не прописать, а если ручками, то это равносильно прописыванию цвета к каждому вопросу |
|||
|
||||
| capitan |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 27.2.2005 Где: Москва Репутация: 2 Всего: 13 |
А что тут сложного? Подвопрос вешается на родителя. У родителя считываем уровень и прибавляем 1. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |