Как добавить элемент в список и удалить элемент из списка?

#javascript #php #json

#javascript #php #json

Вопрос:

У меня проблема с добавлением нового элемента через HTML-форму и PHP в файл data.json PHP, после нажатия submit на мою кнопку моя таблица перезагружается, но мой элемент не сохраняется в файле JSON, может кто-нибудь сказать мне, почему?

PHP:

 $jsonData = file_get_contents("data.json");
$data = json_decode($jsonData, true);

function addToList() {
  $file = "data.json";
  $arr = array(
    'id' => count($data)   1,
    'name' => $_GET['name'],
    'price' => $_GET['price'],
    'buyer' => $_GET['buyer']
  );
  $json_string = json_encode($arr);
  file_put_contents($file, $json_string);
}

if(array_key_exists('button1', $_POST)) {
  addToList();
}
 

HTML:

 <form method="get">
  <div id="form_page">
    <div id="form_body">
      <input id="name" type="text" Placeholder="Nazwa" name="name" required>
      <input type="number" placeholder="Cena" name="price" required>
      <input id="buyer" type="text" name="buyer" placeholder="Kupujący">
      <input type="submit" value="Wyślij">
    </div>
  </div>
  <div class="modal-footer">
    <button type="button" name="button1" class="btn btn-secondary" data-dismiss="modal">Zamknij</button>
  </div>
</form>
 

и у меня есть еще один вопрос, как удалить (отменить установку) элементы из JSON?

спасибо за любую помощь

Комментарии:

1. Форма не знает, что делать со значениями без action атрибута . Вам нужно будет указать путь к PHP-скрипту в этом атрибуте.

Ответ №1:

Ваш PHP и HTML-код находятся в одном файле?

Ваш PHP-код кажется «достаточно правильным», чтобы записать что-то в data.json файл. Похоже, это указывает на то, что ваш PHP и HTML-код не находятся в одном файле. Если это так, обновите свою HTML <form> -форму и добавьте action свойство, указывающее на файл / код PHP.

Кроме того, у вас есть несколько проблем в вашем PHP-коде.

$data Переменные вне и внутри addToList() функции — это две разные переменные.

Если на $data него ссылаются только внутри функции, переместите назначение внутри функции, например:

 function addToList() {
    $file = "data.json";
    $jsonData = file_get_contents($file);
    $data = json_decode($jsonData, true);
    ...
}
 

Если $data доступ также осуществляется вне функции, передайте его в качестве параметра, например:

 $jsonData = file_get_contents("data.json");
$data = json_decode($jsonData, true);

...

function addToList(array $data) {
    ...
}

...

if (array_key_exists('button1', $_POST)) {
  addToList($data);
}
 

Если ваша функция является замыканием, вы можете предоставить замыканию доступ к $data via use , например:

 $jsonData = file_get_contents("data.json");
$data = json_decode($jsonData, true);

...

$addToList = function () use ($data) {
    ...
}

...

if (array_key_exists('button1', $_POST)) {
  $addToList($data);
}
 

Другая проблема заключается в том, что, похоже, вы намерены добавить новые данные в data.json ( id основано на количестве элементов плюс один), но ваш код заменяет содержимое файла JSON только новыми данными. Возможно, вы имели в виду:

 ...

function addToList(array $data) {
  $data[] = [
    'id' => count($data)   1,
    'name' => $_GET['name'],
    'price' => $_GET['price'],
    'buyer' => $_GET['buyer']
  ];

  file_put_contents("data.json", json_encode($data));
}

...