Ajax Загрузка файлов работает с xampp, но не на онлайн-сервере. - PullRequest
0 голосов
/ 17 февраля 2020

У меня 2 HTML страниц. Один с формой для добавления сообщения (в этом случае у меня есть файл типа ввода), а другой с формой для обновления сообщения (в этом случае у меня нет файла типа ввода). Обе формы имеют кнопку с одинаковым идентификатором для вызова ajax. Файл PHP одинаков для обеих форм, и он вставляет или обновляет данные сообщения. Файл js получает значения, введенные пользователем, и вызывает ajax.

HTML (добавить сообщение)

<form id="form">
   <input id="titleID" type="text" value="" required />
   <input type="file" id="inputVideo" required />
   <input type="submit" id="submitData" value="SEND DATA" />
</form>

HTML (обновить сообщение. Это другая страница. С таким же идентификатором все в порядке)

<form id="form">
   <input id="titleID" type="text" value="SomeTitleValue" />
   <input type="hidden" id="idHidd" value="SomeIdValue" />
   <input type="submit" id="submitData" value="SEND DATA" />
</form>

JS (получить входные значения и сделать ajax вызов php файла)

$(document).ready(function() {
   $(document).on('submit', '#form', function(e) {
      e.preventDefault();

      // get values of inputs and create a formData object
      // if the value is undefined, append in formData a empty string; else append the value

      // Get id
      if ( $('#idHidd').val() != undefined ){
         var id= $('#idHidd').val();
         formData.append('id', id);
      } else {
         var id= ""
         formData.append('id', id);
      }

     // Get file video
     if ( $('#inputVideo')[0] != undefined ){
         var video= $('#inputVideo')[0].files[0]
         formData.append('video', video);
     } else {
         var video =""
         formData.append('video', video);
     }

     // Get title (always present)
     var title= $('#title').val();
     formData.append('title', title);


     // AJAX Call
     $.ajax({
        type: "POST",
        url: "urlToPHP", 
        dataType: "JSON",   
        processData: false,
        contentType: false,
        cache: false,
        data: formData,
        success: function(msg) { 
                    alert(msg)
        }
      });
   });
});

PHP

//include connect db   

//Get tite and id 
$id= $_POST['id'];
$title= $_POST['title'];

// if there isn't an id, i do an insert and get the video in $_FILES
if ($id == ""){
    $video= $_FILES['video'];

    // DO QUERY FOR INSERT NEW POST AND MOVES THE FILE ON SERVER
}

if ($id != ""){

    // DO QUERY FOR UPDATE A POST
}

ПРОБЛЕМА : локально с xampp, все работает. Я могу вставить новый пост, и я могу сделать обновление. На онлайн-сервере работает только обновление. Когда я делаю вставку, в log_err у меня появляется сообщение о том, что индексы «id», «video» и «title» не определены. Например, если $ _POST и $ _FILES были пусты. Но в консоли (с console.log) я вижу, что объект formData хорош, и все значения отлично добавляются ко всем индексам. Infact, обновление работает, и данные являются такими же, как вставка, за исключением файла видео. Возможно, это потому, что во вставке есть тип ввода «файл»? Но с xampp это работает. Я также пытался отключить mod_security из CPanel. Но это не работает так же. у кого-нибудь есть какое-нибудь решение?

Ps: извините, если код не идеален, но мне пришлось сделать короткую версию для лучшего понимания.

1 Ответ

0 голосов
/ 18 февраля 2020

Хорошо, я решил свою проблему.

Проблема была в размере файла. Я изменил его на xampp, но не на сервере.

Я подумал, что ошибка, касающаяся размера файла, сообщалась автоматически, без необходимости проверки. Вместо этого без указания c проверки размера файла у меня есть только ошибка неопределенных индексов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...