Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2019, 19:19
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Передача данных на почту через ajax + php
Доброго времени суток, есть код ajax который передает данные input на почту, как можно сделать чтобы + к этим данным еще передавались данные хранящиеся в переменных, спасибо.
Я примерно понимаю как их ловить в php, но вот правильно передать через ajax не получается.
На всякий случай код php тоже выложил.

//Данные переменных a, b, c, нужно передать в обработчик с последующей отправкой на почту

var a = 'some text';
var b = 888;
var c = 123;

/* Передача формы в обработчик */
	$("#form").submit(function() {
		$.ajax({
			type: "POST",
		   url: "mailAjax.php",
		   contentType: false,
		   processData: false,
		   data: new FormData(this)
		}).done(function() {
			btn.disabled = true;
			$(this).find("input").val("");
			$("#form").trigger("reset");
			
			 
         $('.feedback__sent').fadeIn(300).delay(4000).fadeOut(400);			
						
		}).fail(function(){
			$("#form").trigger("reset");
			btn.disabled = true;
			 
         $('.feedback__error').fadeIn(300).delay(3500).fadeOut(400);
		});
		return false;
	});


<?php
/* Скрытая антиспам защита*/
if ($_POST['phone']!=''){
  die();
}
else{ 

$to = "email@gmail.com";


if ( !empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0 ) {
	if(in_array(strtolower(end(explode('.', $_FILES['file']['name']))), array('jpeg', 'jpg', 'gif', 'png', 'pdf', 'cdr', 'eps', 'ai', 'svg', 'doc', 'tif', 'psd')) and $_FILES['file']['size'] < 2000000) { 
			$filepath = $_FILES['file']['tmp_name'];
    		$filename = $_FILES['file']['name'];
	}
  } else {
    $filepath = '';
    $filename = '';
 }


$name = trim($_POST["name"]);
$tel = trim($_POST["tel"]);
$email = trim($_POST["email"]);
$message = trim($_POST["message"]);

$body = "Имя:\r\n".$name."\r\n\r\n";
$body .= "Контактный номер:\r\n".$tel."\r\n\r\n";
$body .= "E-mail:\r\n".$email."\r\n\r\n";
$body .= "Описание заказа:\r\n".$message;


	send_mail($to, $body, $email, $filepath, $filename);
}

function send_mail($to, $body, $email, $filepath, $filename)
{
  $subject = 'Тестовое письмо';
  $boundary = "--".md5(uniqid(time())); // генерируем разделитель
  $headers = "From: ".$email."\r\n";   
  $headers .= "MIME-Version: 1.0\r\n";
  $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
  $multipart = "--".$boundary."\r\n";
  $multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
  $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";

  $body = $body."\r\n\r\n";
 
  $multipart .= $body;
 
  $file = '';
  if ( !empty( $filepath ) ) {
    $fp = fopen($filepath, "r");
    if ( $fp ) {
      $content = fread($fp, filesize($filepath));
      fclose($fp);
      $file .= "--".$boundary."\r\n";
      $file .= "Content-Type: application/octet-stream\r\n";
      $file .= "Content-Transfer-Encoding: base64\r\n";
      $file .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
      $file .= chunk_split(base64_encode($content))."\r\n";
    }
  }
  $multipart .= $file."--".$boundary."--\r\n";
  mail($to, $subject, $multipart, $headers);
}
?>

Последний раз редактировалось TheSanches, 21.02.2019 в 19:46. Причина: Дополнение
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2019, 20:01
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

https://developer.mozilla.org/ru/doc...ormData/append

//Данные переменных a, b, c, нужно передать в обработчик с последующей отправкой на почту
var a = 'some text';
var b = 888;
var c = 123;

/* Передача формы в обработчик */
$("#form").submit(function() {
    const requestData = new FormData(this);
    requestData.append('a', a);
    requestData.append('b', b);
    requestData.append('c', c);

    $.ajax({
        type: "POST",
        url: "mailAjax.php",
        contentType: false,
        processData: false,
        data: requestData
    }).done(function() {
        btn.disabled = true;
        $(this).find("input").val("");
        $("#form").trigger("reset");


        $('.feedback__sent').fadeIn(300).delay(4000).fadeOut(400);

    }).fail(function() {
        $("#form").trigger("reset");
        btn.disabled = true;

        $('.feedback__error').fadeIn(300).delay(3500).fadeOut(400);
    });
    return false;
});
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2019, 20:04
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

Большое спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 21.02.2019, 21:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от TheSanches
!empty( $_FILES['file']['tmp_name'] ) and $_FILES['file']['error'] == 0
И как это понимать?

Если нет ошибки загрузки, то $_FILES['file']['tmp_name'] никак пустым не будет, а если есть, то по барабану состояние $_FILES['file']['tmp_name'] .

А вот это "if(in_array(strtolower(end(explode('.', $_FILES['file']['name']))), array('jpeg', 'jpg' ..." полный бред.

$filename = basename($_FILES['file']['name']);

Последний раз редактировалось laimas, 21.02.2019 в 21:22.
Ответить с цитированием
  #5 (permalink)  
Старый 22.02.2019, 14:42
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

оффтоп: файлы ajax'ом нельзя передавать, можно через iframe... или это было давно и неправда?
Ответить с цитированием
  #6 (permalink)  
Старый 22.02.2019, 14:51
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

Сообщение от SuperZen
оффтоп: файлы ajax'ом нельзя передавать, можно через iframe... или это было давно и неправда?
Завернуть файл в FormData или кодировать в base64 и отправить на сервер.
Ответить с цитированием
  #7 (permalink)  
Старый 22.02.2019, 15:14
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

Сообщение от Nexus Посмотреть сообщение
Завернуть файл в FormData или кодировать в base64 и отправить на сервер.
ок, что-то подзабылось... это было для IE9...
https://stackoverflow.com/questions/...=votes#tab-top
Ответить с цитированием
  #8 (permalink)  
Старый 19.03.2019, 19:55
Аспирант
Отправить личное сообщение для TheSanches Посмотреть профиль Найти все сообщения от TheSanches
 
Регистрация: 21.01.2018
Сообщений: 78

А вот это "if(in_array(strtolower(end(explode('.', $_FILES['file']['name']))), array('jpeg', 'jpg' ..." полный бред.

Почему бред?, проверка работает.
Я не спец в PHP, код проверки подсмотрел в интернете.
Ответить с цитированием
  #9 (permalink)  
Старый 19.03.2019, 20:19
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от TheSanches
Почему бред?, проверка работает.
Потому, что я любой мусор могу обозвать любым расширением.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать задержку вывода данных через ajax ghost666 AJAX и COMET 2 27.05.2018 16:21
Получаю через AJAX php скрипт jay-S Общие вопросы Javascript 9 26.11.2017 11:56
как передать php массивы через ajax Evsik AJAX и COMET 11 11.07.2015 06:32
передача объекта через параметр функции PHP zhurchik Серверные языки и технологии 1 06.12.2012 15:24
Просмотр передаваемых данных через AJAX Гость AJAX и COMET 3 04.08.2008 14:34