валидация — скрипт контактной формы PHP не отправляет электронные письма

Я не очень хорошо разбираюсь в php, и мой друг помог мне с этим скриптом php. Но это не похоже на отправку писем на нужный адрес. Подскажите, пожалуйста, в чем может быть проблема с этим скриптом?

Я очень ценю это. Спасибо

    <?php
$error = array();

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit') ) {
if(!empty($_POST['name'])) {
$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
} else {
$error[] = 'Please enter your name.';
}

if(!empty($_POST['email'])) {
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
} else {
$error[] = 'Please enter a correct email address.';
}
} else {
$error[] = 'Please enter your email address.';
}

if(!empty($_POST['phone'])) {
if(filter_var($_POST['phone'], FILTER_VALIDATE_INT)) {
$phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);
} else {
$error[] = '<i>Phone number</i> only expects number';
}
} else {
$error[] = 'Please enter your email address.';
}

if(!empty($_POST['time'])) {
$time = filter_var($_POST['time'], FILTER_SANITIZE_STRING);
} else {
$error[] = 'Please enter your best time to contact.';
}

if(!empty($_POST['msg'])) {
$msg = filter_var($_POST['msg'], FILTER_SANITIZE_STRING);
} else {
$error[] = 'Please enter your message.';
}

if(empty($error)) {
$to      = 'your@email.com';
$subject = 'from contact form';

$message = $phone . "\r\n";
$message .= $time . "\r\n";
$message .= $msg;

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: '.$name.' <'. $email.'>' . "\r\n" .
'Reply-To: '.$name.' <'. $email . '>' ."\r\n";

//echo '<pre>'; var_dump($to, $subject, $message, $headers); echo '</pre>'; die();

mail($to, $subject, $message, $headers);
}
}

?><?php
if(!empty($error)) {
echo '<ul class="error">';
echo '<li>' . implode('</li><li>', $error) . '</li>';
echo '</ul>';
}
?>

<form method="post" action="">
<input type="text" name="name" value="" placeholder="Enter your name" class="email_form"/>
<input type="text" name="email" value="" placeholder="Enter your email address" class="email_form"/>
<input type="text" name="phone" value="" placeholder="Phone number" class="email_form"/>
<input type="text" name="time" value="" placeholder="Best time to contact. e.g. 3 am" class="email_form"/>
<textarea name="msg" placeholder="Your message" class="email_form"></textarea>

<input type="image" value="submit" name="contact_submit" src="images/submit.png" width="96" height="43" class="email_button">
</form>

1

Решение

Измените эту строку:

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit') ) {

в

if(isset($_POST['contact_submit']) ) {

а также

<input type="image" value="submit" name="contact_submit" src="images/submit.png" width="96" height="43" class="email_button">

в

<input type = "submit" value="submit" name="contact_submit">

PHP ищет тип отправки, а вы используете тип изображения.

  • Если вы все еще хотите использовать изображение в качестве кнопки отправки:

Вам нужно будет изменить:

if(!empty($_POST['contact_submit']) && ($_POST['contact_submit'] == 'submit') )

в другое условное утверждение.

Например:

if(!empty($_POST['email'])){

Вы всегда можете добавить к этому условному оператору другие поля, которые вы хотите проверить, установлены ли они / не заполнены.

Например:

if(!empty($_POST['email']) || !empty($_POST['name'])){
  • После тестирования вашего кода он не работал, пока эти изменения не были внесены.

Нотабене: Если почта по-прежнему не отправляется / не поступает, вам необходимо убедиться, что mail() действительно доступен для использования и / или проверки ваших журналов и окна спама.

добавлять Отчет об ошибках к началу вашего файла (ов), которые помогут во время производственного тестирования.

error_reporting(E_ALL);
ini_set('display_errors', 1);
  • Который вызовет любые найденные ошибки.

Примечания:

В поле телефона должны быть все номера, иначе произойдет сбой.

т.е .: 555-234-5678 не сработало, но 5552345678 сделал, поэтому вам нужно будет информировать своих пользователей о том, как это должно быть введено.


Редактировать: (полный код) — копировать точно так, как показано при изменении email@example.com на свой адрес электронной почты.

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);

$error = array();

if(isset($_POST['contact_submit']) ) {
if(!empty($_POST['name'])) {
$name = filter_var($_POST['name'], FILTER_SANITIZE_STRING);
} else {
$error[] = 'Please enter your name.';
}

if(!empty($_POST['email'])) {
if(filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
} else {
$error[] = 'Please enter a correct email address.';
}
} else {
$error[] = 'Please enter your email address.';
}

if(!empty($_POST['phone'])) {
if(filter_var($_POST['phone'], FILTER_VALIDATE_INT)) {
$phone = filter_var($_POST['phone'], FILTER_SANITIZE_NUMBER_INT);
} else {
$error[] = '<i>Phone number</i> only expects number';
}
} else {
$error[] = 'Please enter your email address.';
}

if(!empty($_POST['time'])) {
$time = filter_var($_POST['time'], FILTER_SANITIZE_STRING);
} else {
$error[] = 'Please enter your best time to contact.';
}

if(!empty($_POST['msg'])) {
$msg = filter_var($_POST['msg'], FILTER_SANITIZE_STRING);
} else {
$error[] = 'Please enter your message.';
}

if(empty($error)) {
$to      = 'email@example.com';
$subject = 'from contact form';

$message = $phone . "\r\n";
$message .= $time . "\r\n";
$message .= $msg;

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: '.$name.' <'. $email.'>' . "\r\n" .
'Reply-To: '.$name.' <'. $email . '>' ."\r\n";

//echo '<pre>'; var_dump($to, $subject, $message, $headers); echo '</pre>'; die();

mail($to, $subject, $message, $headers);
}
}

?><?php
if(!empty($error)) {
echo '<ul class="error">';
echo '<li>' . implode('</li><li>', $error) . '</li>';
echo '</ul>';
}
?>

<form method="post" action="">
<input type="text" name="name" value="" placeholder="Enter your name" class="email_form"/>
<input type="text" name="email" value="" placeholder="Enter your email address" class="email_form"/>
<input type="text" name="phone" value="" placeholder="Phone number" class="email_form"/>
<input type="text" name="time" value="" placeholder="Best time to contact. e.g. 3 am" class="email_form"/>
<textarea name="msg" placeholder="Your message" class="email_form"></textarea>

<input type = "submit" value="submit" name="contact_submit">

</form>

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

mail($to, $subject, $message, $headers);

с:

if(mail($to, $subject, $message, $headers)){

echo "Mail sent, thank you.";

}

else{
echo "There was an error.";
}

Вы также можете зарегистрировать ошибку:

Сообщение 0 отправляется системному журналу PHP с использованием механизма регистрации операционной системы или файла, в зависимости от того, на что установлена ​​директива конфигурации error_log. Это опция по умолчанию.
1 сообщение отправляется по электронной почте на адрес в параметре адресата. Это единственный тип сообщения, в котором используется четвертый параметр extra_headers.
2 Больше не вариант.
3 сообщение добавляется к месту назначения файла. Новая строка автоматически не добавляется в конец строки сообщения.
4 сообщение отправляется непосредственно обработчику журналов SAPI.

т.е .:

if(mail($to, $subject, $message, $headers)){

echo "Mail sent, thank you.";

}

else{
error_log("Error!", 3, "/var/tmp/mail-errors.log");
}
2

Другие решения

Других решений пока нет …