Когда я отправляю электронное письмо с моей контактной формой, значение 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
.