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