Вот нормальный поток:
Пользователь загружает страницу с формой на ней. Заполняет это. Представляет это.
Вы можете проверить каждое поле по мере его заполнения (мгновенная обратная связь, что приятно с точки зрения пользователя) или проверить с помощью события onSubmit (в jquery $ ('# formID'). Submit). Вы не разрешаете им отправлять, если он не проходит, возвращайте false из функции submit.
Если у них не включен JS (вы можете попытаться запретить им использовать его без JS, но на самом деле они могут просто использовать curl -d "value1=foo&value2=foo2&value3=foo3" <a href="http://example.org/page/" rel="nofollow">http://example.org/page/</a>
, чтобы обойти вас), вы должны проверить данные на сервере. , тоже. JS недостаточно.
Если он не проходит проверку сервера, вы можете перенаправить их обратно в форму, используя заголовок Location: <a href="http://example.org" rel="nofollow">http://example.org</a>
, или снова отобразить форму в коде на стороне сервера. Если оно прошло, вы можете использовать его (вставить в базу данных, повторить, отправить по электронной почте и т. Д.).
Вы сохраняете данные в своей базе данных и добавляете их в $ _SESSION. Вы отображаете только что введенные данные вместе с кнопкой «Загрузить PDF» или чем-то подобным.
Они нажимают «Скачать PDF».
У вас есть вся необходимая информация и PDF. У вас нет ничего для проверки, но вам нужно использовать информацию $ _SESSION для создания PDF. Вы должны проверить $ _SESSION, чтобы убедиться, что они имеют действительные данные с предыдущих страниц, иначе кто-то может имитировать сообщение на странице и генерировать PDF (хотя, возможно, пустой). Я обычно избегаю использовать данные из $ _SESSION как что-либо, кроме информации о состоянии - я напишу в БД о данных поста (после очистки), но если они находятся в $ _SESSION, то обычно это просто материал, который говорит мне, кто они и хранит другие информация о конфигурации и т. д. В вашем случае я бы написал в БД на первом этапе и теперь использовал бы некоторый идентификатор из $ _SESSION, чтобы извлечь эту запись и создать PDF для ее отправки.
Я думаю, что все ваши проверки могут быть легко выполнены на первом этапе, а затем вы разделяете шаг 2 на доставку, основываясь на действительности первого шага.