Statustext: не определено с status: 200 с использованием Axios для передачи значений ввода текста с использованием реагирующего собственного сервера XAMPP - PullRequest
0 голосов
/ 15 февраля 2019

Сообщение об ошибке: я не понимаю предупреждение.

"<br />
<b>Warning</b>:  Header may not contain more than a single header, new line detected in <b>/Applications/XAMPP/xamppfiles/htdocs/rest_api_myblog/api/post/create.php</b> on line <b>8</b><br />
<br />
<b>Notice</b>:  Undefined property: stdClass::$title in <b>/Applications/XAMPP/xamppfiles/htdocs/rest_api_myblog/api/post/create.php</b> on line <b>25</b><br />
<br />
<b>Notice</b>:  Undefined property: stdClass::$author in <b>/Applications/XAMPP/xamppfiles/htdocs/rest_api_myblog/api/post/create.php</b> on line <b>27</b><br />
<br />
<b>Notice</b>:  Undefined property: stdClass::$category_id in <b>/Applications/XAMPP/xamppfiles/htdocs/rest_api_myblog/api/post/create.php</b> on line <b>28</b><br />
<br />
<b>Warning</b>:  strip_tags() expects parameter 1 to be string, object given in <b>/Applications/XAMPP/xamppfiles/htdocs/rest_api_myblog/models/Post.php</b> on line <b>99</b><br />
{"message":"Post Created"}"

Axios

 onCreate = event => {
        event.preventDefault();  
        let cat_id = (this.state.cat + 1);
        const body = {
           'author' :this.state.author,
          'title': this.state.title,
          'body' : this.state.body,
          'category_id':String(cat_id)
        };
        console.log(body);
        axios.post(`http://localhost/rest_api_myblog/api/post/create.php`,{
        headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/x-www-form-urlencoded'
         }, 
        body})
        .then(res => {console.log(res)
        })
        .catch(e => console.log(e));
      }

Не было ни одной ошибки при публикации с использованием POSTMAN, но сразу же я пытался с внешнего интерфейса.Я получаю сообщение "Создано" с предупреждениями, указанными выше, и сообщение не создано, кроме даты и идентификатора (autoIncrement)

PHP: это моя функция создания

public function create(){
    //create query
    $query ='INSERT INTO '. $this->table .' SET title = :title,body = :body, author = :author, category_id = :category_id';

       //prepare statement 
       $stmt = $this->conn->prepare($query);

       //clean data 
       $this->title = htmlspecialchars(strip_tags($this->title));
       $this->body = htmlspecialchars(strip_tags($this->body));
       $this->author = htmlspecialchars(strip_tags($this->author));
       $this->category_id = htmlspecialchars(strip_tags($this->category_id));
        //bind data 
        $stmt->bindParam(':title', $this->title);
        $stmt->bindParam(':body', $this->body);
        $stmt->bindParam(':author', $this->author);
        $stmt->bindParam(':category_id', $this->category_id);

        // Execute query 
        if($stmt->execute())
            {
                return true;
            }
        // Print error if something goes wrong 
        printf("Error: %s.\n", $stmt->error);
        return false;
}

API: Create.php

<?php

// Headers 
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
//add more for creating  a post 
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: Access-Control-Allow-headers,
Content-Type, Access-Control-Allow-Methods,
Authorization, X-Requested-with');

include_once '../../config/Database.php';
include_once '../../models/Post.php';

//Instantiate DB & connect
$database = new Database();
$db =$database->connect();

//initiate blog post object
$post = new Post($db);

//we need to get the data was posted 
//Get the raw posted data 
$data =json_decode(trim(file_get_contents("php://input")));
$post->title = $data->title;
$post->body = $data->body;
$post->author = $data->author;
$post->category_id = $data->category_id;

//create post 
if($post->create()) {
    echo json_encode(
      array('message' => 'Post Created')
    );
} else{
    echo json_encode(
        array('message' => 'Post not created!')
    );
} 

1 Ответ

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

Обычно это происходит, когда неправильно передаются параметры тела.Я предложу, если вы можете использовать fetch вместо axios, а также ввести JSON.stringify (body).Тем не менее, я переписал код для вас.

    onCreate = event => {
    event.preventDefault();  
    let cat_id = (this.state.cat + 1);
    const someValue = {
       'author' :this.state.author,
      'title': this.state.title,
      'body' : this.state.body,
      'category_id':String(cat_id)
    };

    fetch(`http://localhost/rest_api_myblog/api/post/create.php`,
    { method: 'POST',
      headers: {
        'Accept':'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify(someValue)})
    .then(res => {console.log(res)
    })
   .catch(e => console.log(e));
   this.setState({
     author: " ", 
     title: "",

   });
  }
...