- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Коллеги, такой вопрос. Делаю форму обратной связи на лендинге. Использую язык РНР.
Вот такой код:
Вопрос: когда посетитель заполняет форму, нажимает кнопку "отправить", получается форма передаёт управление указанному выше РНР-скрипту (обработчику формы). Однако, вопрос в том, что указанный РНР-скрипт с помощью соответствующей функции mail() отправляет введённую в форму информацию владельцу сайта на его личную электронную почту. При этом, в конце работы скрипта форма обновляется и мне выводит именно новую страницу на экран браузера "send.php". А мне бы хотелось, чтобы страница оставалась прежней, то есть той, с которой эта форма и была отправлена...
Извините, если немного запутанно пояснил, но суть вот в чём: нормально ли такое поведение скрипта-обработчика формы обратной связи, когда в конце своей работы этот скрипт возвращает сам себя на вывод в браузер? Или это у меня какой-то косяк в самом скрипте?
---------- Добавлено 09.02.2018 в 08:25 ----------
Иными словами, страница обновляется и показана пустая страница обработчика "send.php". А мне бы хотелось, чтобы страница оставалась прежней, то есть, именно та, с которой и была заполнена эта форма. Где-то таким вот образом.
редирект обратно
ajax
фрейм
Вот, кстати говоря, открыл сайт-справочник по CSS от Влада Мержевича. Вот что там написано по поводу атрибута "action" у тега "form":
Иными словами, ключевая фраза тут "...после выполнения обработчиком действий по работе с данными формы он возвращает новый HTML-документ..."
То есть, видимо, я не ошибся всё-таки в том, что это поведение РНР-скрипта по умолчанию - это именно возвращать новый HTML-документ. В моём случае этот документ является пустым, поскольку кроме самого РНР-скрипта (обработчика формы), в этом документе более ничего нет. Вот он после отправки формы и возвращается мне в браузер, тем самым сайт пропадает и вместо него белый фон и всё, поскольку РНР-скрипт не виден в браузере... Вот таким образом...
---------- Добавлено 09.02.2018 в 10:00 ----------
Кстати говоря, по поводу редирека обратно, как было написано коллегой выше. Я так думаю, в РНР-скрипте в самом конце кода скрипта можно прописать вывод редиректа через заголовок такого типа, сразу послу функции отправки почты:
mail("admin@mysite.com", "Новый заказ", $message, $headers);
header("Location: http://www.mysite.com/form.php");
Вот где-то таким образом. Правильно?
---------- Добавлено 09.02.2018 в 10:15 ----------
Коллеги, мысль проскользнула в голове по поводу этой ситуации!
А может, мне пойти другим путём:
То есть, я просто инклудю этот внешний скрипт на странице формы, до самой формы, чтобы он успел подгрузиться. После этого в атрибуте "action" формы я оставляю поле пустым, чтобы форма вызвала сама себя. Таким образом, поскольку сайт у меня на РНР (файл "form.php"), страничка запускается, интерпретатор РНР проходит по странице, видит перед формой подключение внешнего РНР-скрипта, вставляет этот скрипт на страницу и уже потом считывает HTML-код самой формы.
Затем, посетитель сайта заполняет эту форму, нажимает "Отправить", - поскольку атрибут "action" пустой, то страница вызывает сама себя (перезагружается), интерпретатор инклудит внешний РНР-скрипт до начала кода самой формы и, соответственно, отправляет данные заполненной формы на указанную почту владельцу сайта.
Я всё попробовал, как описал выше, всё отлично отрабатывает.
Как думаете, оставить такой вариант? Или всё-же нужно прописать (заполнить) атрибут "action"? Просто меня несколько смущает тот момент, что он у меня вообще пустой при таком раскладе. Может, хоть относительный адрес самой формы туда прописать (то есть, в форме ссылка на саму форму). Исключительно для того, чтобы этот атрибут не был пустым.
Простите за такое количество текста, просто пытаюсь разобраться с данным вопросом.
Вариант с ajax чем не устраивает ?
form.php
handler.php
На форму вешаешь событие с e.preventDefault() и парсишь строки, отправляя далее полученные значения post/get запросом на handler.php, в котором ты и будешь работать с ними.
Вариант с ajax чем не устраивает ?
Подозреваю, что для ТС (который плавает в таких простых вещах как редирект и get/post) Аякс и прочий джейсон, будет языком планеты Нибиру.
...
хотя, имхо, аякс был бы просто идеальным решением этой проблемы
Как думаете, оставить такой вариант? Или всё-же нужно прописать (заполнить) атрибут "action"?
Оставляйте так. Это абсолютно нормально. Пустой action отправляет данные на этот же адрес. Можно ещё разделить GET и POST, поставив
if ($_SERVER['REQUEST_METHOD'] == 'POST') {// Обработка формы
}
А здесь сама форма.
Оставляйте так. Это абсолютно нормально. Пустой action отправляет данные на этот же адрес. Можно ещё разделить GET и POST, поставив
Спасибо огромное за ваш комментарий, по сути и без издёвок, как порой бывает. Отдельно спасибо за мысль разделить GET и POST, действительно отличная идея, нужно будет поразмыслить...
Тут вверху говорили, что для меня Ajax - это как полёт на планету Нибиру. Ну чтож, спасибо, хоть дальше меня не "послали" :)
---------- Добавлено 09.02.2018 в 15:35 ----------
Кстати говоря, я разделю GET и POST в самом РНР-обработчике формы, который затем проинклудю в коде перед самой формой, вот таким примерно образом.
Далее, подключаю вышеуказанный файл-обработчик формы к основной странице сайта:
При этом атрибут "action" у формы оставляю полностью пустым, тем самым форма вызывает сама себя. Хотя, по правде сказать, на этот случай я уже встречал такое вот решение, чтобы атрибут "action" не оставлять пустым, а скажем так, сделать более элегантное решение:
Но по своей сути - это одно и то-же, потому наверное просто оставлю атрибут "action" пустым и не буду переживать по данному вопросу...
2 ТС
AJAX решение
JS
Серверная часть
выдача ответа
silicoid
Спасибо вам большое, буду далее разбираться.
PS. Всем ответившим - большая благодарность!
https://habrahabr.ru/sandbox/93363/ - просмотрите, готовое простое решение. С объяснениями и комментариями