Сообщение от xlebosolniy
|
сделал вывод, что header('location... должен быть в самом вверху, а если установить его сверху и прописать exit;, то получается что дальше выполняться код не будет и сообщение не сгенерируется?
|
Не обязательно в самом верху ведь может потребоваться передача заголовка и по условию в коде, но обязательно передача его должна быть до любого вывода в браузер.
Что касается сообщений. JS код показанный, это просто вывод панели сообщений. А форма отправляется естественным образом, то есть пользователь будет направлен на другую страницу, если action формы не является адресом текущей страницы.
В момент отправки формы нельзя тоже выдать сообщение, хотя отправку формы можно и задержать на время достаточное для прочтения сообщения. Просто на этот момент еще не известно примет ли сервер форму.
Заставить клиента показать сообщение, что форма принята, сервером можно, но так как это не асинхронная отправка формы, то это будет перенаправление пользователя, пусть даже на эту же страницу. Но в этом случае надо:
- запомнить данные формы
- обеспечить задержку перенаправления после прочтения пользователем сообщения (это не сложно сделать перенапраяляя через мета тег)
- после перенаправления обработать форму
Но ведь данные формы еще надо и проверить, а не так как у вас, и если будут ошибки ввода, это значит надо возвращать форму пользователю и с ошибками.
И так пока не будет ошибок. После этого отправить почту, опять куда-то перенаправить и выдать сообщение последнее.
Но как и кто должен определить текст сообщений если сервер просто заставляет клиента через хеш открывать панель?
Неужели так важно при получении формы выдать что она получена, чтобы столько скакать по страницам? Отправляйте форму асинхронным запросом, тогда и ошибки заполнения, и что форма принята, все это будет без перезагрузки страницы, и уже только после отправки почты одно перенаправление (но клиентом) с выдачей "ждите...".
И почитайте о формировании почтовых отправлений, такого - "From:admin", "Reply-To: Заявка", не может быть.