@Goldbergg

Как загрузить файл и данные на сервер через AJAX?

Нужно загрузить в БД картинку и 2 записи из формы. Отправляю данные асинхронно с помощью AJAX, в общем файл загружается в нужную мне директорию на сервере, но запись в БД не создается

Код формы

<form id="myform" action="form1.php" method="POST" enctype=multipart/form-data>
                <div class="adminEditContent">
                <label for="image" class="imageButton">Превью</label>
                <input style="opacity: 0; z-index: -1;" type="file" name="image" id="image" accept=".gif, .jpg, .png, .svg" multiple="multiple">

                <input class="nameInput" name="nameInput" type="text" placeholder="Заголовок новини">
                <div class="btnsPanel">
                    <div class="btnAddPhoto"><img style="width: 1.5vw;" src="img/picture.svg" alt=""></div>
                    <div class="btnAddPhoto"><img style="width: 1.5vw;" src="img/videoActive.svg" alt=""></div>
                </div>
                <textarea class="newsText" name="newsText"  placeholder="Текст новини" cols="30" rows="10"></textarea>
                <input type="submit" name="sendButton" value="Опублікувати" class="sendButton">
            </div>
            </form>


Код AJAX

$(document).ready(function(e){
                $("#myform").on('submit',(function(e){
                    var form_data = new FormData(this);
                    e.preventDefault();
                    $.ajax({
                        url:"form1.php",
                        type:"POST",
                        data:  form_data,
                        contentType:false,
                        cache:false,
                        processData:false,
                        beforeSend:function()
                        {
                            //$("#preview").fadeOut();
                            $("#err").fadeOut();
                        },
                        success:function(data)
                        {
                            if(data=='invalid')
                            {
                                // неверный формат файла.
                                $("#err").html("Invalid File !").fadeIn();
                            }
                            else
                            {
                                // просмотрзагруженногофайла.
                                $("#preview").html(data).fadeIn();
                                $("#myform")[0].reset();
                            }
                        },
                        error:function(e)
                        {
                            $("#err").html(e).fadeIn();
                        }
                    });
                }));
            });


Файл form1.php
<?php
require '../db.php';
$data = $_POST;

header('Content-Type: application/json; charset=utf-8');

if ($data) {
    $valid_extensions=array('jpeg','jpg','png','gif','bmp','pdf','doc','ppt');// valid extensions
    $path='uploads/';// upload directory

    if(!empty($data['name'])||!empty($data['email'])||$_FILES['image'])
    {
        $img=$_FILES['image']['name'];
        $tmp=$_FILES['image']['tmp_name'];

// получаемрасширениезагруженногофайла
        $ext=strtolower(pathinfo($img,PATHINFO_EXTENSION));

// можем загрузить и изображение с помощью функции rand
        $final_image=rand(1000,1000000).$img;

// проверяемформат
        if(in_array($ext,$valid_extensions))
        {
            $path=$path.strtolower($final_image);

            if(move_uploaded_file($tmp,$path))
            {

//включаем файл конфигурации базы данных
                $news = R::dispense('news');
                $news->news_title = $data['nameInput'];
                $news->news_preview = $path;
                $news->news_date = date('Y-m-d');
                $news->news_text = $data['newsText'];
                R::store($news);

//выводим $insert?'ok':'err';
            }
        }
        else
        {
            echo 'invalid';
        }
    }
}
  • Вопрос задан
  • 287 просмотров
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) $data = $_POST; - тупая трата памяти.
2)
header('Content-Type: application/json; charset=utf-8');
Вы еще ничего не сделали, и уже выводите заголовки. Зачем?
3) if ($data) { если дата что? Всегда давайте осмысленные кодовые описания, например !empty()
4) Проверяете переменные $_POST, но $_FILES не проверяете? Нааайс... Как то уже определитесь...
5) Вишенка на торте - в инпутах имена nameInput и newsText, однако на сервере мы упорно ищем поля name и email (????).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы