WedX - журнал о программировании и компьютерных науках

Хотите повторить Электронная почта отправлена! в определенном div после отправки формы

Я внедряю контактную форму на свой сайт. Когда я нажимаю кнопку «Отправить», он отправляет мне электронное письмо, затем перенаправляет пользователя на domain.com/mail.php и повторяет «Электронное письмо отправлено»! на пустой белой странице. Вместо этого я хочу, чтобы пользователь оставался в index.html и отправил электронное письмо! эхом отозвалось внутри <div class="alert-msg"></div>. Любая помощь приветствуется!

contact.php:

<?php
if(isset( $_POST['fname']))
$name = $_POST['fname'];
if(isset( $_POST['email']))
$email = $_POST['email'];
if(isset( $_POST['subject']))
$subject = $_POST['subject'];
if(isset( $_POST['message']))
$message = $_POST['message'];

$content="Name: $name \n Email: $email \n Subject: $subject \n Message: $message";
$recipient = "[email protected]";
$mailheader = "From: $email \r\n";
mail($recipient, $subject, $content, $mailheader) or die("Error!");
echo "Email sent!";
?>

index.html

<div class="contactcontainer">
  <form action="contact.php" method="POST" id="contact-form">

    <label for="fname">Full Name</label>
    <input type="text" id="fname" name="fname" placeholder="Your name" required>

    <label for="email">E-mail</label>
    <input type="text" id="email" name="email" placeholder="E-mail" required>

    <label for="email">Subject</label>
    <input type="text" id="subject" name="subject" placeholder="Subject" required>

    <label for="subject">Message</label>
    <textarea id="message" name="message" placeholder="Your message" style="height:200px" required></textarea>


    <button class="btn btn-outline-light text-uppercase" onclick="document.getElementById('contact-form').submit();" type="submit" name="submit" id="submit">submit</button>
    <div class="alert-msg"></div>

  </form>
</div>

Страница После нажатия кнопки «Отправить»: Электронное письмо отправлено! на пустой странице с URL

21.09.2020

  • Почему что-то эхо рядом с вашей кнопкой? Поведение, которое вы описываете, - это именно то, что я ожидал, поскольку вы не используете AJAX или что-то еще, что помешало бы изменению страницы. 21.09.2020
  • Что бы вы ожидали вместо этого? 21.09.2020
  • Каково содержание contact.php? Кстати, в вашем фрагменте есть много проблем с безопасностью. Нет проверки, много инъекций. 21.09.2020
  • Я вроде новичок в PHP, так что извините, если это уже немного глупо. Моя цель здесь - удержать пользователя на той же странице index.html и эхо отправить письмо! где-то рядом с кнопкой отправки или в контейнере моей контактной формы. Я попробовал другой рабочий пример, и, похоже, он работал нормально без каких-либо дополнительных усилий. Я был бы рад, если бы вы могли меня провести. 21.09.2020
  • Кажется, работает так, как ожидалось. Когда вы отправляете форму, обзор перенаправляется на страницу action для запуска скрипта. Похоже, вам просто нужно перенаправление в конце. 21.09.2020
  • Итак, я перенаправляю пользователя обратно на index.html после выполнения скрипта и отправки эхо-сообщения! там? Как я могу указать, чтобы он отображался внутри моего элемента alert-msg? 21.09.2020
  • Поместите приведенный выше PHP-скрипт на ту же страницу, что и HTML-форма. См. ответ ниже. 21.09.2020
  • Перво-наперво; функция mail неудобна. Вместо этого вам действительно следует использовать превосходный объект PHPMailer. Это избавит вас от утомительного отслеживания ошибок.... 21.09.2020
  • ответить на ваш вопрос; Вам нужен АЯКС. Пожалуйста, просмотрите обман ниже: 21.09.2020
  • Отвечает ли это на ваш вопрос? Отправка электронной почты в PHP с использованием AJAX 21.09.2020
  • Спасибо за вклад @Martin. У меня нет большого опыта работы с PHP или AJAX, поэтому мне нужно немного больше практики и чтения, чтобы сделать это. Спасибо за тему, посмотрю! 21.09.2020

Ответы:


1

Чтобы предупреждение-msg работало, PHP должен быть выше HTML.

В этом много неправильного, так как у вас нет дезинфекции почтовых данных, что оставляет вас широко открытыми для атак.

Вот несколько советов по PHP;

 <?php
 // You should santize input, examples below;
 // $data = strip_tags($data); - this removes tags like <a>
 // $data = trim($data); - this removes whitespace

 // New code
 $status = ""; // First set the alert-msg to a null/empty value so it's not shown before the form is submitted.

 // Listen for when the submit button is clicked
 if (isset($_POST['submit'])) {
 $name = $_POST['fname'];
 $email = $_POST['email'];
 $subject = $_POST['subject'];
 $message = $_POST['message'];

 // Now we have the post data and it has been sanitized we can check to make sure it isn't null/empty
 if ($name == "" || $email == "" || $subject == "" || $message == "") {

 // If any of these values are empty send the alert that email hasn't been sent
 $status = "Email not sent!";
 
 // If all values have some data, continue...
 } else {
 $content = "Name: $name \n Email: $email \n Subject: $subject \n Message: $message";
 $recipient = "[email protected]";
 $mailheader = "From: $email \r\n";
 mail($recipient, $subject, $content, $mailheader) or die("Error!");

 // Set alert-msg value for success
 $status = "Email sent!";

 }
 }
 ?>

Измените HTML-форму, удалив действие, и добавьте свой PHP-скрипт над HTML-кодом на той же странице. С помощью кнопки отправки удалите часть onclick, поскольку вы используете PHP для прямой отправки формы, и добавьте значение php в div alert-msg;

Новый HTML

 <form method="POST" id="contact-form">
 <button class="btn btn-outline-light text-uppercase" type="submit" name="submit" id="submit">submit</button>
 </form>
 <div class="alert-msg"><?php echo $status; ?></div>

Я опустил остальную часть HTML, который вы разместили, так как все в порядке.

21.09.2020
  • Оригинальный код не использует SQL, так почему же вы добавили в этот код устаревшие и небезопасные функции SQL? preg_replace - гораздо более надежная (хотя и сложная) альтернатива. 21.09.2020
  • Здравствуйте и спасибо за ответ. Я получаю следующий error_log с кодом PHP Notice: Undefined variable: con in /home/e31pb61nfazj/public_html/deniz.world/index.php on line 13 PHP Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in /home/e31pb61nfazj/public_html/deniz.world/index.php on line 13 для строк 13, 14, 15, 16. 21.09.2020
  • @denozk это потому, что вы скопировали и вставили код. Если вы используете PHP, у вас должен быть доступ к базе данных MySQL. $con — это способ доступа к этой базе данных. Я отредактирую ответ. 21.09.2020
  • @Martin, функции php, которые я добавил, вовсе не опасны. Без какой-либо санитарной обработки это небезопасно. Что касается того, чтобы говорить людям игнорировать ответы, это не круто. Принимать ли они совет или нет, зависит от ОП. 21.09.2020
  • @denozk Я отредактировал код, теперь он должен работать с вашей настройкой, но, пожалуйста, санируйте ваши данные! 21.09.2020
  • @SJacks спасибо за ответ и советы. У меня почти нулевой опыт работы с PHP, поэтому мне нужно узнать о нем немного больше. Код работает отлично, только один вопрос: могу ли я каким-либо образом заставить пользователя оставаться в нижнем колонтитуле страницы (где находится форма) после нажатия кнопки «Отправить»? Я предполагаю, что будет использоваться расположение заголовка в разделе #footer? 21.09.2020
  • @SJacks, извините, но поскольку вы не знали, что что-то небезопасно, это не делает его безопасным через прокси. Читайте здесь. Кроме того, strip_tags также является крайне неразумной функцией замены, поскольку она также чревата ошибками. Вам также не нужно удалять теги HTML из электронной почты, отличной от HTML. АКА, используйте preg_replace для удаления и уточнения кавычек 21.09.2020
  • @denozk, вы можете указать идентификатор div и перезагрузить страницу в этот div после отправки формы, но внутри идентификатора div должно быть какое-то содержимое, чтобы экран переместился в это место, однако это очистит текст предупреждения вашего сообщения электронной почты, поскольку страница перезагружается. Если у вас есть нижний колонтитул на странице, вы можете использовать идентификатор нижнего колонтитула. Попробуйте включить это в свой php после статуса успеха перед двумя последними фигурными скобками: echo ‹meta http-equiv='refresh' content='0; URL='mypage#footer'›; #footer — это просто пример, измените его на то, что есть на вашей странице. 21.09.2020
  • Новые материалы

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


    Для любых предложений по сайту: [email protected]