繁体   English   中英

如何将项目添加到列表并从列表中删除项目?

[英]How to add item to list and delete item from list?

I have a problem with adding a new item via HTML form and PHP to a PHP file data.json , after clicking submit on my button, my table is reloaded but my item is not saved into JSON file, can somebody tell me why?

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 中删除(取消设置)项目?

谢谢你的帮助

您的 PHP 和 HTML 代码是否在同一个文件中?

您的 PHP 代码似乎“足够正确”,可以将某些内容写入data.json文件。 这似乎表明您的 PHP 和 HTML 代码不在同一个文件中。 如果是这种情况,请更新您的 HTML <form>表单并添加指向 PHP 文件/代码的action属性。

此外,您的 PHP 代码中存在几个问题。

addToList() function 外部和内部的$data变量是两个不同的变量。

如果$data仅在 function 内部引用,则将分配移动到 function 内部,例如:

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

如果$data也在 function 之外访问,则将其作为参数传递,例如:

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

...

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

...

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

如果你的 function 是一个闭包,你可以通过use让闭包访问$data ,例如:

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

...

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

...

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

另一个问题是,您似乎打算将 append 新数据添加到数据中data.jsonid是基于元素的数量,加一),但是您的代码将 Z0ECD11C1D7A2874201D148A23BBD7 文件的内容替换为新的 A23BBD7 数据。 也许你的意思是:

...

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));
}

...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM