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]   

> Без описания
Angel_D13
Отправлено: 12 Сентября, 2018 - 22:01:39
Post Id


Новичок


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


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




Добрый день. Подскажите, как лучше делать. Есть две таблицы, в одной вопросы, во второй ответы. Я создаю страницу, на которой выпадает первый вопрос (к примеру - ну что, приступаем к работе?), и несколько вариантов ответов (вывожу как кнопки). Все это я делаю в классе. Как построить вывод, чтобы по нажатию кнопки, у меня менялся вопрос и, соответственно и ответы?
В вариантах ответов, у меня хранится информация, какой id следующего вопроса. Но можно ли метод вызывать внутри себя?
 
 Top
miketomlin
Отправлено: 13 Сентября, 2018 - 10:41:29
Post Id


Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016  


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




Angel_D13 пишет:
В вариантах ответов, у меня хранится информация, какой id следующего вопроса.
А что след. вопрос связан с ответом на предыдущий?

id след. вопроса можно хранить в текущем вопросе. Или вообще не хранить, а, например, использовать сортировку и выбор вопросов по порядковому номеру. Кстати, если вопросы не перемешиваются, можно номер хранить явно прямо в вопросе и даже заменить им id, а если тестов много, сделайте групповой ключ из номера/id теста и номера вопроса.

Ни о каком циклическом вызове тут речи не идет. Каждый вопрос – это отдельная страница по адресу вроде /question/тут_номер_или_id_вопро са – используйте код повторно с соотв. входным параметром.
 
 Top
Angel_D13
Отправлено: 13 Сентября, 2018 - 15:41:29
Post Id


Новичок


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


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




Таблицы у меня такого плана:
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. * Создаем таблицу la_question с вопросами*/
  3. CREATE TABLE IF NOT EXISTS la_question (
  4.         id INT AUTO_INCREMENT NOT NULL,
  5.         question VARCHAR(1000), /* Вопрос */
  6.         meta VARCHAR(100), /* Служебная информация */
  7.         PRIMARY KEY (id)
  8. ) ENGINE=InnoDB CHARACTER SET=UTF8;
  9.  
  10. /* Создаем таблицу la_answer с вариантами ответов*/
  11. CREATE TABLE IF NOT EXISTS la_answer (
  12.         id INT AUTO_INCREMENT NOT NULL,
  13.         id_question INT NOT NULL, /* Ссылка на таблицу la_question "один вопрос - много ответов */
  14.         id_next_question INT, /* ссылка куда ведет тот или иной вариант ответа в la_question*/
  15.         answer VARCHAR(1000), /* Ответ */
  16.         meta VARCHAR(100), /* Служебная информация */
  17.         PRIMARY KEY (id),
  18.         FOREIGN KEY (id_question) REFERENCES la_question(id), /* Связь вопрос-ответ*/
  19.         FOREIGN KEY (id_next_question) REFERENCES la_question(id) /* Связь ответ-следующийвопрос*/
  20. ) ENGINE=InnoDB CHARACTER SET=UTF8;
  21.  

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

А вот про отдельную страницу я не понял. Мне нужно веб приложение, а не сайт, у меня всего одна страница, в теории. Потом может расширю, но сейчас суть в том, чтобы сделать все на одной странице. Неужели такая проблема? Почему по обработке кнопки я не могу перерисовать всю форму?
 
 Top
miketomlin
Отправлено: 13 Сентября, 2018 - 23:17:19
Post Id


Частый гость


Покинул форум
Сообщений всего: 129
Дата рег-ции: Июль 2016  


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




Даже если у вас «одностраничное» приложение, лучше использовать разные адреса для получения отдельных вопросов с сервера. На это заточено подавляющее большинство каркасов Web-приложений. В чем именно может быть преимущество такого подхода, я писал на днях тут.
(Добавление)
Форум съедает якорь. См. оригинальную ссылку в посте.
(Добавление)
Можете запустить консоль разработчика в браузере и посмотреть пример g09.ru /products/item-1 – идентификатор при AJAX-запросе также передается в адресе, а не в POST-параметре, что позволяет мне использовать автоматическую выборку из БД соотв. записи, не тратя время на ручную обработку входного параметра и выборку записи из БД. Кроме того, всю автоматическую работу выполняет один и тот же код для по сути разных действий, причем этот код работает для всего приложения, т.е. повторное использование кода в рамках одного приложения колоссальное, потому что разных конечных действий может быть огромное кол-во!
(Добавление)
P.S. Конечно подобное можно сделать и для POST-параметров, но, повторяюсь, для Web-приложений это значительно более редкий случай. Такое обычно делается на уровне отдельного модуля, а не приложения в целом.

(Отредактировано автором: 13 Сентября, 2018 - 23:44:30)

 
 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