2016-05-04 3 views
1

У меня есть форма, которая имеет два текстовых поля и поле для загрузки файлов.Загрузка файла AJAX с PHP Validation

Проверка выполняется полностью из PHP, и я использую немного Ajax для получения сообщений об ошибках, которые создает скрипт PHP через массив (err []).

Моя проблема заключается в том, что я не могу заставить проверку правильности загрузки файлов работать правильно. (При загрузке файла, он всегда будет говорить «Неверный формат файла только .png, .gif, .jpg, .jpeg принимаются»)

Аякса ниже:

function checkform() { 
     $.post('upload.php', $("form#uploadForm").serialize(), function (data) { 

       $("div#error").html(data).slideDown("fast"); 

       var destination = $('div#uploadContainer').offset().top - 15; 
       $("html:not(:animated),body:not(:animated)").animate({ 
        scrollTop: destination 
       }, 200); 

      }); 
    return false; 
} 

Следующая проверка кажется ВСЕГДА быть вызвано:

$extension = strrchr($_FILES['uploadFile']['name'], '.'); 
    if (!in_array($extension, $extensions)) { 
     $err[]='Wrong file format only .png , .gif, .jpg, .jpeg are accepted'; 
    } 
... 
... 
+0

Это может помочь вам? http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously?rq=1 – Riddell

+1

Это тоже: http://stackoverflow.com/questions/6974684/how-to-send-formdata -объекты-с-ajax-request-in-jquery – Riddell

+0

Ваша html-форма? – frz3993

ответ

0
if (isset($_FILES['uploadFile']) && $_FILES['uploadFile']['size'] != 0) 
{ 
    // Upload file 
} 
+0

Интересно ... Это теперь проходит правило проверки, но теперь мое правило под ним подбирается (см. Исходный пост) – DavidPottrell

+0

$ extension = end (explode ('.', $ _FILES ['uploadFile'] ['name' ])); –

+0

$ extension = end (explode ('.', $ _FILES ['uploadFile'] ['name'])); \t \t if (! In_array ($ extension, $ extensions)) { \t \t $ err [] = 'Неверный формат файла .png, .gif, .jpg, .jpeg принимаются'; \t \t} ^ Нравится? - Трудно видеть без форматирования - я очень ценю помощь Deepak – DavidPottrell

0
$extension = end(explode('.', $_FILES['uploadFile']['name'])); 

if (!in_array($extension, $extensions)) 
{ 
    $err[]='Wrong file format only .png , .gif, .jpg, .jpeg are accepted'; 
} 
+0

Не повезло, я боюсь! Несмотря на то, что выбрано допустимое изображение, правило проверки еще активировано. Кажется, мои правила проверки требуют работы! – DavidPottrell

+0

Не могли бы вы вставить свои правила проверки? –

+0

http://pastebin.com/ZsqWQPS0 – DavidPottrell

0

в $ расширение имеет расширение без точки (.). Удалить точку (.) Из расширений файлов

$extensions = array('.png', '.gif', '.jpg', '.jpeg','.PNG', '.GIF', '.JPG', '.JPEG'); 

который будет

$extensions = array('png', 'gif', 'jpg', 'jpeg','PNG', 'GIF', 'JPG', 'JPEG'); 

Надеется, что это исправляет ошибку

+0

Используя ajax @ imvain2, валидация работает сейчас. Однако при успешном представлении страница должна перенаправляться, вместо этого она просто отражается внутри контейнера сообщений об ошибках? – DavidPottrell

0

Per @ Riddell своего комментария (AJAX File Upload with PHP Validation)

проблема, скорее всего, NOT php, но фактически сам JQuery. что-то подобное может работать

var form = $('form')[0]; 
var data = new FormData(form); 

    $.ajax({ 
     url: 'upload.php', 
     data: data , 
     processData: false, 
     contentType: false, 
     type: 'POST', 
     success: function(data){ 
     alert(data); 
     } 
    }); 
+0

Используя этот код, я вернусь к исходной проблеме, вызвав первое правило проверки «Пожалуйста, выберите изображение». - Он работает с другими правилами проверки: S – DavidPottrell

+0

в вашем PHP попробуйте 'print_r ($ _ FILES);' и зайдите в консоль, чтобы проверить, даже ли файлы переданы. – imvain2

+0

Array ([uploadFile] => Array ([name] => pc-1207834.jpg [type] => image/jpeg [tmp_name] =>/tmp/phpvG4w9s [error] => 0 [size] => 657386)) Загрузите изображение – DavidPottrell

0

Правильная логика для загрузки и проверки расширения файла

if (isset($_FILES['uploadFile']) && $_FILES['uploadFile']['size'] != 0) 
{ 
    $extension = end(explode('.', $_FILES['uploadFile']['name'])); 

    if (!in_array($extension, $extensions)) 
    { 
     $err[]='Wrong file format only .png , .gif, .jpg, .jpeg are accepted'; 
    } 

    // Write code to upload image here 
} 
else 
{ 
    // There was error while uploading image 
    // $_FILES['uploadFile']['error'] gives error code 
    // 
    // Possible errors 
    // UPLOAD_ERR_OK: 0 
    // UPLOAD_ERR_INI_SIZE: 1 
    // UPLOAD_ERR_FORM_SIZE: 2 
    // UPLOAD_ERR_NO_TMP_DIR: 6 
    // UPLOAD_ERR_CANT_WRITE: 7 
    // UPLOAD_ERR_EXTENSION: 8 
    // UPLOAD_ERR_PARTIAL: 3 
} 
+0

Это работает! Единственная проблема теперь в том, что страница успеха появляется внутри сообщений об ошибках. – DavidPottrell