@WebNerd
It's time to hunt

Как поменять элемент в массиве в PHP?

Впервые работаю c PHP. У меня абсолютно нет желания лезть в дебри бекенд разработки. Все что я хочу, это уже доделать свой проект, где php оказался необходим.А именно, мне нужно понять, как правильно обрабатывать PUT запрос из fetch с помощью PHP.

Есть такой JSON файл на сервере:
{
  "data": [
    {
      "scale": "100%",
      "tumbler": "100%",
      "effects": "none",
      "nickname": "1",
      "description": "",
      "likes": "0",
      "comments": [],
      "id": 1
    }
  ]


Есть код с PHP. Какой уж смог написать:
<?php
$method = $_SERVER['REQUEST_METHOD'];
$data_json = file_get_contents('data.json');

if ($method == 'POST'){
    $input = json_decode(file_get_contents("php://input"), true);
    
    $dataPost = json_decode($data_json, true);
    $dataPost['data'][] = $input;
    
    file_put_contents('data.json', json_encode($dataPost));
    $file = file_get_contents('data.json'); 
    echo $file;

    unset($file);
    unset($dataPost);

} elseif ($method == 'GET'){ 
    $decoded_json = json_decode($data_json, true);
    
    $data = $decoded_json['data'];
    
    echo json_encode($data);
    
    // Method is GET
} elseif ($method == 'PUT'){
     $input = json_decode(file_get_contents("php://input"), true);
    
     $dataPost = json_decode($data_json, true);
     
     $idPost = $input['id'];
     
     $replacements = array($idPost => $input);
     
     $newInput = array_replace($dataPost[$idPost], $input);
     
     file_put_contents('data.json', json_encode($newInput));
     
     $file = file_get_contents('data.json'); 
     
     echo $file;

     unset($file);
     unset($dataPost);
} 
?>


Есть самый обычный fetch Javascript код для отправки запроса:

const URL = '../json.php';

const request = (onSuccess, onError, method, data) => {
    fetch(URL, {
        method: method,
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json',
        },
        body: data
    })
    .then((response) => response.json())
    .then((response) => {
        onSuccess(response);
    })
    .catch((error) => {
        onError(error);
    })
};

export { request }

Особо вникать в JS смысла нет.

Ну и говоря о главном: GET и POST Запросы работаю как надо. Их не сложно было реализовать, а вот PUT не работает вообще никак. Он просто удаляет весь JSON Объект и возвращает в JSON null.
При отправке PUT запроса, отправляется отдельный объект, который я изменил каким-то образом. Добавил лайки или, к рпимеру, добавил комментарии. Суть в том, что измененный объект должен менять объект внутри data массива. В PUT видно, что я там чет пытаюсь в таком духе сделать:
$replacements = array($idPost => $input);
     
$newInput = array_replace($dataPost[$idPost], $input);

Но я не знаю, как работает ли оно правильно, ибо дебажить PHP я не умею. Я не знаю, что, к примеру, получает $newInput.
Кароч, переходя к главному, как тут реализовать можно PUT?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
@WebNerd Автор вопроса
It's time to hunt
Решение нашел:
elseif ($method == 'PUT'){
     $input = json_decode(file_get_contents("php://input"), true);
    
     $dataPost = json_decode($data_json, true);
     
     $idPost = $input['mineId'];
     
     $replacements = array($idPost - 1 => $input);
     
     $newInput = array_replace($dataPost['data'], $replacements);
     $obj = (object) array('data' => $newInput);

     file_put_contents('data.json', json_encode($obj));
     
     $file = file_get_contents('data.json'); 
     
     echo $file;

     unset($file);
     unset($dataPost);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@pantsarny
В fetch PUT body вы отправляете строку в json?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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