Генерация web страниц
Вот уж не знаю, как правильно было бы тему обозвать. Суть в следующем:
Допустим, есть веб страница обычного теста с вопросами, точнее, несколько страниц. На одной странице по одному вопросу, несколько вариантов ответов и кнопочки "следующий вопрос", "предыдущий вопрос".
При старте теста пользователь запрашивает первую страницу, отправляет запрос серверу и там уже php пытается вытащить из базы все вопросы для теста, а потом сгенерировать страницы.
Вот что мне не известно:
Куда делать линк на кнопках следующего и предыдущего вопроса? То есть, выбрать из БД не все записи, а только один определённый вопрос, не могу из-за архитектуры БД. Можно было бы сразу достать все вопросы, где-то закэшировать вне БД и брать оттуда.
Из этого второй вопрос: как правильно в php(и его ли силами) сохранять данные, которые могли бы храниться между сеансами вызова интерпретатора?
Можно сразу в начальную страницу запихнуть все вопросы и варианты ответов, а кнопочками только менять значения в текстовых полях и количество элементов. Но это не очень хороший вариант, потому что сгенерировать новую страницу средствами php будет удобнее и проще, чем добавлять новые контролы и удалять старые динамически через JS. По завершению теста отправлять данные на сервер и возвращать новую сгенерированную страницу, но данные теста(предыдущую страницу) хотелось бы оставить, чтобы пользователь мог посмотреть, где он допустил ошибки. Ну и можно эти данные тоже сгенерировать заново и вставить в новую страницу.
Вообще, как правильно строятся подобные системы?
А готовых решений тут как обычно не дают.
Без перезпгрузки страниц.
Что за архетектура, приведите пример, не понятно почему нельзя вытащить из БД определенный запрос. Если все-таки нельзя - смотрите ответ ниже про кеширование.
Все вопросы можно закешировать, например в файлике на сервере в виде PHP массива или любой структуры данных, в свободном формате удобнее всего кешировать функцией serialize
Смотря как будете реализовывать, если посредством сессий то PHP (механизм сессий), если посредством AJAX, то работайте с jQuery.
Почему бы и нет? Смотря что понимать под "сразу в начальную страницу запихнуть все вопросы и варианты ответов". Если их не так много - то это правильный вариант.
Вообще, как правильно строятся подобные системы?
Если кратко, то мне видится такая реализация системы:
- Разработать структуру хранения вопросов и ответов на них в БД для каждого пользователя.
- Разработать страницу - опросник. Которая включает в себя механизм сессий (для хранения текущего вопроса), AJAX подгрузку вопросов (jQuery), хранение ответов пользователя в БД.
- Защита от взлома системы - в данных AJAX нельзя хранить ответы в открытом виде.
Определённый запрос вытащить можно. Но, т.к. БД сетевая(как модно сейчас говорить, графовая), то вытащить нужные вопросы для теста, не пройдя по всем вершинам графа, нет возможности(или она мною пока не найдена). Есть индексы, но мне точно неизвестно, как они работают. По поведению функций можно сделать вывод, что в них помещаются кортежи объект-свойство-объект и поиск можно вести либо по первому объекту, либо по свойству. В худшем случае БД пройдёт по всему индексу, чтобы найти нужные мне вершины(читай вопросы), но это будет равносильно проходу по всему графу, хоть и быстрее, если применяются механизмы хеширования.
Отойдя от конкретно моего случая, допустим, есть возможность выбирать информацию порционно, есть ли какие-либо механизмы, которые позволяли бы получать по нажатию кнопки новую страницу с новой порцией данных? Если да, то как такое работает?
Система будет работать в локальной сети, так что ограничений на объёмы страницы нет. Варианты ответов - просто числа(id вершин с ответами), хотя в дальнейшем планируется ввести несколько вариантов ответов, так что это могут быть практически любые данные. В случае с вопросами - текст, либо изображение, либо видео. Но, опять же, на первых этапах, потом добавятся разные плюшки, так что вопросами могут быть данные любого вида.
Структура вопросов и ответов не может быть привязана к пользователям. Вообще, планируется хранить информацию о сессиях, статистике и пользователях в отдельной БД, но именно для вопросов и ответов структура выглядит в виде графа: корневая нода - тест, на следующем уровне идут вопросы теста, на следующем уровне для каждого вопроса есть варианты ответов. Но тест с вопросами и ответами - это локальный модуль. Тесты могут быть составлены из уже имеющихся тестов.
Вот с механизмом сессий пока не определился. Он сам и является вопросом этого топика.
Определённый запрос вытащить можно. Но, т.к. БД сетевая(как модно сейчас говорить, графовая), то вытащить нужные вопросы для теста, не пройдя по всем вершинам графа, нет возможности(или она мною пока не найдена). Есть индексы, но мне точно неизвестно, как они работают. По поведению функций можно сделать вывод, что в них помещаются кортежи объект-свойство-объект и поиск можно вести либо по первому объекту, либо по свойству. В худшем случае БД пройдёт по всему индексу, чтобы найти нужные мне вершины(читай вопросы), но это будет равносильно проходу по всему графу, хоть и быстрее, если применяются механизмы хеширования.
Отойдя от конкретно моего случая, допустим, есть возможность выбирать информацию порционно, есть ли какие-либо механизмы, которые позволяли бы получать по нажатию кнопки новую страницу с новой порцией данных? Если да, то как такое работает?
до сих пор была реляционная БД и объектная. Автор себе придумал сетевую (графовую). Тоже хорошо. Все остальное - поток сознания. Не всегда знание многих умных слов помогает чтото сформулировать.
По нажатию кнопки получить порцию данных - да это работает. Такой механизм существует.
Система будет работать в локальной сети, так что ограничений на объёмы страницы нет. Варианты ответов - просто числа(id вершин с ответами), хотя в дальнейшем планируется ввести несколько вариантов ответов, так что это могут быть практически любые данные. В случае с вопросами - текст, либо изображение, либо видео. Но, опять же, на первых этапах, потом добавятся разные плюшки, так что вопросами могут быть данные любого вида.
Структура вопросов и ответов не может быть привязана к пользователям. Вообще, планируется хранить информацию о сессиях, статистике и пользователях в отдельной БД, но именно для вопросов и ответов структура выглядит в виде графа: корневая нода - тест, на следующем уровне идут вопросы теста, на следующем уровне для каждого вопроса есть варианты ответов. Но тест с вопросами и ответами - это локальный модуль. Тесты могут быть составлены из уже имеющихся тестов.
Вот с механизмом сессий пока не определился. Он сам и является вопросом этого топика.
ну так флаг в руки и проектируй. Вопрос не понятен - если это - решите за меня, то тогда не хватает некоторых параметров. Например размер предоплаты и сроки.