Это даже не совет, это мое видение организации. Я бы сделал на манер журнала с листами. Пусть журнал - сама форма, страницы - поля формы. Работа формы обслуживается аяксом. В приведенном вами примере три группы, но их может быть больше. А сколько участников? Человек 20, 40? Поэтому я бы сделал одну форму и одну доп. таблицу в базе. Смотрите, как работает: вы открываете страницу, у вас только одна форма. Начинаете формировать группу, выбираете через select "лидеры", "сопровождающие", "участники" и т.д., эти данные могут быть заранее заданы в админке. Далее заполняете стандартные для всех поля, например ФИО, можете добавить доп. поля (пол, наличие собаки), и нажимаете добавить. Происходит аякс-запрос. Данные уходят в таблицу временных данных в базу, форма обновляется. Вы видите некую информацию, например "Участники: 1 чел", и чистые поля формы. Добавляете таким же образом следующего. Как только будет сформирована группа, нажимаете "Зарегистрировать" к примеру. И данные из временной таблицы переносятся в таблицу групп. Можно писать и не во временную, а сразу в основную, добавив, к примеру, какой то идентификатор, что бы знать, что группа не сформирована/сформирована. Как то так... По аналогии с журналом вы заполняете его страницы, а потом ложите журнал в шкаф.
По поводу организации таблиц в БД: вам потребуется таблица групп, таблица ролей ("лидеры", "сопровождающие", "участники"), таблица участников. Участники имеют роли и принадлежат группе. Группа имеет название или просто номер (тот же id).
Приведенный вами пример хорош, но когда вы его начнете заполнять, получится огромная форма с большим объемом отправляемых данных. А если ошибка? Забили человек 40, а потом сбой, и сидите забиваете по новому...
ИМХО
