Опять наткнулся на этот баг. Если есть на странице две вложенные формы, то при отправке внешней формы браузер отправляет поля, которые идут до внутренней формы. А остальные поля просто теряются.
Например:
<form>
<input name="input1">
<input name="input2">
<form>
...
</form>
<input name="input2">
</form>
В этом случае в обработчик формы придут данные из полей input1 и input2. Поле input3 браузер не отправит. И в $_POST его не будет.
Причина этого в том что формы являются отделньыми контейнерами и закрывающийся тег внутренней формы распознается как закрывающийся для внешней.
Исправить это довольно просто — достаточно заключить содержимое внешней формы в дополнительный контейнер. Например в div.
Получится что-то вроде:
<form>
<div>
<input name="input1">
<input name="input2">
<form>
...
</form>
<input name="input2">
</div>
</form>