Intereting Posts

Контактная форма отправляет почту с пустым полем сообщения

Когда я отправляю электронное письмо с моей контактной формой, значение textarea не отправляется, и поле «сообщение:» всегда пусто в письме.

Объявление входных переменных вручную в jquery вместо использования serialize дает тот же результат.

Текстовое поле находится внутри тегов формы, поэтому я понятия не имею, почему его ценность не поднята и не отправлена.

Я попытался предоставить textarea id = "message" и называть его вручную в jquery, например: var text = $("#message").val(); и var text = $("textarea#message").val(); но он по-прежнему не отправляет.

Я не знаю, что я делаю неправильно. Пожалуйста помоги.

Вот мой код:

  <form id="contactForm" method="POST"> <div class="row small-margin"> <div class="col-md-4"> <i class="pe-7s-user pe-2x icon-contact"></i> <input name="name" type="text" placeholder="Name(required)" required size="35"> </div> <div class="col-md-4"> <i class="pe-7s-mail pe-2x icon-contact"></i> <input name="email" type="email" placeholder="Email(required)" required size="35"> </div> <div class="col-md-4"> <i class="pe-7s-link pe-2x icon-contact"></i> <input name="website" type="text" placeholder="Website" size="35"> </div> </div> <div class="row small-margin"> <div class="col-md-12"> <!-- Message Field --> <textarea name="message" placeholder="Your Message(required)" required></textarea> <!-- Submit Button --> <button id="submit" name="submit" type="submit" class="button" value="submit">SEND MESSAGE</button> <!-- Success Message --> <div id="msgSubmit" class="alert alert-success text-center hidden">Message Sent Successfully</div> </div> </div> </form> 

И JS:

 $("#contactForm").submit(function(event){ // cancels the form submission event.preventDefault(); console.log( $( this ).serialize() ); }); $.ajax({ type: "POST", url: "php/form-process.php", data: "name=" + name + "&email=" + email + "&website=" + website + "&message=" + text, success : function(text){ if (text == "success"){ formSuccess(); } } }); } function formSuccess(){ $( "#msgSubmit" ).removeClass( "hidden" ); } 

И PHP:

 <?php // Set variables $name = $_POST['name']; $email = $_POST['email']; $website = $_POST['website']; $message = $_POST['text']; $to = 'novakim92@gmail.com'; $subject = 'New Message from Nixo'; // Prepare email body text $Body .= "Name: "; $Body .= $name; $Body .= "\n"; $Body .= "Email: "; $Body .= $email; $Body .= "\n"; $Body .= "Website: "; $Body .= $website; $Body .= "\n"; $Body .= "Message: "; $Body .= $message; $Body .= "\n"; // Send email $success = mail($to, $subject, $Body, "From:".$email); if ($success){ echo "success"; }else{ echo "<p>Something went wrong, please try again!</p>"; } ?> 

Я нашел проблему в вашем коде:

Значения из textarea никогда не делали его серверной стороной, потому что вы делаете это в своем PHP:

 $message = $_POST['text']; 

Вы должны сделать это, чтобы получить значение из textarea:

 $message = $_POST['message']; 

Это решит вашу проблему :). Надеюсь, поможет.

Именование переменных несовместимо.

В вашей HTML-форме вы используете message для атрибута name. Но в вас AJAX-вызов, а в PHP $_POST-GLOBAL вы ищете переменную, называемую text .