@Alexandr59

Как отправить файл с Ajax формой обратной связи через php POST?

Привет.
Не нашел ответа на тостере, хотя такие темы уже были.
Тем не менее..
Как в форме отправить файл?
Есть Ajax форма обратной связи с отправкой через PHP POST.
Добавил кнопку загрузить файл, в шаблоне письма даже переменную $file пишу, но он не отправляется.
Говорят, надо в base64 кодировать, как это сделать?
Спасибо за ответы.
Мои файлы:
Index.php

<form class="form" name="MyForm" action="" id="callbacks" enctype="multipart/form-data" method="post">
    <!--Атрибут action остается пустым-->
    <h1>Форма обратной связи</h1> <br>
    <!--ФИО с запретом цифр-->
    <input class="textbox" name="name" type="text" onkeyup="var yratext=/['0-9',':']/; if(yratext.test(this.value)) this.value=''" placeholder="ФИО" /><br>
    <!--Телефон с запретом букв-->
    <input class="textbox" name="tel" type="phone" onkeyup="var yratext=/['а-я','А-Я','А-я','a-z','A-Z','A-z','A-я',]/; if(yratext.test(this.value)) this.value=''" placeholder="Телефон" /><br>
    <!--Email-->
    <input class="textbox" name="email" type="email" placeholder="Email" /><br>
    <!--Поле ввода комментария в форме-->
    <textarea class="textbox" name="body" rows="3" placeholder="Краткая суть вопроса"></textarea><br>
    
    <!--ЗДЕСЬ ВЫББИРАЕТСЯ ФАЙЛ ДЛЯ ОТПРАВКИ-->
    <input name="file" type="file" id="file3" class="custom-file-input">
    <span class="custom-file-control"></span><br>
    
    <br>
    <br>
    
    <!--Кнопка отправить-->
    <input class="button" type="submit" value="Оставить обращение" id="btncontcall" /><br><br>
    
    <!--В этом блоке будет инфорация от обработчика-->
    <div id="erconts"></div>
</form>

<script>
    $(document).ready(function() {
        $('#btncontcall').click(function() {
            $.ajax({
                type: "POST",
                url: "send.php", // Адрес обработчика
                data: $('#callbacks').serialize(),
                error: function() {
                    $("#erconts").html("Произошла ошибка!");
                },
                beforeSend: function() {
                    $("#erconts").html("Отправляем данные...");
                },
                success: function(result) {
                    $('#erconts').html(result);
                    checkThis();
                }});
            return false;
        });});
</script>



Send.php

<?php
if (isset($_POST["email"])){
if (isset($_POST["name"])) {$name = $_POST["name"];}
if (isset($_POST["email"])) {$email = $_POST["email"];}
if (isset($_POST["tel"])) {$tel = $_POST["tel"];}
if (isset($_POST["file"])) {$file = $_FILES["file"];}  // Что-то делается с файлом???
if (isset($_POST["body"])) {$body = $_POST["body"];}

if($name=="" or $email=="" or $tel=="" or $body==""){ // Проверяем на заполненность всех полей.
	echo "Заполните все поля";
}else{
$ip=$_SERVER["REMOTE_ADDR"]; // Вычисляем ip пользователя
$brose=$_SERVER["HTTP_USER_AGENT"]; // Вычисляем браузер пользователя
$to = "moymail@yandex.ru"; // Ваш email адрес
$subject = "Сообщение c сайта"; // тема письма 
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$headers .= "From: Создание сайтов Trust Code"; // Отправитель письма

// Содержимое письма    
$message = "
Имя: $name<br>
E-mail: $email<br>
Телефон: $tel<br>
Текст: $body<br><br>
Файл: $file<br><br>
--------------------------------------------------------<br>
---------------IP отправителя: $ip<br>
---------------Браузер отправителя: $brose<br>
"; 
$send = mail($to, $subject, $message, $headers);


 if ($send == "true")
 {
 echo "Ваше сообщение отправлено. Мы ответим вам в ближайшее время.";
 }
 else
 {
 echo "Не удалось отправить, попробуйте снова!";
 }}}?>

  • Вопрос задан
  • 1577 просмотров
Пригласить эксперта
Ответы на вопрос 1
damir_sayahov
@damir_sayahov
Для использования объекта FordData важна версионность jquery
Вот при таком подключении всё ок
https://code.jquery.com/jquery-2.2.0.min.js
//code.jquery.com/jquery-migrate-1.3.0.min.js
У тега form должен быть параметр method="POST" enctype="multipart/form-data"
Вот js
var formD;
$(document).ready(function(){
	$('.dmr-form').submit(function(e){
		e.preventDefault();
		var _this = $(this);
		formD = new FormData(document.forms.%FORM_ID%);
		$.ajax({
			url: '/ajax/webform.php',
			data: formD,
			method: 'POST',
			dataType:'json',
			processData: false,
			contentType: false,
			success: function(data){}
		});
		return false;
	});
});
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы