Задать вопрос
@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
  • Вопрос задан
  • 494 просмотра
Подписаться 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.
Внесите весь код отправки внутрь условия.

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

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

Похожие вопросы
FoodSoul Калининград
от 160 000 до 250 000 ₽
BGStaff Москва
До 300 000 ₽
Greenway Global Новосибирск
от 150 000 до 250 000 ₽