Дошли руки до этого поста у меня. Привет.
Короче вопрос ты поднял хороший. Я давно над ним работаю. Большой путь пройден, ряд решений освоен. Некоторые работают, некоторые себя не оправдали.
Верно подметил основной ключевой фактор, - структура баз разных дополнений РАЗНАЯ и универсального шаблона под все не существует. Однако, это не означает, что его не может быть в принципе. Достаточно написать ряд шаблонов под каждое ядро однажды, что бы затем использовать подходящий при выборе дополнения / эмулятора в будущем.
Для этого нужно скомпилить и накатить все ядра (мангос, цмангос, кобальд, тринити и тп) и выявить разницу в структурах баз данных не только всех эмуляторов, но и всех (внимание) дополнений игры (я серьезно, это большая работа).
Перебирать ты их можешь как угодно. Вариантов много:
а) топорно пройтись по массиву констант (for), заранее забитых в конфиге и в верстке (селекты/js)
б) создать в ДБ свою таблицу с реалмами и указанием типа ядра и неймами баз, перебирая (while/foreach) которые, принимать решение о выборе шаблона сценария на уровне конструкции switch case / else if
Селект или таблица или дивы в строку, значения не имеют. Все зависит от твоей фантазии в плане верстки статики.
warcraft.life использует слайдер, который запрашивает инфу по ajax от php сценария, передавая (GET) нужные параметры (переменные), который подгружает константы (данные баз) из конфига. Этот php сценарий, получая значения и обращаясь к конфигу принимает решение об используемом шаблоне сценария запроса и обработки данных (функции, если хотите) в зависимости от структуры/архитектуры выбранной MySQL. Шаблоны заранее прописаны.
Все это ☝ я шаманил на коленке, за 12 часов. По хорошему этот вариант
б) создать в ДБ таблицу с реалмами
более предпочтительный. Что бы добавляя новый сервер в веб-обвязку тупо делать инсерт одной строчки в список реалмов DB и веб-интерфейс дальше уже делал все сам. Обращался к одной (твоей) таблице с серверами
Что-то вроде:
serversDb:
Код:
id | server | version | bnet | reg_hash | realm_name | characters_name | world_name
1 | mangos | 335 | 0 | 1 | warcraft_classic_realmd | name | name
2 | trynity | 83 | 1 | 3 | warcraft_tbc_realmd | name | name
3 | cmangos | 42 | 0 | 1 | warcraft_cataclysm_realmd | name | name
, получал данные о том, с чем имеет дело, какие названия баз (реалм/чарактерс),
какое ядро, как сгенерирован пассворд (на каждом ядре метод генерации соли свой, а на некоторых, более поздних дополнениях, вообще двойная авторизация через bnet), на каком эмуляторе и какое дополнение. Понимал, что это и использовал нужный шаблон (php сценарий) при переборе в цикле.
Ну и конечно надо думать о нагрузке на мускуль и php в частности (мускуль-то хрен с ним, он живучий, а php норм жрет ресурсы на циклы). Не стоит выводить полную стату всех серверов на один лист html. Ну или выводить с таймаутом или с кешем.
Относительно валидации, - она зачем нужна, если твои селекты неизменны? Ну, в смысле не инпуты? Что в них проверять на валидность? Выбрал и выбрал. Другой вопрос, что бы тебе в ajax не запихнули инъекцию или эксплойт. Закрывай использование бек-энд сценариев в обход верстки, напрямую. Что бы кликером / скриптом (зависит от компетенции) не вешали php. Ставь таймауты в js/php. Проверяй и обрабатывай GET переменные на символы и всякое говно.
Красивая картинка (дизайн) не главное. Куда важнее сделать работающий, универсальный шаблон (бэк-энд). Картинку нарисовать и натянуть потом не проблема. Все это не быстрая и кропотливая шляпа, которую я постепенно довожу до ума на примере живого проекта. Жаль свободного времени не так много на это творчество. Так бы уже что-то дельное выкатил.