За последние 24 часа нас посетил 17051 программист и 1297 роботов. Сейчас ищет 1471 программист ...

Проблема с получением файлов в форме

Тема в разделе "PHP для новичков", создана пользователем Igor011997, 7 фев 2018.

Метки:
  1. Igor011997

    Igor011997 Новичок

    С нами с:
    7 фев 2018
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Киев
    Такая вот проблема. Сразу говорю что с PHP встретился впервые и не могу разобраться. Значит есть форма, которая отправляет данные с сайта мне на почту. В форме добавлена возможность загрузки файла.
    HTML:
    1. <input id="fileSendButt" name="file[]" value="1" size="40" type="file" multiple />
    Раньше я размечал данное окно так. Но сейчас захотел сделать Drag-and-drop. Разметка у меня теперь поменялась на такую
    HTML:
    1. <div class="upload"></div>
    тоесть просто блок. В котором библиотека Formstone должна cделать нужный Drag-and-drop обьект.
    Все так и работает, но писльмо на почту приходит без файла. НЕ могу понять почему??? буду очень благодарен за помощь, так как на эту проблему уходят уже вторые сутки...
    Вот PHP код
    PHP:
    1.  <?php
    2. $to = 'maxim.demkiv@gmail.com';
    3.  
    4. if ( isset( $_POST['sendMail'] ) ) {
    5.     $price = substr( $_POST['price'], 0, 64 );
    6.     $words = substr( $_POST['words'], 0, 64 );
    7.     $pos = substr( $_POST['pos'], 0, 64 );
    8.     $source_language = substr( $_POST['source_language'], 0, 64 );
    9.     $target_language = substr( $_POST['target_language'], 0, 64 );
    10.     $name    = substr( $_POST['name'], 0, 64 );
    11.     $email     = substr( $_POST['email'], 0, 64 );
    12.     $orderNum = substr( $_POST['orderNum'], 0, 64 );
    13.     $orderDate = substr( $_POST['orderDate'], 0, 64 );  
    14.     $message = substr( $_POST['message'], 0, 250 );
    15.  
    16. if($_FILES)
    17. {
    18.     $filepath = array();
    19.     $filename = array();
    20.     $file2 = array();
    21.     $i = 0;
    22.         foreach ($_FILES["file"]["error"] as $key => $error) {
    23.             if ($error == UPLOAD_ERR_OK) {
    24.                 $filename[$i][0] = $_FILES["file"]["tmp_name"][$key];
    25.                 $filename[$i][1] = $_FILES["file"]["name"][$key];
    26.                 $i++;
    27.             }
    28.         }
    29.     }
    30.  
    31.  
    32.     $body = "Нове замовлення, виконане із сторінки ( ".$pos." )\r\n\r\n";
    33.     $body .= "№ замовлення:\r\n".$orderNum."\r\n\r\n";
    34.     $body .= "Ім'я замовника:\r\n".$name."\r\n\r\n";
    35.     $body .= "Розмір замовлення:\r\n".$words." слів\r\n\r\n";
    36.     $body .= "Вартість розрахована калькулятором на сайті:\r\n".$price."€\r\n\r\n";
    37.     $body .= "E-mail:\r\n".$email."\r\n\r\n";
    38.     $body .= "Переклад з:\r\n".$source_language."\r\n\r\n";
    39.     $body .= "Переклад на:\r\n".$target_language."\r\n\r\n";
    40.     $body .= "Повідомлення від клієнта:\r\n".$message."\r\n\r\n";
    41.     $body .= "Замовлення створено клієнтом :\r\n".$orderDate;
    42.     send_mail($to, $body, $email, $filename);
    43. }
    44.  
    45.  
    46.  
    47.  
    48. // Вспомогательная функция для отправки почтового сообщения с вложением
    49. function send_mail($to, $body, $email, $filename)
    50. {
    51.     $subject = 'Нове замовлення із сайту iLeo';
    52.     $boundary = "--".md5(uniqid(time())); // генерируем разделитель
    53.     $headers = "From: ".$email."\r\n";  
    54.     $headers .= "MIME-Version: 1.0\r\n";
    55.     $headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n";
    56.     $multipart = "--".$boundary."\r\n";
    57.     $multipart .= "Content-type: text/plain; charset=\"utf-8\"\r\n";
    58.     $multipart .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
    59.  
    60.     $body = $body."\r\n\r\n";
    61.     $multipart .= $body;
    62.     foreach ($filename as $key => $value) {
    63.         $fp = fopen($value[0], "r");
    64.         $content = fread($fp, filesize($value[0]));
    65.         fclose($fp);
    66.         $file .= "--".$boundary."\r\n";
    67.         $file .= "Content-Type: application/octet-stream\r\n";
    68.         $file .= "Content-Transfer-Encoding: base64\r\n";
    69.         $file .= "Content-Disposition: attachment; filename=\"".$value[1]."\"\r\n\r\n";
    70.         $file .= chunk_split(base64_encode($content))."\r\n";
    71.     }
    72.     $multipart .= $file."--".$boundary."--\r\n";
    73.     mail($to, $subject, $multipart, $headers);
    74. }
    75. ?>
    а вот js
    Код (Javascript):
    1. // Как только страничка загрузилась
    2.     window.onload = function () {
    3.         // проверяем поддерживает ли браузер FormData
    4.             if(!window.FormData) {
    5.                 /* * если не поддерживает, то выводим
    6.                 * то выводим предупреждение вместо формы */
    7.                 alert('dsfdsa');
    8.             //    var div = ge('content');
    9.             //    div.innerHTML = "Ваш браузер не поддерживает объект FormData";
    10.             //    div.className = 'notSupport';
    11.             }
    12.     }
    13.  
    14.  
    15. jQuery(document).ready(function(){
    16.     // =validation
    17.     var errorTxt = 'Ошибка отправки';
    18.     jQuery("#sendform").validate({
    19.         submitHandler: function(form){
    20. /*унікальний номер замовлення*/
    21.             var date=new Date();
    22.             document.getElementById('orderDate').value=date;
    23.             var dateS=""+parseInt(+date);
    24.             var num=parseInt("3"+dateS.substring(5));
    25.             document.getElementById('orderNum').value=num;
    26.          
    27. /*-----------------------*/
    28.             var form = document.forms.sendform,
    29.                 formData = new FormData(form),
    30.                 xhr = new XMLHttpRequest();
    31.  
    32.             xhr.open("POST", "php/multisend.php");
    33.  
    34.             xhr.onreadystatechange = function() {
    35.                 if (xhr.readyState == 4) {
    36.                     if(xhr.status == 200) {
    37.                         var popap=document.querySelector(".orderSuccessful");
    38.                         var overlay=document.querySelector(".overlay");
    39.                         (function Show(){
    40.                                 popap.classList.add("show-block");
    41.                                 overlay.classList.add("show-block");
    42.                             })();
    43.                        
    44.                         //jQuery("#sendform").html('<p class="thank">Данные отправлены!<p>');
    45.                     }
    46.                 }
    47.             };
    48.             xhr.send(formData);
    49.         }
    50.     });
    51. })
    52.  
    53. function sendSuccess(callback){
    54.     jQuery(callback).find("form fieldset").html(thank);
    55.     startClock();
    56. }
     
  2. Igor011997

    Igor011997 Новичок

    С нами с:
    7 фев 2018
    Сообщения:
    14
    Симпатии:
    0
    Адрес:
    Киев
    вот html код который генерирует библиотека
    HTML:
    1.  
    2. <div class="upload r fs-upload-element fs-upload fs-light">
    3.     <div class="fs-upload-target">Перетягніть</div>
    4.     <input class="fs-upload-input" type="file" multiple="">
    5. </div>
    Как я понимаю дело в том что файл на сервер передает но не отправляет на ящик...
     
    #2 Igor011997, 7 фев 2018
    Последнее редактирование: 7 фев 2018