PHP форма обратной связи

Статус
Закрыто для дальнейших ответов.

Pona Monce

Новичок
Регистрация
30.01.2018
Сообщения
4
Доброго времени суток! Помогите разобраться, имеем код HTML и PHP, форма обратной связи, при заполнении и отправке формы выходит ошибка "Error sending email."
Что не так?(
Код:
<section class="flat-row parallax parallax4" id="contact" style="background-position: 50% 177px;">





<div class="row-overlay"></div>
<div class="container">
<div class="row">
<div class="col-sm-5">
<div class="title-section style2">
<h1 class="title">Задайте свой вопрос?</h1>
<div class="p-section">
<p>
Наш менеджер с радостью ответит на все Ваши вопросы<br>и проконсультирует Вас по нужным Вам товарам и услугам.
</p>
</div>
</div>
</div>
<div class="col-sm-7">
<form action="contact-process.php" method="post" id="contactform" class="requestform" novalidate="novalidate">
<p class="author">
<label for="discuss">Чем мы можем помочь?</label>
<select name="discuss" id="discuss" required="required">
<option value="">Вопрос по продукции</option>
<option value="02">Вопрос по сотрудничеству</option>
<option value="03">Другой вопрос</option>
</select>
</p>
<p class="name">
<label for="name">Ваше Имя*</label>
<input id="name" name="name" type="text" aria-required="true" required="required">
</p>
<p class="phone">
<label for="discuss">Ваш номер телефона*</label>
<input id="phone" name="phone" type="text" value="" aria-required="true" required="required">
</p>
<p class="email">
<label for="discuss">Ваша электронная почта</label>
<input id="email" name="email" type="email" value="" aria-required="true" required="required">
</p>
<p class="form-submit">
<button class="flat-button bg-theme">Отправить</button>
</p>
</form>
</div>
</div>
</div>
</section>

Код:
<?php

$address = "webframe.ru@gmail.com";
if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");
$error = false;
$fields = array( 'name', 'email', 'subject', 'message' );
foreach ( $fields as $field ) {
    if ( empty($_POST[$field]) || trim($_POST[$field]) == '' )
        $error = true;
}
if ( !$error ) {
    $name = stripslashes($_POST['name']);
    $email = trim($_POST['email']);
    $subject = stripslashes($_POST['subject']);     
    $message = stripslashes($_POST['message']);
    
    $e_subject = 'You\'ve been contacted by ' . $name . '.';
    $e_body = "You have been contacted by: $name" . PHP_EOL . PHP_EOL;
    $e_reply = "E-mail: $email" . PHP_EOL . PHP_EOL;
    $e_subject = "\r\nsubject: $subject";   
    $e_content = "Message:\r\n$message" . PHP_EOL . PHP_EOL;
    $msg = wordwrap( $e_body . $e_reply .$e_subject , 70 );
    $headers = "From: $email" . PHP_EOL;
    $headers .= "Reply-To: $email" . PHP_EOL;
    $headers .= "MIME-Version: 1.0" . PHP_EOL;
    $headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
    $headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;
    if(mail($address, $e_subject, $msg, $headers)) {
        echo 'Success';
    } else {
        echo 'ERROR!';
    }
}
?>
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Вы в строке $address адрес указали правильное мыло?
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
1) А сервер точно умеет отправлять емейлы? Может там заблокирована эта функция или вы отсылаете с локального неправильно настроенного сервера?

2) Попробуйте в начале PHP файла поставить отображение ошибок (после <?PHP, новой строкой)

error_reporting(E_ALL);
ini_set("display_errors", 1);
Они могут вывести на экран более подробную информацию об ошибки.

3) Вы уверены что вы пытаетесь отослать письмо через этот скрипт? По идее этот скрипт должен выдавать "Success" или "ERROR!", а не то сообщение, что вы привели в качестве ошибки.
 

Pona Monce

Новичок
Регистрация
30.01.2018
Сообщения
4
BaNru сказал(а):
1) А сервер точно умеет отправлять емейлы? Может там заблокирована эта функция или вы отсылаете с локального неправильно настроенного сервера?

2) Попробуйте в начале PHP файла поставить отображение ошибок (после <?PHP, новой строкой)

error_reporting(E_ALL);
ini_set("display_errors", 1);
Они могут вывести на экран более подробную информацию об ошибки.

3) Вы уверены что вы пытаетесь отослать письмо через этот скрипт? По идее этот скрипт должен выдавать "Success" или "ERROR!", а не то сообщение, что вы привели в качестве ошибки.
Это сообщение вылазит из файла main.js
Код:
var ajaxContactForm = function() {
$('#contactform').each(function() {
$(this).validate({
submitHandler: function( form ) {
var $form = $(form),
str = $form.serialize(),
loading = $('<div />', { 'class': 'loading' });
$.ajax({
type: "POST",
url: $form.attr('action'),
data: str,
beforeSend: function () {
$form.find('.form-submit').append(loading);
},
success: function( msg ) {
var result, cls;
if ( msg == 'Success' ) {
result = 'Message Sent Successfully To Email Administrator. ( You can change the email management a very easy way to get the message of customers in the user manual )';
cls = 'msg-success';
} else {
result = 'Error sending email.';
cls = 'msg-error';
}
$form.prepend(
$('<div />', {
'class': 'flat-alert ' + cls,
'text' : result
}).append(
$('<a class="close" href="#"><i class="fa fa-close"></i></a>')
)
);
$form.find(':input').not('.submit').val('');
},
complete: function (xhr, status, error_thrown) {
$form.find('.loading').remove();
}
});
}
});
}); // each contactform
};
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Тогда я рекомендую отключить этот файл и отправить напрямую.
Посмотреть что напишет сервер, причину ошибки.
 

Pona Monce

Новичок
Регистрация
30.01.2018
Сообщения
4
BaNru сказал(а):
Тогда я рекомендую отключить этот файл и отправить напрямую.
Посмотреть что напишет сервер, причину ошибки.
Если выключить, то после нажатия кнопки ОТПРАВИТЬ сразу кидает на страницу PHP файла. На почту ничего не приходит. :( Что ж не так то?(

А сервер точно отправляет , есть еще одна форма обратного звонка, она работает отлично.
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 138
Оно и должно кидать на файл, всё верно.
Но я выше говорил вбить 2 строки для отлова ошибок.
Они покажут ошибки.

Хотя они и не помогут. Вы, судя по скрипту, меняли названия полей.
В форме идёт проверка 4 полей (6-10 строки): 'name', 'email', 'subject', 'message'.
У вас же 3 поля 'name', 'phone', 'email', при этом последних двух нет, поэтому условие в котором идёт отправка (
if ( !$error )) не срабатывает.

То есть, если в конце скрипта написать альтернативное условие (else), то оно сработает

if ( !$error ) {
//...тут ваш скрипт отправки...
} else {
echo 'ошибка заполнения полей';
}
Если вам не нужны старые поля, то их надо удалять ВЕЗДЕ в PHP файле.
И вместо них писать новые ваши.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ