Есть форма, данные которой добавляются в БД, а файлы с формы загружаются в папку upload.
Загрузка происходит на ajax.
Но как только форма отправляется, обработчик php возвращает ошибку на проверку пустоты поля с файлом.
Даже при попытке вывести его название, приходит пустая строка.
Если вешать обработчик на форму на прямую, то все работает отлично.
Если через ajax, то $_FILES пустой!
Помогите понять почему.
Сама форма:
<form class="form-horizontal addbook" enctype="multipart/form-data" id="addbookajax" method="post">
<p class="error-mess alert alert-danger"></p>
<div class="succ-mess alert alert-dismissible alert-success">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>Очень хорошо!</strong> Книга успешно добавлена
</div>
<fieldset>
<div class="form-group">
<label for="inputName" class="col-lg-2 control-label">Название</label>
<div class="col-lg-10">
<input type="text" class="form-control imp" name="name" id="inputName" placeholder="Название книги">
</div>
</div>
<div class="form-group">
<label for="inputAuthor" class="col-lg-2 control-label">Автор</label>
<div class="col-lg-10">
<input type="text" class="form-control imp" name="author" id="inputAuthor" placeholder="Кто написал книгу">
</div>
</div>
<div class="form-group">
<label for="inputObl" class="col-lg-2 control-label">Файл обложки</label>
<div class="col-lg-10">
<div class="file_upload">
<div class="form-control">Файл не выбран</div>
<button type="button" class="btn btn-info">Обзор...</button>
<input type="file" name="obl" id="inputObl" class="imp">
</div>
</div>
</div>
<div class="form-group">
<label for="inputBook" class="col-lg-2 control-label">Файл книги</label>
<div class="col-lg-10">
<div class="file_upload">
<div class="form-control">Файл не выбран</div>
<button type="button" class="btn btn-info">Обзор...</button>
<input type="file" name="bookfile" id="inputBook" class="imp">
</div>
</div>
</div>
<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<button type="submit" class="btn btn-primary">Добавить</button>
</div>
</div>
</fieldset>
</form>
На сабмите весит следующее:
var data = form.serialize();
$.ajax({
type: 'POST',
url: 'addbookinc.php',
dataType: 'json',
data: data,
beforeSend: function(data){
form.find('button[type="submit"]').width(subW).height(subH).html('<i class="fa fa-spinner fa-spin"></i>');
},
success: function(data){
if (data['error']){
form.find('.error-mess').text(data['error']).fadeIn();
}
else{
form.find('.error-mess').fadeOut();
form.find('.succ-mess').fadeIn();
form.find('input').val('');
}
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
},
complete: function(data){
form.find('button[type="submit"]').width('').height('').html('Добавить');
}
});
Ну и сам обработчик который возвращает ошибку, кину хотя бы одну проверку:
if (isset($_POST['name']) and
isset($_POST['author']) and
isset($_POST['category']) and
$_FILES['obl']['size'] > 0 and
$_FILES['bookfile']['size'] > 0 and
isset($_POST['year']) and
isset($_POST['lang']))
{}
else{
$json['error'] = 'Заполните все обязательные поля';
echo json_encode($json);
die();
}