через форму пользователь передаётся данные, которые передаётся в PHP в виде элементов массива $_POST или $_GET
нету смысла форме , если в нее ничего не будет вводится
База данных - где хранить это все добро: файлы / SQL
на HTML - форму сделать по сбору данных
на бекенде, php к примеру, ее обработать и записать в БД
а клиента уведомить, что все ок
можно хардкор метод: Html форма - через php отправить на почту администрутору письмо - тот ручкой напишет в журнал и позвонит клиенту
1. Узнаете максимальный parentId
2. Циклом от нуля до parentId собираете новый массив
-сначала нулевой уровень
- потом уже вложенные в него
3. Выводите новый массив
100 лет уже как JS+AJAX -> php-> SQL и ответ назад ( + кэширование запросов), делаются такие вещи
без новых запросов к базе данных после каждого изменения настроек фильтрации.
чтобы это реализовать вам нужно весь каталог сразу выгружать, если у вас 100 000 позиций , где это хранить ? Каждый раз на страницу выдавать ? Так скорость загрузки страницы будет космос и клиент уйдет к конкуренту.
Если можно искать на клиенте ( + jquery), то можно по такому селектору: $('body > *[name]')
Если надо разгребать на php , вот есть какой то парсер - PHP Simple HTML DOM Parser и по аналогии селектором выше
ID - уникальный на всё страницу. Класс можно использовать сколько душе угодно. У вас был выбор элемент по ID, следовательно JQ ищет первый ID сверху вниз и двигает только. Поэтому, если заменить это все дело на класс, как написано выше, методом draggable будут обрабатываться все элементы с указанным классом.
сделать колонку какую нить - key_Activate (tinyINT), что ключ отдан - 1, не отдан - 0.
И потом
SELECT ... FROM ... WHERE key_Activate = 0 ORDER BY RAND() LIMIT 1