На одном сайте нужно сделать раздел психологических тестов. Делать для каждого теста отдельный файл очень не хочется, поэтому всё будет храниться в базе данных. Это просто и удобно.
Тесты бывают с простым ключом: это когда каждому ответу соответствует определенный балл. Все баллы суммируются, и на основе этой суммы выдается результат. Для такого рода тестов не требуется отдельный php-обработчик. Он для всех один. Суть работы проста до безобразия. На основе суммы баллов в базе ищется соответствующий результат. Таблица примерно такая:
test_id | min_score | max_score | result
----------------------------------------------------------
1 | 0 | 3 | Результат 1.1
1 | 4 | 6 | Результат 1.2
1 | 7 | 9 | Результат 1.3
2 | 0 | 5 | Результат 2.1
2 | 6 | 9 | Результат 2.2
Таким образом, если сумма баллов, например, 5 и test_id = 1, то будет выдан "Результат 1.2"
Но бывают тесты со сложным ключом. Простым суммированием баллов там не обойтись. Например, что-то типа этого:
если на вопрос 1 был дан ответ А, то увеличить сумму баллов на 5.
если на вопрос 2 был дан ответ С, то уменьшить сумму баллов на 10.
если на вопрос 3 был дан ответ А и на вопрос 8 был дан ответ В, то результат теста недостоверен
и т.д.
В таком случае без php-обработчика не обойтись. Хранить для каждой теста свой обработчик в отдельном файле, это почти то же самое, что делать для каждого теста отдельный файл - не комильфо! Представьте, что через 2-3 года там будет 10000 тестов, это же файловый ужас!!!
Можно хранить php-обработчик в базе данных, но это значит использовать eval. А везде где только можно пишут, что использовать eval крайне не желательно. Что же делать? Возможно, Вы решали подобную задачу? Если да, то как Вы поступили? Если нет, то какие есть идеи по этому поводу? Насколько плох eval? Были ли у Вас проблемы при использовании этой функции в реальном проекте?