Форма контакта работала нормально, пока я не попытался добавить reCAPTCHA. Мне удалось заставить reCAPTCHA появляться, иметь recaptchalib и mailer.php, который является страницей, отображающей пустую страницу. Есть идеи, что я делаю не так?
Вот mailer.php
<?php
if(isset($_POST['submit'])) {
// check reCAPTCHA information
require_once('recaptchalib.php');
$privatekey = "privatekey";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
// if CAPTCHA is correctly entered!
if ($resp->is_valid) {
// great success!
$myemail = "[email protected]";
/* Check all form inputs using check_input function */
$name = $_POST['inputName'];
$email = $_POST['inputEmail'];
$subject = $_POST['inputSubject'];
$message = $_POST['inputMessage'];
/* Let's prepare the message for the e-mail */
$subject = "Message From LGBT campaign Contact Form";
$message = "
China LGBT Contact Form
Name: $name
Email: $email
Message:
$message
";
/* Send the message using mail() function */
mail($myemail, $subject, $message);
/* Redirect visitor to the thank you page */
header('Location: successPage.html#contact');
} else {
// alert the captcha is not correct
}
}?>
Вот моя HTML-страница, которую я сделал .php-страницей
<div class="marketing">
<div class="intro" id="contact">
<h1>Contact Us</h1>
<p>If you would like to stay informed about our progress or would like to help with the campaign, please fill out this form to send us an email.</p>
<div class="panel-body">
<form name="contactform" id="contactform" action="mailer.php" class="form-horizontal" role="form" method="POST"><div class="form-group">
<label class="col-lg-2 control-label">Name</label>
<div class="col-lg-10">
<input type="text" class="form-control" name="inputName" placeholder="Your Name">
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Email</label>
<div class="col-lg-10">
<input type="email" class="form-control" name="inputEmail" placeholder="Your Email">
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Message</label>
<div class="col-lg-10">
<textarea class="form-control" rows="4" name="inputMessage" placeholder="Your message..."></textarea>
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<p>Prove you are not a spambot</p>
<?php require_once('recaptchalib.php');
$publickey = "publickey";
echo recaptcha_get_html($publickey);
?>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<button type="submit" class="btn btn-primary">Send Message</button>
</div>
</div>
</form>
</div>
</div>
Любая помощь с этим будет очень цениться, ребята.
Огромное спасибо
РЕШЕНИЕ
<form name="contactform" id="contactform" action="mailer.php" class="form-horizontal" role="form" method="post"><div class="form-group">
<label class="col-lg-2 control-label">Name</label>
<div class="col-lg-10">
<input type="text" class="form-control" name="inputName" placeholder="Your Name">
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Email</label>
<div class="col-lg-10">
<input type="email" class="form-control" name="inputEmail" placeholder="Your Email">
</div>
</div>
<div class="form-group">
<label class="col-lg-2 control-label">Message</label>
<div class="col-lg-10">
<textarea class="form-control" rows="4" name="inputMessage" placeholder="Your message..."></textarea>
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<p>Prove you are not a spambot</p>
<?php require_once('recaptchalib.php');
$publickey = "6Le0ff0SAAAAAOCeQiOcGUwQEfXERDyNJ";
echo recaptcha_get_html($publickey);
?>
</div>
</div>
<div class="form-group">
<div class="col-lg-offset-2 col-lg-10">
<input type="submit" class="btn btn-primary" value="Send Message" name="submit">
</div>
</div>
</form>
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
if(isset($_POST['submit'])) {
// check reCAPTCHA information
require_once('recaptchalib.php');
$privatekey = "6Le0ff0SAAAALTDn4IkqNSN5F0AU2Ezhvf";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);
// if CAPTCHA is correctly entered!
if ($resp->is_valid) {
// great success!
$myemail = "[email protected]";/* Check all form inputs using check_input function */
$name = $_POST['inputName'];
$email = $_POST['inputEmail'];
$subject = "Message From LGBT campaign Contact Form";
$message = $_POST['inputMessage'];
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
/* Let's prepare the message for the e-mail */
$message = "
China LGBT Contact Form
Name: $name
Email: $email
Message:
$message
";
/* Send the message using mail() function */
mail($myemail, $subject, $message);
/* Redirect visitor to the thank you page */
header('Location: successPage.html#contact');
} else {
// alert the captcha is not correct
echo "captcha did not match!";
exit;
}
}?>
Измените свою кнопку на это:
<input type="submit" class="btn btn-primary" value="Send Message" name="submit">
POST ищет именованный атрибут с именем submit
,
который основан на вашем условном утверждении, и из-за него внутри ничего не будет выполнено:
if(isset($_POST['submit'])) {...}
У вас тоже нет названный элемент формы, чтобы идти с $subject = $_POST['inputSubject'];
Либо добавить один:
Subject:<input type="text" class="form-control" name="inputSubject" placeholder="Subject">
или просто протестируйте с помощью:
$subject = "Form submitted";
Вы должны убедиться, что все поля заполнены. Если тема оставлена пустой или любой другой, вы не можете получать почту из-за нее, особенно в поле «Электронная почта».
Другая причина может заключаться в том, что у вас нет надлежащих заголовков, включая From:
Посетите веб-сайт PHP.net по почте:
пример From:
Заголовок с сайта:
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
и модифицирование mail($myemail, $subject, $message);
в mail($myemail, $subject, $message, $headers);
Цитируя их:
Замечания:
При отправке почты, почта должна содержать заголовок От. Это можно установить с помощью параметра Additional_headers или по умолчанию в php.ini.
В противном случае появится сообщение об ошибке, подобное предупреждению: mail (): «sendmail_from» не задан в php.ini или отсутствует пользовательский заголовок «From:». Заголовок From также устанавливает Return-Path под Windows.
добавлять Отчет об ошибках в начало вашего файла (ов), который поможет найти ошибки.
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
Примечание: Отчеты об ошибках должны выполняться только на стадии подготовки, а не на производстве.
Если вы получаете пустую страницу, это потому, что что-то не работает и не отображается ошибка. Я бы начал с того, чтобы убедиться, что в вашем скрипте PHP включена функция отчетов об ошибках. Добавьте это к началу mailer.php.
ini_set('display_errors',1);
error_reporting(E_ALL);
Вы также должны добавить какое-то сообщение здесь.
} else {
// alert the captcha is not correct
echo "captcha did not match!";
exit;
}
Также, как уже упоминалось, проверьте ваш журнал ошибок.
Вы можете начать с изменения
<button type="submit" class="btn btn-primary">Send Message</button>
в
<input type="submit" class="btn btn-primary" value="submit">
Это должно отправить вашу форму на mailer.php. С этого момента это должно работать.