Опять наткнулся на этот баг. Если есть на странице две вложенные формы, то при отправке внешней формы браузер отправляет поля, которые идут до внутренней формы. А остальные поля просто теряются.
Например:
<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>