Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Где проблема в скрипте? (https://javascript.ru/forum/misc/68294-gde-problema-v-skripte.html)

sergey24 07.04.2017 12:47

Где проблема в скрипте?
 
<form id="formss1" method="POST" action="javascript:void(0);" onSubmit="ajaxsend_formss('1');" enctype="multipart/form-data">
            <input type="text" name="name" placeholder="" required/>
            <input type="text" name="asd" placeholder="" required/>
            <input type="text" name="rty" placeholder="" required/>
            <input type="text" name="hfg" placeholder="" required/>
            <input type="text" name="nvb" placeholder="" required/>
            <input type="file" name="fileFF[]" multiple id="fileFF" class="w100">
            <button type="submit">Оставить заявку на сайте</button>
        </form>


$(function(){
  $("#formss1").submit(function(evt){
      var $fileUpload = $("#fileFF");
      var http = new XMLHttpRequest();
      var f = $(this);
      if (parseInt($fileUpload.get(0).files.length) > 4) {
          alert("You can only upload a maximum of 4 files");
      } else {
          evt.preventDefault();
          http.open("POST", "mail2.php", true);
          location.href = "#callme1";
          http.onerror = function() {
              alert('Извините, данные не были переданы');
          }
          http.send(new FormData(f));
      }
  });    
});


<?php
  $to = "mail@mail.ru";
  $subject = "Заявка онлайн";
  $from ="От ".$_SERVER['HTTP_HOST'];
  $message = .$_POST['name'] .$_POST['dsa'] .$_POST['dsad'] .$_POST['dasd'] .$_POST['dasd'];
  $boundary = md5(date('r', time()));
  $filesize = '';
  $headers = "MIME-Version: 1.0\r\n";
  $headers .= "From: " . $from . "\r\n";
  $headers .= "Reply-To: " . $from . "\r\n";
  $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
  $message="
Content-Type: multipart/mixed; boundary=\"$boundary\"

--$boundary
Content-Type: text/plain; charset=\"utf-8\"
Content-Transfer-Encoding: 7bit

$message";
  for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
     if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
         $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
         $filename = $_FILES['fileFF']['name'][$i];
         $filetype = $_FILES['fileFF']['type'][$i];
         $filesize += $_FILES['fileFF']['size'][$i];
         $message.="

--$boundary
Content-Type: \"$filetype\"; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=\"$filename\"

$attachment";
     }
   }
   $message.="
--$boundary--";

    mail($to, $subject, $message, $headers);
?>


Скрипт проверяет поле input с id FileFF (type="file") на кол-во выбранных файлов. Если менее 4 файлов, то скрипт работает дальше, если больше, то скрипт выдаёт ошибку. В данном скрипте проверка файлов отлично работает. Редирект после отправки тоже. Письма отправляются, но все поля не выводятся в письме, картинки тоже. Как быть?

sergey24 07.04.2017 12:57

С данным скриптом отсылаются и фото, и данные с заполненных полей, но нет проверки на кол-во файлов.
<script>
	document.getElementById('formss1').addEventListener('submit', function(evt){
	  var http = new XMLHttpRequest(), f = this;
	  evt.preventDefault();
	  http.open("POST", "mail2.php", true);
		location.href = "#callme1";
	  http.onerror = function() {
		alert('Извините, данные не были переданы');
	  }
	  http.send(new FormData(f));
	}, false);
	</script>


Скрипт проверки:
$(function(){
    $("input[type='submit']").click(function(){
        var $fileUpload = $("input[type='file']");
        if (parseInt($fileUpload.get(0).files.length)>2){
         alert("You can only upload a maximum of 2 files");
        }
    });    
});

laimas 07.04.2017 12:57

Цитата:

Сообщение от sergey24
Как быть?

Во-первых проверять пришедшее формой, во-вторых оформлять почтовое сообщение согласно желаемому.

sergey24 07.04.2017 13:00

Цитата:

Сообщение от laimas (Сообщение 449513)
Во-первых проверять пришедшее формой, во-вторых оформлять почтовое сообщение согласно желаемому.

$message = .$_POST['name'] .$_POST['dsa'] .$_POST['dsad'] .$_POST['dasd'];

Input поля с name атрибутами name, dsa, dsad,dasd имеются, но почему то не передаются.

laimas 07.04.2017 13:15

Цитата:

Сообщение от sergey24
$message = .$_POST['name'] .$_POST['dsa'] .$_POST['dsad'] .$_POST['dasd'];

Ну да, то есть это и есть проверка пришло ли вообще что-то формой или же $_POST?

sergey24 07.04.2017 13:26

Цитата:

Сообщение от laimas (Сообщение 449515)
Ну да, то есть это и есть проверка пришло ли вообще что-то формой или же $_POST?

Это оформление письма, сейчас буду проверку гуглить, спасибо за наводку:)

laimas 07.04.2017 13:39

Цитата:

Сообщение от laimas
Это оформление письма

Это не оформление письма. Искать в сети как правильно оформляются почтовые отправления, какие они могу быть и как встроить в тело почтового отправления изображения.

sergey24 07.04.2017 13:45

Цитата:

Сообщение от laimas (Сообщение 449519)
Это не оформление письма. Искать в сети как правильно оформляются почтовые отправления, какие они могу быть и как встроить в тело почтового отправления изображения.

Но ведь работает до изменение JS скрипта. При "склейке" 2 скриптов и происходит сбой в отправке данных. До этого отлично отправлялись как данные полей, так и фото.

laimas 07.04.2017 13:51

Цитата:

Сообщение от sergey24
Но ведь работает до изменение JS скрипта.

Лень распечатать на экран содержимого массивов чтобы убедится не пусты ли они?

Что касается изображений, то непосредственно в письме они будут видны если встроены в него посредством Content-ID.

Ищите в сети.

sergey24 07.04.2017 13:54

Проблему решил. Надо было заменить:
var http = new XMLHttpRequest();
var f = $(this);

На:
var http = new XMLHttpRequest(), f = this;


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