Как сохранять данные из формы в JSON файл?
С помощью скрипта ниже сохраняю в json файл post данные, сохраняет в таком виде:
{"name":"Bot","email":"[email protected]"}
Каждый раз при нажатии на кнопку Submit данные в json файле просто добавляются так:
{"name":"Bot","email":"[email protected]"}{"name":"Bot","email":"[email protected]"}{"name":"Bot","email":"[email protected]"}
Как сделать, чтобы данные продолжали сохраняться в валидный json файл, по этому образцу:
[{"name":"Bot","email":"[email protected]"},{"name":"Bot2","email":"[email protected]"}]
Код формы:
<?php
if(isset($_POST['submit'])) {
$file = "data.json";
$arr = array(
'name' => $_POST['name'],
'email' => $_POST['email']
);
$json_string = json_encode($arr);
file_put_contents($file, $json_string, FILE_APPEND);
// echo $json_string;
}
?>
<!doctype html>
<html>
<head>
</head>
<body>
<div style="text-align: center;">
<h1>Form</h1>
<form name="form1" method="post" action="">
<p>
<label for="name">Name: </label>
<input type="text" name="name" id="name" placeholder="Your full name" autofocus required>
</p>
<p>
<label for="email">Email: </label>
<input type="email" name="email" id="email">
</p>
<p style="text-align: center;">
<input type="submit" name="submit" id="submit" value="Submit">
</p>
</form>
</div>
</body>
</html>
Спасибо!
UP.
Добился нужного формата с помощью функций file_get_contents и str_replace но как-то криво это все (((
<?php
if(isset($_POST['submit'])) {
$file = "data.json";
$arr = array(
'name' => $_POST['name'],
'email' => $_POST['email']
);
$json_string = json_encode($arr);
file_put_contents($file, '['.$json_string.']', FILE_APPEND);
}
// Если включены строгие типы, то есть объявлено (strict_types=1);
$file = file_get_contents('data.json', true);
$file = str_replace('][', ',', $file);
echo $file;
?>
Ответы (2 шт):
Что-то вроде такого. Возможно, вам нужно создавать новый файл, если до этого данных не записывалось.
$file = "data.json";
$data = file_get_contents($file);
if (empty($data)) {
$json = [];
} else {
$json = json_decode($data, $assoc = TRUE);
}
$arr = array(
'name' => $_POST['name'],
'email' => $_POST['email']
);
array_push($json, $arr);
$json_string = json_encode($json);
file_put_contents($file, $json_string);
На ум пришли лишь 2 способа:
- Считывать весь файл и преобразовывать в массив, после чего, добавлять новую запись в массив и снова перезаписывать файл этим содержимым.
- Если записей много, то вырезать последний ']' в файле,
записывать в конец
','.$json_string.']'.
Попробуйте еще поискать в интернете знания на тему json файл как база данных. Еще можно использовать sqlLite базу данных это тоже файл и php из коробки умеет с ней работать. Если не критичен json, то можно так же заменить способ хранения на csv файл.