Разумных вариантов миллиарды. А идиотских еще больше. Это как спросить, как лучше сделать автомобиль? Если бы был ответ на это вопрос, то была бы одна марка и одна модель.
Я бы советовал сделать описание вопросов на JSON, загружать эти данные со страницей или отдельным запросом, а потом рендерить на клиенте HTML из данных.
[
{ question: "Как Вас зовут?", type: "input" },
{ question: "Существует ли истина?", type: "select", answers: ["да", "нет"] },
{ question: "Как возможна справедливось?", type: "select", answers: ["легко", "трудно", "ни как"] }
]
Еще посмотрите React, чтобы узнать как нужно и Angular, чтобы узнать как не нужно, поколупайте разные клиентские шаблонизаторы. Нужно набраться опыта, чтобы спроектировать это лучьше других.