Json Ajax и загрузка php файлов - PullRequest
       2

Json Ajax и загрузка php файлов

0 голосов
/ 19 февраля 2019

Привет, команда, я хотел бы помочь со следующим Кодексом.Я хочу отправить форму с полями ввода текста и файла.HTML-форма отправляет данные на форму отправки, а затем данные отправляются в create_news.php.но страница не отправляет изображения, и мне не удается декодировать файл feild

<form id="articles_form" method="post" action="" enctype="multipart/form-data">

  <div class="form-group">
    <div class="input-group">
      <input type="text" name="title" placeholder="Enter Title" class="form-control" />
    </div>
  </div>
  <div class="input-group">
    <input type="text" name="date" class="form-control" id="datepicker-autoclose" placeholder="dd/mm/yyyy">
    <span class="input-group-addon"><i class="icon-calender"></i></span>
  </div>


  <div class="form-group">
    <label>Image Cover</label>
    <div class="input-group">
      <input type="file" id="file" placeholder="Article Cover" name="file" class="form-control" />
    </div>
  </div>

  <div class="input-group">
    <div class="input-group">
      <textarea id="editor" required name="content" class="form-control"></textarea>
    </div>
  </div>


  <button type="submit" name="submit" class="btn btn-success">Add New Article
                                        </button>


</form>

Я использую php, ajax и json ... с двумя страницами, одной из которых является файл javascript, и отправка данных в файл php для обработки

$(document).on('submit', '#articles_form', function() {

  // get form data
  var form_data = JSON.stringify($(this).serializeObject());

  // submit form data to api
  $.ajax({
    url: 'http://localhost/myzimbiz/admin/process/create_news.php',
    type: "POST",
    contentType: 'application/json',
    data: form_data,
    dataType: 'json', //tell the system the type of data and it is stored in ddata

    success: function(data) {
      //give feedback
      alert(data.message);

      $("#articles_form").trigger('reset'); //reset form


    },
    error: function(xhr, resp, text) {
      // show error to console
      console.log(xhr, resp, text);
    }
  });

  return false;
});

Это мой файл create_news.php, где выполняется загрузка, я не могу декодировать поля файла.

<?php

// required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");


//include the orm redbean file
include '../db.php';
// get posted data
$data = json_decode(file_get_contents("php://input"));

echo json_encode(array("message" => $data->file->name));

//move file
$stamp = time();
$uploaddir = '../images/';

$save_folder = 'images/';

$uploadfile = $uploaddir . '-' . $stamp . basename($_FILES['file']['name']);
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
    $path = $save_folder.'-' . $stamp . basename($_FILES['file']['name']);
} else {
    $path = "images/placeholder.png";
}

if(
    !empty($data->title) &&
    !empty($data->date) &&
    !empty($data->content) &&
    !empty($data->file)
)
{
    R::begin();
    try {
        //set task in database
        $article = R::dispense('about');
        $article->title = $data->title;
        $article->date = $data->date;
        $article->content = $data->content;
        $article->file = $data->file;
        $id = R::store($article);

        // set response code - 201 created
        http_response_code(201);
        // tell the user
        echo json_encode(array("message" => "Created successfully."));
    }
    catch (Exception $e) {
        if ($e->getCode() == 23000) {
            R::rollback();
        }
        echo json_encode(array("message" => "Duplicated data."));
    }

}else{
    // set response code - 503 service unavailable
    http_response_code(503);

    // tell the user
    echo json_encode(array("message" => "Unable to add content."));
}
?>

1 Ответ

0 голосов
/ 19 февраля 2019

Изменение:

 var form_data = JSON.stringify($(this).serializeObject());

На

var form_data = new FormData($("#articles_form")[0]);

Тогда ваша настройка ajax

<script type="text/javascript">
    $('document').ready(function(){ 
        $('#articles_form').on('submit',function(e){
            e.preventDefault();


            var form_data = new FormData($("#articles_form")[0]);
            form_data.append('file', $('#file')[0].files[0]);

            $.ajax({

                url: 'http://localhost/myzimbiz/admin/process/create_news.php',
                type: "POST",
                data: form_data,
                dataType: 'json',
                encode: true,
                processData: false,
                contentType: false,
                success: function(data) {
                  //give feedback
                  alert(data.message);

                  $("#articles_form").trigger('reset'); //reset form


                },
                error: function(xhr, resp, text) {
                  // show error to console
                  console.log(xhr, resp, text);
                }

            });
        });

    });

Завершить.

    <?php
//include the orm redbean file
include '../db.php';
// get posted data

//move file
$stamp     = time();
$uploaddir = '../images/';

$save_folder = 'images/';

$title   = isset($_POST['title']) ? $_POST['title'] : null;
$date    = isset($_POST['date']) ? $_POST['date'] : null;
$content = isset($_POST['content']) ? $_POST['content'] : null;
$file    = isset($_FILES['file']) ? $_FILES['file'] : null;


$uploadfile = $uploaddir . '-' . $stamp . basename($_FILES['file']['name']);


if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
    $path = $save_folder . '-' . $stamp . basename($_FILES['file']['name']);
} else {
    $path = "images/placeholder.png";
}
R::begin();
try {
    //set task in database
    $article          = R::dispense('about');
    $article->title   = $title;
    $article->date    = $date;
    $article->content = $content;
    $article->file    = $file;
    $id               = R::store($article);

    // set response code - 201 created
    http_response_code(201);
    // tell the user
    echo json_encode(array(
        "message" => "Created successfully."
    ));
}
catch (Exception $e) {
    if ($e->getCode() == 23000) {
        R::rollback();
    }
    echo json_encode(array(
        "message" => "Duplicated data."
    ));
    http_response_code(503);
}

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