Привет. Здесь вы узнаете как работать с JSON в PHP. Мы напишем полноценное приложение по типу CRUD, которое уже делали, но в этот раз хранить данные в БД не будем, а запишем их и будем редактировать и удалять в JSON файле. Это уже полноценное программирование и реальный рабочий пример того, как делать запись в JSON файл. Но прежде прошу обратить ваше внимание, что с файлами мы уже работали и делали гостевую книгу. Теперь же вы сможете сделать такую же, но данные будут храниться в формате JSON вместо обычного текста и таким образом сможете сделать полноценную админку, где будете редактировать сообщения.
Напишем некий задачник или TODO лист. Традиционно подключим Bootstrap для удобства и создадим таблицу, в которой будем выводить данные из JSON файла. В ней будет всего три поля: ID записи, сама запись и кнопки редактирования и удаления. Сделаем кнопку добавления записи через модальное окно.
$todoName=htmlspecialchars($_POST['todo']);$todoName=trim($todoName);$jsonArray=[];//Если файл существует - получаем его содержимоеif(file_exists('todo.json')){$json=file_get_contents('todo.json');$jsonArray=json_decode($json,true);}// Делаем запись в файлif($todoName){$jsonArray[]=$todoName;file_put_contents('todo.json',json_encode($jsonArray, JSON_FORCE_OBJECT));header('Location: '.$_SERVER['HTTP_REFERER']);}// Удаление записи$key=@$_POST['todo_name'];if(isset($_POST['del'])){unset($jsonArray[$key]);file_put_contents('todo.json',json_encode($jsonArray, JSON_FORCE_OBJECT));header('Location: '.$_SERVER['HTTP_REFERER']);}// Редактированиеif(isset($_POST['save'])){$jsonArray[$key]=@$_POST['title'];file_put_contents('todo.json',json_encode($jsonArray, JSON_FORCE_OBJECT));header('Location: '.$_SERVER['HTTP_REFERER']);}
$todoName = htmlspecialchars($_POST['todo']);
$todoName = trim($todoName);
$jsonArray = [];
//Если файл существует - получаем его содержимое
if (file_exists('todo.json')){
$json = file_get_contents('todo.json');
$jsonArray = json_decode($json, true);
}
// Делаем запись в файл
if ($todoName){
$jsonArray[] = $todoName;
file_put_contents('todo.json', json_encode($jsonArray, JSON_FORCE_OBJECT));
header('Location: '. $_SERVER['HTTP_REFERER']);
}
// Удаление записи
$key = @$_POST['todo_name'];
if (isset($_POST['del'])){
unset($jsonArray[$key]);
file_put_contents('todo.json', json_encode($jsonArray, JSON_FORCE_OBJECT));
header('Location: '. $_SERVER['HTTP_REFERER']);
}
// Редактирование
if (isset($_POST['save'])){
$jsonArray[$key] = @$_POST['title'];
file_put_contents('todo.json', json_encode($jsonArray, JSON_FORCE_OBJECT));
header('Location: '. $_SERVER['HTTP_REFERER']);
}
Между открывающим и закрывающим тегом tbody в таблице вставляем цикл foreach:
В 4 строке $key + 1 необходим для того, чтобы в таблице записи начинались с единицы, а не с ноля, как в JSON файле. В результате у нас получится следующее:
А вот так появляются записи в JSON файле в виде объектов:
Совсем не много кода и получилось готовое приложение по работе с JSON объектами в PHP. Это пример можно скачать и установить на свой сервер. Тестируйте, добавляйте новые функции и конечно же пишите свои комментарии под статьей.
Здравствуйте. В PHP понимаю примерно чуть больше чем ноль, но есть похожая на вашу статью задача. Интересует, как вы реализовали именно второй пример. Когда есть возможность добавить сразу несколько строк в одну запись.
Спасибо вам огромное за ваш труд.
Здравствуйте Александр! Огромное спасибо за работу, подписался на ваш канал, очень полезное дело делаете. Я только встал на пусть изучения PHP. Сейчас обучаюсь фронту и параллельно смотрю уроки по php. У меня вопрос, чем-то схожий с вопросом Альберта и ситуация очень похожая 🙂 Есть потребность записывать и редактировать сразу несколько полей одной строки и не могу разобраться как это правильно сделать. Если объявить массив $jsonArray[] = [$todoName, $lastName, $item1, $item2]; То как в модальное окно добавить поля для ввода данных для переменных: $lastName, $item1, $item2? Как потом организовать их вывод в одну строку в разные поля? И еще вопрос, в вашем коде используется функция:json_decode, чтобы в json файл записывалось в UTF-8, вместо unicode куда поместить параметр: JSON_UNESCAPED_UNICODE? Буду очень рад, если у вас появится время ответить мне.
Отличная статья, помогло
Хочу купить php построчное чтение файла json
Продам.
Здравствуйте. В PHP понимаю примерно чуть больше чем ноль, но есть похожая на вашу статью задача. Интересует, как вы реализовали именно второй пример. Когда есть возможность добавить сразу несколько строк в одну запись.
Спасибо вам огромное за ваш труд.
А можно полностью php от
$jsonArray[] = [$todoName, $lastName, $item1, $item2];
как то цикл задваивает у меня….
Можно полностью код выложить? Не получается получить нужный результат.
Код весь на странице. Что именно не получается?
При добавлении еще одного столбца не получается организовать создание, сохранение и редактирование данных в нем.
Как реализована пагинация на 2 демо?
Здравствуйте Александр! Огромное спасибо за работу, подписался на ваш канал, очень полезное дело делаете. Я только встал на пусть изучения PHP. Сейчас обучаюсь фронту и параллельно смотрю уроки по php. У меня вопрос, чем-то схожий с вопросом Альберта и ситуация очень похожая 🙂 Есть потребность записывать и редактировать сразу несколько полей одной строки и не могу разобраться как это правильно сделать. Если объявить массив $jsonArray[] = [$todoName, $lastName, $item1, $item2]; То как в модальное окно добавить поля для ввода данных для переменных: $lastName, $item1, $item2? Как потом организовать их вывод в одну строку в разные поля? И еще вопрос, в вашем коде используется функция:json_decode, чтобы в json файл записывалось в UTF-8, вместо unicode куда поместить параметр: JSON_UNESCAPED_UNICODE? Буду очень рад, если у вас появится время ответить мне.