PHP JSON. Запись, чтение и редактирование JSON файла. Пишем полноценное приложение

    Один комментарий 1798

php json

Привет. Здесь вы узнаете как работать с JSON в PHP. Мы напишем полноценное приложение по типу CRUD, которое уже делали, но в этот раз хранить данные в БД не будем, а запишем их и будем редактировать и удалять в JSON файле. Это уже полноценное программирование и реальный рабочий пример того, как делать запись в JSON файл. Но прежде прошу обратить ваше внимание, что с файлами мы уже работали и делали гостевую книгу. Теперь же вы сможете сделать такую же, но данные будут храниться в формате JSON вместо обычного текста и таким образом сможете сделать полноценную админку, где будете редактировать сообщения.

Напишем некий задачник или TODO лист. Традиционно подключим Bootstrap для удобства и создадим таблицу, в которой будем выводить данные из JSON файла. В ней будет всего три поля: ID записи, сама запись и кнопки редактирования и удаления. Сделаем кнопку добавления записи через модальное окно.

Демо

Весь HTML здесь приводить не буду, он получился довольно массивный. Пример вы можете скачать по ссылке в конце статьи? а так же посмотреть видеоурок.

1
2
3
4
5
6
7
8
9
10
11
12
<button class="btn btn-success mb-1" data-toggle="modal" data-target="#exampleModal"><i class="fas fa-plus-circle"></i></button>
<table class="table table-bordered">
  <thead class="table-dark">
    <tr>
      <th scope="col"></th>
      <th scope="col">Задача</th>
      <th scope="col">Действие</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

TODO list
Модальное окно:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!--Modal-->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="exampleModalLabel">Добавить запись</h5>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">
                <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"  method="post">
                    <div class="input-group">
                        <input type="text" class="form-control" name="todo" />
                    </div>
            </form></div>
            <div class="modal-footer">
                <button class="btn btn-primary send" data-send="1">Создать</button>
            </div> 
        </div>
    </div>
</div>
<!--Modal-->

А вот и сам PHP код, который делает всю магию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
 < ?php
   foreach ($jsonArray as $key => $todo): ?>
   <tr>
    <th scope="row">< ?php echo $key + 1 ;?></th>
    <td>< ?php echo $todo; ?></td>
    <td>
   <button type="submit" class="btn btn-sm btn-success" data-toggle="modal" data-target="#edit<?php echo $key;?>"><i class="fas fa-edit"></i></button>
   <button class="btn btn-sm btn-danger" data-toggle="modal" data-target="#delete<?php echo $key;?>"><i class="fas fa-trash-alt"></i></button>
<!--Modal delete-->
<div class="modal fade" id="delete<?php echo $key;?>" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
  <div class="modal-content">
     <div class="modal-header">
     <h5 class="modal-title" id="exampleModalLabel">Вы хотите удалить запись №< ?php echo $key + 1 ;?></h5>
     <button type="button" class="close" data-dismiss="modal" aria-label="Close">
       <span aria-hidden="true">&times;</span>
     </button>
      </div>
     <div class="modal-body ml-auto">
      <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"  method="post">
        <div class="input-group">
           <input type="hidden" name="todo_name" value="<?php echo $key; ?/>">
        </div>
          <button class="btn btn-danger del" name="del">Удалить</button>
        </form></div>
 
      </div>
     </div>
    </div>
<!--Modal delete-->
<!--Modal Edit-->
<div class="modal fade" id="edit<?php echo $key;?>" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
     <div class="modal-content">
      <div class="modal-header">
       <h5 class="modal-title" id="exampleModalLabel">Изменить запись</h5>
       <button type="button" class="close" data-dismiss="modal" aria-label="Close">
        <span aria-hidden="true">&times;</span>
       </button>
      </div>
     <div class="modal-body">
      <form action="" method="post" class="mt-2">
        <div class="input-group">
           <input type="text" class="form-control" name="title" value="<?php echo $todo; ?/>">
         </div>
           <input type="hidden" name="todo_name" value="<?php echo $key;?/>">
          <div class="modal-footer">
             <button type="submit" name="save" class="btn btn-sm btn-success p-1 pt-0" data-target="#edit<?php echo $key;?>">Обновить</button>
          </div>
       </form>
      </div>
     </div>
    </div>
<!--Modal Edit-->
  </div></td>
  </tr>
< ?php endforeach; ?>

В 4 строке $key + 1 необходим для того, чтобы в таблице записи начинались с единицы, а не с ноля, как в JSON файле. В результате у нас получится следующее:

todo_php
А вот так появляются записи в JSON файле в виде объектов:
json-obj

Совсем не много кода и получилось готовое приложение по работе с JSON объектами в PHP. Это пример можно скачать и установить на свой сервер. Тестируйте, добавляйте новые функции и конечно же пишите свои комментарии под статьей.

СКАЧАТЬ

Добавить страницу в закладки

1 комментарий
  1. Артем:

    Отличная статья, помогло

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *