Задать вопрос
@Worddoc
Frontend explorer

Почему php функция mail() отсылает пустые строки?

Здравствуйте. Есть скрипт, но почему - то вместо полноценной формы приходят пустые строки. (основная проблема) Так же бывает с сайта приходят письма опять же с пустой формой, но их никто не отправлял. Т.е. сам по себе скрипт запускается(второстепенная проблема). Ребят, помогите пожалуйста, для меня это очень важно)

<form method="POST" id="form" action='php/main.php' name="form">
      <div class="input-1">
        <label for="">Имя:</label>
        <input type="text" placeholder="Иван" autofocus="autofocus" required="required" name="name" id="name">
      </div>
      <div class="input-1">
        <label for="">Отчество:</label>
        <input type="text" placeholder="Иванович" required="required" name="second" id="second">
      </div>
      <div class="email">
        <label for="email">Email:</label>
      </div>
      <input type="email" placeholder="example@mail.ru" required="required" name="email" id="email">
      <div class="message">
        <label for="area">Сообщение:</label>
      </div>
      <textarea cols="30" rows="10" placeholder="Введите сообщение..." required="required" name="message" id="message"></textarea>
      <div class="sbm">
        <input type="submit" name="submit" value="Отправить">
      </div>
    </form>


$(document).ready(function(){
		$('#form').submit(function() {
			$.ajax({
				type: "POST",
				url: "php/main.php",
				data: $(this).serialize(),
			})
			.done(function(){
        $(".php-success").animate({
          top: 0
        },500);
          setTimeout(function() {
            $(".php-success").animate({
              top: "-" + 50 + "px"
            },500);
          },3000);
			})
			return false;
		})
	})


<?php
	
	if(isset($_POST["name"]) && isset($_POST["second"]) && isset($_POST["email"]) && isset($_POST["message"])) {
		$name = $_POST["name"];
		$second = $_POST["second"];
		$email = $_POST["email"];
		$message = $_POST["message"];
	}

	$to = "myMail@gmail.com";
	$subject = "A new message from website!";
	$body = "Имя:" . $name ."\n" . "Отчество:" . $second ."\n" . "Имейл: " .$email ."\n" . "Сообщение:" . $message;
	$header = "From :" .$email;

	mail($to, $subject, $body, $header);

	?>


9fac66eeea214034911f654ec066eab5.PNG
  • Вопрос задан
  • 482 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Dry7
@Dry7
Web разработчик
А у Вас из-за jQuery может отправляться не как $_POST, а как $_GET.

Попробуйте в коде заменить $_POST на $_REQUEST.
Потом у Вас странное условие, поля будут заполнены только если все данные пришли, лучше все-таки как-то так. И добавить экранирование входящих данных с помощью htmlspecialchars(.., ENT_QUOTES);

<?php
  
    $name = htmlspecialchars(@$_REQUEST["name"], ENT_QUOTES);
    $second = htmlspecialchars(@$_REQUEST["second"], ENT_QUOTES);
    $email = htmlspecialchars(@$_REQUEST["email"], ENT_QUOTES);
    $message = htmlspecialchars(@$_REQUEST["message"], ENT_QUOTES);

  $to = "myMail@gmail.com";
  $subject = "A new message from website!";
  $body = "Имя:" . $name ."\n" . "Отчество:" . $second ."\n" . "Имейл: " .$email ."\n" . "Сообщение:" . $message;
  $header = "From :" .$email;

  mail($to, $subject, $body, $header);

  ?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alsopub
@alsopub
Пустые строки приходят тогда, когда хотя бы одно поле не проходит условие isset.
Внесите весь код отправки внутрь условия.

Скрипт "сам по себе запускается" - это вас дергают поисковые боты, опять же из-за того что у вас бесусловно отправляется почта, даже если ни одно поле не заполнено.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы