Форма электронной почты PHP с перенаправлением

#php #email

#php #Адрес электронной почты

Вопрос:

Сначала позвольте мне начать с того, что я не так много знаю о php и html. Я хотел бы создать форму php с перенаправлением на домашнюю страницу. Каждый раз, когда я заполняю контактную форму, она не отправляет электронное письмо и ничего не делает на странице.
Вот html:

 <form action="contact-form.php" method="post" class="contact-form" id="contact-form">
<fieldset class="form-rows row">
    <div class="form-row column medium-6">
        <label for="contact-name">Your name</label>
        <input type="text" name="name" id="contact-name" placeholder="e.g. John Smith"> </div>
    <div class="form-row column medium-6">
        <label for="contact-email">Email address</label>
        <input type="email" name="email" id="contact-email" placeholder="e.g. john.smith@abc.com"> </div>
    <div class="form-row column medium-12 half">
        <label for="contact-phone">Phone number
            <br><small>We promise we will only use your phone number to contact you regarding this message.</small></label>
        <input type="tel" name="phone" id="contact-phone" class="half" placeholder="e.g. 123 456 7890">
    </div>
</fieldset>
<fieldset class="for-rows row">
    <div class="form-row column medium-12">
        <label for="contact-subject">Message subject</label>
        <select name="subject" id="contact-subject">
            <option value="">Please select one</option>
            <option value="1">General enquiry</option>
            <option value="2">I'd like to say thank you!</option>
            <option value="2">Something wasn't right with my order!</option>
        </select>
    </div>
</fieldset>
<fieldset class="form-rows row">
    <div class="form-row column">
        <label for="contact-message">Your message</label>
        <textarea name="message" id="contact-message" rows="8" placeholder="Enter message here amp;hellip;"></textarea>
    </div>
    <div class="form-row column">
        <input type="checkbox" name="newsletter" id="contact-newsletter" placeholder="">
        <label for="contact-newsletter">I would like to receive information about news, promotions, customer surveys, competitions, exclusive offers, events.</label>
    </div>
    <div class="form-row form-button column">
        <button type="submit" class="button-orange">Send Message</button>
    </div>
    <div class="column">
        <h3>Your information</h3>
            <p>We will use your information for dealing with your request and, if you agree, to contact you with information about news, promotions, customer surveys, competitions, exclusive offers, events and other information we think may be of interest to you. We will not share your information for marketing purposes with any third party.</p>
    </div>
</fieldset>
</form>
  

И PHP:

 <?php
$field_name = $_POST['name'];
$field_email = $_POST['email'];
$field_phone = $_POST['phone'];
$field_subject = $_POST['subject'];
$field_message = $_POST['message'];

$mail_to = 'email@example.com';
 $subject = $field_subject;

$body_message = 'From: '.$field_name."n";
$body_message .= 'E-mail: '.$field_email."n";
$body_message .= 'Phone: '.$field_phone."n";
$body_message .= 'Message: '.$field_message;

$headers = 'From: '.$field_email."rn";
 $headers .= 'Reply-To: '.$field_email."rn";

 $mail_status = mail($mail_to, $subject, $body_message, $headers);

if ($mail_status) { ?>
<script language="javascript" type="text/javascript">
    window.location = 'index.html';
</script>
<?php
}
else { ?>
<script language="javascript" type="text/javascript">
    window.location = 'contact.html';
</script>
<?php
}?>
  

Ответ №1:

ваше перенаправление бессмысленно, вы должны использовать заголовок php следующим образом:

 if ($mail_status) { 
    header('Location: index.html');
}
else {
    header('Location: contact.html');
}
  

функция почты выглядит нормально, я бы рекомендовал вам использовать phpmailer, потому что для правильного приема писем нужны правильные заголовки.

Вы могли бы выполнить var_dump($_POST); die(); чтобы проверить, правильно ли вы получаете _POST.

также mail() = true не означает, что он достиг своего адресата

Ваша проблема может быть больше сервера, чем php

Вы делаете это на локальном сервере? Это не сработает, используйте тестовый почтовый сервер для целей отладки.

Вы делаете это на хосте? Проверьте разрешения php.ini, попробуйте с помощью простого скрипта mail("someone@example.com","My subject",$msg); проверить ответ и действительно ли он доставляет.

Комментарии:

1. мы не использовали тестовый почтовый сервер и загружали веб-сайт в Godaddy, чтобы посмотреть, работает ли он. Где мне найти разрешения php.ini? Мы очень новички в этом.

2. сервер testmail предназначен только для локального. Поскольку вы не на локальном, попробуйте выполнить простой PHP-скрипт, назовите его ‘testmail.php ‘, и выполните var_dump(mail(«someone@example.com «,»Моя тема»,$ msg)); это ложь? у вас нет разрешений, это правда? вы должны получить электронное письмо, если вы этого не сделаете, используйте phpmailer

3. Я снова загрузил веб-сайт и нажал отправить, и вот что я получил: site.js:2254 Uncaught Ошибка типа: не удается прочитать свойство ‘captcha’ неопределенного (анонимная функция) @ site.js:2254c @ libs.js:1534add @ libs.js: 1549 (анонимная функция) @ site.js:2253dispatch @ libs.js:1901g.handle @ libs.js:1853

4. Что-то действительно не так со всеми вещами, которые вы, ребята, копируете и вставляете, потому что в форме, которую вы показываете, нет captcha.

5. я проверил java script и нашел это: ‘ ail(function(t) { if (t.responseJSON.captcha) e(o, !1, «Пожалуйста, отметьте ниже, чтобы подтвердить, что вы не робот!»); else { var i = t.responseJSON ? t.responseJSON.подробности.ошибки: «Извините, что-то пошло не так. Пожалуйста, попробуйте еще раз.»; e (o, i) ‘