Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Передача данных на почту через ajax + php (https://javascript.ru/forum/misc/76864-peredacha-dannykh-na-pochtu-cherez-ajax-php.html)

TheSanches 21.02.2019 19:19

Передача данных на почту через 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);
}
?>

Nexus 21.02.2019 20:01

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;
});

TheSanches 21.02.2019 20:04

Большое спасибо.

laimas 21.02.2019 21:19

Цитата:

Сообщение от 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']);

SuperZen 22.02.2019 14:42

оффтоп: файлы ajax'ом нельзя передавать, можно через iframe... или это было давно и неправда?

Nexus 22.02.2019 14:51

Цитата:

Сообщение от SuperZen
оффтоп: файлы ajax'ом нельзя передавать, можно через iframe... или это было давно и неправда?

Завернуть файл в FormData или кодировать в base64 и отправить на сервер.

SuperZen 22.02.2019 15:14

Цитата:

Сообщение от Nexus (Сообщение 503935)
Завернуть файл в FormData или кодировать в base64 и отправить на сервер.

ок, что-то подзабылось... это было для IE9...
https://stackoverflow.com/questions/...=votes#tab-top

TheSanches 19.03.2019 19:55

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

Почему бред?, проверка работает.
Я не спец в PHP, код проверки подсмотрел в интернете.

laimas 19.03.2019 20:19

Цитата:

Сообщение от TheSanches
Почему бред?, проверка работает.

Потому, что я любой мусор могу обозвать любым расширением.


Часовой пояс GMT +3, время: 11:05.