Сначала сделать авторизацию. Когда пользователь авторизуется записать куда-нибудь, что он авторизовался (в интернете есть статьи с простым решением). Также надо будет понять: будет один тест или больше? Если один тест можно не париться). Допустим у нас будет несколько тестов, тогда после авторизации надо сделать редирект на страничку с тестами. Пользователь выбирает тест (ссылка с id на тест). Допустим у нас есть таблица Вопросы, а в ней поля id вопроса, id теста, вопрос, ответ. После выбора теста генерируется форма с вопросами из таблицы вопросы (вытянуть необходимые данные при помощи sql запроса, а далее циклом вывести input, только без ответа :) ). После нажатии закончить тест данные из формы сохраняются в таблице Ответы (id ответ, id вопроса, id пользователя). После сохранения сравниваем ответы между таблицами Вопросы и Ответы, после сравнения результат записываем в таблице Результаты (id пользователя, id теста, сколько процентов, какая оценка).
АХ ДА! при прохождении теста проверьте чтобы пользователь был авторизован))
ПС: это одна из возможных реализациях, не из лучших явно, но для быстрого написания сгодиться. Логика по крайней мере должна быть такой.
ПСС: А еще вопросы бывают разные, например, объемные. это когда один вопрос на всю страницу. тут надо будет выводить только один input