Отправка файла в БД - PHP AJAX
проблема заключается в том, что когда я использую ajax, то у меня не загружаются файлы на хостинг и не добавляется имя файла в БД, но при этом текст который пользователь водит, добавляется в БД. Если же я не использую ajax, то всё работает. Подскажите пожалуйста в чём проблема!!!!!! (Может быть такое, что я не туда вставил php код отправки файла, в этом я нуб).
Очень нужна помощь!!!
PHP
<form id="form-post-feed" method="POST" enctype="multipart/form-data">
<div class="post-feed">
<textarea name="text" type="text" rows="1" placeholder="Введите текст"></textarea>
<input id="postUploadFileInput" class="post-upload-file-input" type="file" name="image"></input>
<label for="postUploadFileInput" class="post-upload-file-label"></label>
<button class="post-send" type="submit" id="send" name="send"></button>
</div>
</form>
post-script.php (Работает с БД и файлом, а ajax на него ссылается)
$data = $_POST;
$errors = array();
if( empty($errors) )
{
$posts = R::dispense('posts');
$posts->text = $data['text'];
$posts->image = $_FILES['image']['name'];
$user->ownPostsList[] = $posts;
R::store($posts);
}
if(move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'\post_image\\'.$_FILES['image']['name'])) {
} else {
echo '<p>Ошибка загрузки поста!</p>';
}
$response_post_feed = [
"status" => true
];
echo json_encode($response_post_feed);
JS
$('#form-post-feed').submit(function(e) {
e.preventDefault();
$.ajax({
url: '/post-script',
method: 'POST',
dataType: 'json',
data: $('#form-post-feed').serialize(),
success: function(data){
if (data.status) {
console.log('OK');
} else {
console.log('Error');
}
}
});
});
А вот PHP код, который отлично работает без AJAX
$data = $_POST;
if (isset($data["send"])) {
$errors = array();
if( empty($errors) )
{
$posts = R::dispense('posts');
$posts->text = $data['text'];
$posts->image = $_FILES['image']['name'];
$user->ownPostsList[] = $posts;
R::store($posts);
echo '<p>Вы отправили пост!</p>';
}
if(move_uploaded_file($_FILES['image']['tmp_name'], __DIR__.'\post_image\\'.$_FILES['image']['name'])) {
} else {
echo '<p>Ошибка загрузки поста!</p>';
}
}
<form action="/posts" id="form-post-feed" method="POST" enctype="multipart/form-data">
<div class="post-feed">
<textarea name="text" type="text" rows="1" placeholder="Введите текст"></textarea>
<input id="postUploadFileInput" class="post-upload-file-input" type="file" name="image"></input>
<label for="postUploadFileInput" class="post-upload-file-label"></label>
<button class="post-send" type="submit" id="send" name="send"></button>
</div>
</form>
Ответы (1 шт):
Автор решения: XdHideoAppa
→ Ссылка
Оказывается всё просто! Нашел ответ тут.
$('#form-post-feed').submit(function(e) {
e.preventDefault();
var file_data = $('#postUploadFileInput').prop('files')[0];
var form_data = new FormData();
form_data.append('image', file_data);
form_data.append('text', $("#postText").val());
$.ajax({
url: '/post-script',
type: 'post',
dataType: 'json',
cache: false,
contentType: false,
processData: false,
data: form_data,
success: function(result){
alert(result);
}
});
});