Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Генерация web страниц

414
22 ноября 2012 года
CassandraDied
763 / / 24.05.2012
Хай.
Вот уж не знаю, как правильно было бы тему обозвать. Суть в следующем:
Допустим, есть веб страница обычного теста с вопросами, точнее, несколько страниц. На одной странице по одному вопросу, несколько вариантов ответов и кнопочки "следующий вопрос", "предыдущий вопрос".
При старте теста пользователь запрашивает первую страницу, отправляет запрос серверу и там уже php пытается вытащить из базы все вопросы для теста, а потом сгенерировать страницы.
Вот что мне не известно:
Куда делать линк на кнопках следующего и предыдущего вопроса? То есть, выбрать из БД не все записи, а только один определённый вопрос, не могу из-за архитектуры БД. Можно было бы сразу достать все вопросы, где-то закэшировать вне БД и брать оттуда.
Из этого второй вопрос: как правильно в php(и его ли силами) сохранять данные, которые могли бы храниться между сеансами вызова интерпретатора?
Можно сразу в начальную страницу запихнуть все вопросы и варианты ответов, а кнопочками только менять значения в текстовых полях и количество элементов. Но это не очень хороший вариант, потому что сгенерировать новую страницу средствами php будет удобнее и проще, чем добавлять новые контролы и удалять старые динамически через JS. По завершению теста отправлять данные на сервер и возвращать новую сгенерированную страницу, но данные теста(предыдущую страницу) хотелось бы оставить, чтобы пользователь мог посмотреть, где он допустил ошибки. Ну и можно эти данные тоже сгенерировать заново и вставить в новую страницу.
Вообще, как правильно строятся подобные системы?
8
23 ноября 2012 года
mfender
3.5K / / 15.06.2005
Собственно, ответ в вопросе заключён.
А готовых решений тут как обычно не дают.
8
23 ноября 2012 года
mfender
3.5K / / 15.06.2005
Очень просто делается всё это с помощью ajax'а
Без перезпгрузки страниц.
414
23 ноября 2012 года
CassandraDied
763 / / 24.05.2012
Если использовать ajax, данные из БД нужно запрашивать каждый раз при обращении?
87K
26 ноября 2012 года
Alexey Timofeev
4 / / 26.11.2012
Цитата:
Куда делать линк на кнопках следующего и предыдущего вопроса? То есть, выбрать из БД не все записи, а только один определённый вопрос, не могу из-за архитектуры БД.


Что за архетектура, приведите пример, не понятно почему нельзя вытащить из БД определенный запрос. Если все-таки нельзя - смотрите ответ ниже про кеширование.

Цитата:
Можно было бы сразу достать все вопросы, где-то закэшировать вне БД и брать оттуда.


Все вопросы можно закешировать, например в файлике на сервере в виде PHP массива или любой структуры данных, в свободном формате удобнее всего кешировать функцией serialize

Цитата:
Из этого второй вопрос: как правильно в php(и его ли силами) сохранять данные, которые могли бы храниться между сеансами вызова интерпретатора?


Смотря как будете реализовывать, если посредством сессий то PHP (механизм сессий), если посредством AJAX, то работайте с jQuery.

Цитата:
Можно сразу в начальную страницу запихнуть все вопросы и варианты ответов, а кнопочками только менять значения в текстовых полях и количество элементов. Но это не очень хороший вариант, потому что сгенерировать новую страницу средствами php будет удобнее и проще, чем добавлять новые контролы и удалять старые динамически через JS.


Почему бы и нет? Смотря что понимать под "сразу в начальную страницу запихнуть все вопросы и варианты ответов". Если их не так много - то это правильный вариант.

Цитата:
По завершению теста отправлять данные на сервер и возвращать новую сгенерированную страницу, но данные теста(предыдущую страницу) хотелось бы оставить, чтобы пользователь мог посмотреть, где он допустил ошибки. Ну и можно эти данные тоже сгенерировать заново и вставить в новую страницу.
Вообще, как правильно строятся подобные системы?


Если кратко, то мне видится такая реализация системы:

  1. Разработать структуру хранения вопросов и ответов на них в БД для каждого пользователя.
  2. Разработать страницу - опросник. Которая включает в себя механизм сессий (для хранения текущего вопроса), AJAX подгрузку вопросов (jQuery), хранение ответов пользователя в БД.
  3. Защита от взлома системы - в данных AJAX нельзя хранить ответы в открытом виде.
414
26 ноября 2012 года
CassandraDied
763 / / 24.05.2012
Цитата:
Что за архетектура, приведите пример, не понятно почему нельзя вытащить из БД определенный запрос. Если все-таки нельзя - смотрите ответ ниже про кеширование.


Определённый запрос вытащить можно. Но, т.к. БД сетевая(как модно сейчас говорить, графовая), то вытащить нужные вопросы для теста, не пройдя по всем вершинам графа, нет возможности(или она мною пока не найдена). Есть индексы, но мне точно неизвестно, как они работают. По поведению функций можно сделать вывод, что в них помещаются кортежи объект-свойство-объект и поиск можно вести либо по первому объекту, либо по свойству. В худшем случае БД пройдёт по всему индексу, чтобы найти нужные мне вершины(читай вопросы), но это будет равносильно проходу по всему графу, хоть и быстрее, если применяются механизмы хеширования.
Отойдя от конкретно моего случая, допустим, есть возможность выбирать информацию порционно, есть ли какие-либо механизмы, которые позволяли бы получать по нажатию кнопки новую страницу с новой порцией данных? Если да, то как такое работает?

Цитата:
Почему бы и нет? Смотря что понимать под "сразу в начальную страницу запихнуть все вопросы и варианты ответов". Если их не так много - то это правильный вариант.


Система будет работать в локальной сети, так что ограничений на объёмы страницы нет. Варианты ответов - просто числа(id вершин с ответами), хотя в дальнейшем планируется ввести несколько вариантов ответов, так что это могут быть практически любые данные. В случае с вопросами - текст, либо изображение, либо видео. Но, опять же, на первых этапах, потом добавятся разные плюшки, так что вопросами могут быть данные любого вида.
Структура вопросов и ответов не может быть привязана к пользователям. Вообще, планируется хранить информацию о сессиях, статистике и пользователях в отдельной БД, но именно для вопросов и ответов структура выглядит в виде графа: корневая нода - тест, на следующем уровне идут вопросы теста, на следующем уровне для каждого вопроса есть варианты ответов. Но тест с вопросами и ответами - это локальный модуль. Тесты могут быть составлены из уже имеющихся тестов.
Вот с механизмом сессий пока не определился. Он сам и является вопросом этого топика.

1
27 ноября 2012 года
kot_
7.3K / / 20.01.2000
Цитата: CassandraDied

Определённый запрос вытащить можно. Но, т.к. БД сетевая(как модно сейчас говорить, графовая), то вытащить нужные вопросы для теста, не пройдя по всем вершинам графа, нет возможности(или она мною пока не найдена). Есть индексы, но мне точно неизвестно, как они работают. По поведению функций можно сделать вывод, что в них помещаются кортежи объект-свойство-объект и поиск можно вести либо по первому объекту, либо по свойству. В худшем случае БД пройдёт по всему индексу, чтобы найти нужные мне вершины(читай вопросы), но это будет равносильно проходу по всему графу, хоть и быстрее, если применяются механизмы хеширования.
Отойдя от конкретно моего случая, допустим, есть возможность выбирать информацию порционно, есть ли какие-либо механизмы, которые позволяли бы получать по нажатию кнопки новую страницу с новой порцией данных? Если да, то как такое работает?


до сих пор была реляционная БД и объектная. Автор себе придумал сетевую (графовую). Тоже хорошо. Все остальное - поток сознания. Не всегда знание многих умных слов помогает чтото сформулировать.
По нажатию кнопки получить порцию данных - да это работает. Такой механизм существует.

Цитата: CassandraDied

Система будет работать в локальной сети, так что ограничений на объёмы страницы нет. Варианты ответов - просто числа(id вершин с ответами), хотя в дальнейшем планируется ввести несколько вариантов ответов, так что это могут быть практически любые данные. В случае с вопросами - текст, либо изображение, либо видео. Но, опять же, на первых этапах, потом добавятся разные плюшки, так что вопросами могут быть данные любого вида.
Структура вопросов и ответов не может быть привязана к пользователям. Вообще, планируется хранить информацию о сессиях, статистике и пользователях в отдельной БД, но именно для вопросов и ответов структура выглядит в виде графа: корневая нода - тест, на следующем уровне идут вопросы теста, на следующем уровне для каждого вопроса есть варианты ответов. Но тест с вопросами и ответами - это локальный модуль. Тесты могут быть составлены из уже имеющихся тестов.
Вот с механизмом сессий пока не определился. Он сам и является вопросом этого топика.


ну так флаг в руки и проектируй. Вопрос не понятен - если это - решите за меня, то тогда не хватает некоторых параметров. Например размер предоплаты и сроки.

414
27 ноября 2012 года
CassandraDied
763 / / 24.05.2012
Цитата: kot_

до сих пор была реляционная БД и объектная. Автор себе придумал сетевую (графовую).

Клац.
Не-не-не, за меня ничего решать не нужно. Примерный план есть, а остальное додумаю в момент реализации. Так, проверял некоторые предположения.

1
27 ноября 2012 года
kot_
7.3K / / 20.01.2000
Есть некоторая разница всеж между сетевой МОДЕЛЬЮ ДАННЫХ и БАЗОЙ ДАННЫХ :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог