Я скачал шаблон сайта Bootstrap и пытаюсь заставить работать форму, которая отправляется на мой адрес электронной почты. Это дает сообщение, что все отправлено, когда все комментарии заполнены, но фактическое сообщение не отправлено.
Вот фрагмент HTML из индекса:
<section id="contact">
<div class="container">
<div class="row">
<div class="col-lg-12 text-center">
<h2>Contact Us</h2>
<hr class="star-primary">
</div>
</div>
<div class="row">
<div class="col-lg-8 col-lg-offset-2">
<!-- To configure the contact form email address, go to mail/contact_me.php and update the email address in the PHP file on line 19. -->
<!-- The form should work on most web servers, but if the form is not working you may need to configure your web server differently. -->
<form name="sentMessage" id="contactForm" novalidate>
<div class="row control-group">
<div class="form-group col-xs-12 floating-label-form-group controls">
<label>Name</label>
<input type="text" class="form-control" placeholder="Name" id="name" required data-validation-required-message="Please enter your name.">
<p class="help-block text-danger"></p>
</div>
</div>
<div class="row control-group">
<div class="form-group col-xs-12 floating-label-form-group controls">
<label>Email Address</label>
<input type="email" class="form-control" placeholder="Email Address" id="email" required data-validation-required-message="Please enter your email address.">
<p class="help-block text-danger"></p>
</div>
</div>
<div class="row control-group">
<div class="form-group col-xs-12 floating-label-form-group controls">
<label>Phone Number</label>
<input type="tel" class="form-control" placeholder="Phone Number" id="phone" required data-validation-required-message="Please enter your phone number.">
<p class="help-block text-danger"></p>
</div>
</div>
<div class="row control-group">
<div class="form-group col-xs-12 floating-label-form-group controls">
<label>Message</label>
<textarea rows="5" class="form-control" placeholder="Message" id="message" required data-validation-required-message="Please enter a message."></textarea>
<p class="help-block text-danger"></p>
</div>
</div>
<br>
<div id="success"></div>
<div class="row">
<div class="form-group col-xs-12">
<button type="submit" class="btn btn-success btn-lg" action="public_html/mail/contact_me.php">Send</button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
Вот код из файла PHP:
<?php
// Check for empty fields
if(empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['phone']) ||
empty($_POST['message']) ||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL))
{
echo "No arguments Provided!";
return false;
}
$name = $_POST['name'];
$email_address = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
// Create the email and send the message
$to = '[email protected]'; // Add your email address inbetween the '' replacing
[email protected] - This is where the form will send a message to.
$email_subject = "Website Contact Form: $name";
$email_body = "You have received a new message from your website contact form.\n\n"."Here are the
details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";
$headers = "From: [email protected]\n"; // This is the email address the generated message will
be from. We recommend using something like [email protected].
$headers .= "Reply-To: $email_address";
mail($to,$email_subject,$email_body,$headers);
return true;
?>
Пожалуйста помоги!
заранее спасибо
Ваша форма не имеет метода, так что, скорее всего, она делает $_GET
вместо $_POST
:
<form name="sentMessage" id="contactForm" novalidate method="post" action="public_html/mail/contact_me.php">
У вас нет имен (name=""
) на ваших входах:
<input name="email" type="email" class="form-control" placeholder="Email Address" id="email" required data-validation-required-message="Please enter your email address.">
Кроме того, вы можете разбить ваш скрипт немного лучше:
function Validate()
{
// Check for empty fields
if(empty($_POST['name']) ||
empty($_POST['email']) ||
empty($_POST['phone']) ||
empty($_POST['message']) ||
!filter_var($_POST['email'],FILTER_VALIDATE_EMAIL)) {
return false;
}
else
return true;
}
function SendEmail($to = '[email protected]')
{
if(Validate() == true) {
$name = $_POST['name'];
$email_address = $_POST['email'];
$phone = $_POST['phone'];
$message = $_POST['message'];
// Create the email and send the message
$email_subject = "Website Contact Form: $name";
$email_body = "You have received a new message from your website contact form.\n\n"."Here are the
details:\n\nName: $name\n\nEmail: $email_address\n\nPhone: $phone\n\nMessage:\n$message";
$headers = "From: [email protected]\n";
$headers .= "Reply-To: $email_address";
// Send true on successful send.
// Send false if failed
return (mail($to,$email_subject,$email_body,$headers))? true: false;
}
else
// Invalid inputs
return 'err';
}
// Apply function(s). You will get true, false, or err
$send = SendEmail();
// On return, you can echo any result
if($send == 'err')
echo 'Invalid Fields.';
elseif($send == false)
echo 'An Error Occurred.';
else
echo 'Email Sent Successfully.';
Вы уверены, что он вызывает ваш php файл? Я бы сдвинул action="public_html/mail/contact_me.php
на вашей кнопке к открытию form
тег.
Вы также можете поместить некоторый «отладочный» код в различные точки php-файла, чтобы помочь устранить неполадки.
mail()
функция может быть не включена на вашем хостинг-сервере, например. Вы могли бы положить console.log('About to send email')
прямо перед почтовой линией, и console.log('Mail sent')
сразу после почтовой линии. Это появится в поджигатель например, и поможет вам увидеть, работает ли скрипт правильно.
Вы также сказали, что он утверждал, что он был успешно отправлен, но я не вижу кода, который бы выводил сообщение об успешном завершении. Можете ли вы быть более понятным о том, как вы получаете уведомление о том, что это «успешно»?
Поместите пункт назначения в тег формы.
<form action='contact_me.php'>
<input type='submit'>
Я полагаю, что приведенный выше код верен, и надеюсь, что вы пытаетесь отправить свою форму через POST-запрос javascript (jquery) ajax. если да, вы можете добавить предупреждение / консоль в блок успеха ajax, если вы правильно получаете его в блоке успеха и не получили письмо с указанным идентификатором электронной почты, связанное с вашим почтовым сервером (локальным или живым сервером).
Если вы все еще хотите отправить письмо в Gmail или Yahoo, узнайте у администратора хостинга, могут ли они выяснить, что мешает отправке формы.
Пример запроса AJAX ниже.
$ .Ajax ({
URL: «./mail/contact_me.php»,
тип: «POST»,
данные: {
имя: имя,
телефон: телефон,
электронная почта: электронная почта,
сообщение: сообщение
},
кеш: ложь,
success: function () {
предупреждение ( ‘Успех’);
},
ошибка: функция () {
предупреждение ( ‘Ошибка’);
},
complete: function () {
}
});
Попробуйте сделать это:
<form name="sentMessage" id="contactForm" method='post' action='public_html/mail/contact_me.php' novalidate><form>
Замечания: $_POST['name']
не будет работать, если поля ввода не имеют name='email'