проблема с формой обратной связи на php
Учусь верстать сайты, решил сделать форму обратной связи ( ну как сделать, с интернета взять, ибо я полный 0 в php) Мне надо чтобы сообщения отправлялись на почту, а у меня просто выходит ошибка.
<?php
$to = '[email protected]';
$firstname = $_POST["fname"];
$email= $_POST["email"];
$text= $_POST["message"];
$phone= $_POST["phone"];
$headers = 'MIME-Version: 1.0' . "\r\n";
$headers .= "From: " . $email . "\r\n"; // Sender's E-mail
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$message ='<table style="width:100%">
<tr>
<td>'.$firstname.' '.$laststname.'</td>
</tr>
<tr><td>Email: '.$email.'</td></tr>
<tr><td>phone: '.$phone.'</td></tr>
<tr><td>Text: '.$text.'</td></tr>
</table>';
if (@mail($to, $email, $message, $headers))
{
echo 'Заявка успешно отправлена.';
}else{
echo 'Ошибка';
}
<form class="form-area " id="myForm" action="mail.php" method="post">
<div class="row">
<div class="col-lg-6 form-group">
<input name="name" placeholder="Введите свое имя" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Введите свое имя'" class="common-input mb-20 form-control" required="" type="text">
<input name="subject" placeholder="Имя магазина" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Имя магазина'" class="common-input mb-20 form-control" required="" type="text">
</div>
<div class="col-lg-6 form-group">
<textarea class="common-textarea form-control" name="message" placeholder="Заявка" onfocus="this.placeholder = ''" onblur="this.placeholder = 'Заявка'" required=""></textarea>
</div>
<div class="col-lg-12 d-flex justify-content-between">
<div class="alert-msg" style="text-align: left;"></div>
<button class="genric-btn primary circle" style="float: right;">Отправить заявку</button>
</div>
</div>
</form>
Ответы (1 шт):
@ в PHP значит блокирование ошибок. Не знаю что вы там отправляете, но у вас вообще не совпадают те данные что вы обрабатываете в обработчике и те данные которые заполняются в форме, обратите внимание на name ваших input-ов. В форме вы даете пользователю заполнить name, subject и message, но при этом в обработчике у вас откуда-то взялся fname, email, phone. Ну например немного изменим код вашего обработчика формы чтобы он соответствовал самой форме, в качестве простого примера подойдет:
<?php
// Проверим заполнены ли обязательные поля, так как все ваши required можно удалить в инспекторе.
if(!empty($_POST['name']) && !empty($_POST['subject']) && !empty($_POST['message'])) {
// Для начала сохраним данные в переменные, при этом предварительно очистив их, подробнее https://www.php.net/manual/ru/function.filter-input.php и отдельно посмотрите типы фильтров https://www.php.net/manual/ru/filter.filters.php
$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
$subject = filter_input(INPUT_POST, 'subject', FILTER_SANITIZE_STRING);
$text = filter_input(INPUT_POST, 'message', FILTER_SANITIZE_STRING);
// Имейте ввиду, что данные можно обработать и иначе, но Вам всегда нужно обрабатывать входящие данные и Вы никогда не должны доверять пользователю, так же можно было очистить ваш $_POST['some_field'] обернув его в strip_tags(), например, есть различные варианты.
$to = '[email protected]';
$subject = "Тема письма: $subject";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$message ='<table style="width:100%">
<tr>
<td>' . $name . '</td> // в Вашем примере есть $lastname но такой переменной у Вас же не существует.
</tr>
<tr><td>Name: ' . $name . '</td></tr>
<tr><td>Subject: ' . $subject . '</td></tr>
<tr><td>Message: ' . $text . '</td></tr>
</table>';
$success = mail($to, $subject, $message, $headers);
if($success) {
echo 'Заявка успешно отправлена.';
} else {
echo error_get_last()['message']; // Ваше сообщение об ошибке https://www.php.net/manual/ru/function.error-get-last.php
}
} else {
echo 'Пожалуйста, заполните обязательные поля формы.';
}
