Как удалить значения из JSON массива объектов в php? - PullRequest
0 голосов
/ 18 февраля 2020

У меня есть код PHP и JSON, как показано ниже:

PHP Код:

<?php if (!empty($_POST) && isset($_POST['savechanges']) && $_POST['savechanges'] == 1 && isset($_SESSION['pageadmin'])) {
      $output = array();     
      $output['en_desc']=$_POST['en_desc'];
      $output['code']=$_POST['code'];

      $fp = fopen('../feeds/ptp-ess_landing_scommittees.json', 'w');
      fwrite($fp, json_encode($output));
      fclose($fp);
   }
   if(file_exists('../feeds/ptp-ess_landing_scommittees.json')){
       $data = json_decode(file_get_contents('../feeds/ptp-ess_landing_scommittees.json'));
   }
?> 
<?php if($data) { ?>
    <form method="post" id="myform" style="text-align:left;">
      <input type="hidden" id="savechanges" name="savechanges" value="1">
       <div style="text-align:center; margin-right:9px; margin-bottom:24.703px;">
         <button type="submit">Save</button>
       </div>
        <?php foreach ($data->code as $key => $value) { ?>
        <div class="house-senate-committee" style="text-align:center; margin-top:15px;">
            <button type="button" onclick="removeRow(this)" style="margin-right:10px;">Delete</button>
            <input type="text" name="code[]" style="margin-right:10px;" value="<?= $data->code[$key] ?>">
            <input type="text" name="en_desc[]" value="<?= $data->en_desc[$key] ?>">
        </div>
        <?php } ?>
    </form>
<?php } else { echo 'Cannot read JSON settings file'; }?>

JSON :

{"code":["AEFA","AGFO"], "en_desc":["Foreign Affairs and International Trade","Agriculture and Forestry"]}

Следующий код DOM генерируется с помощью приведенного выше кода PHP / JSON:

DOM (HTML):

<div class="house-senate-committee" style="text-align:center; margin-top:15px;">
  <button type="button" onclick="removeRow(this)" style="margin-right:10px;">Delete</button>
  <input type="text" name="code[]" style="margin-right:10px;" value="AEFA">
  <input type="text" name="en_desc[]" value="Foreign Affairs and International Trade">
</div>

<div class="house-senate-committee" style="text-align:center; margin-top:15px;">
  <button type="button" onclick="removeRow(this)" style="margin-right:10px;">Delete</button>
  <input type="text" name="code[]" style="margin-right:10px;" value="AGFO">
  <input type="text" name="en_desc[]" value="Agriculture and Forestry">
</div>

Следующий код JS удаляет строку из DOM по нажатию кнопки удаления. При обновлении страницы удаленная строка возвращается снова, поскольку все отображается через JSON.

JS код:

<script>
function removeRow(el) {
  el.parentNode.remove();
}
</script>

Описание проблемы:

Приведенный выше код JS удаляет строка (по нажатию кнопки удаления) из DOM, но при обновлении страницы все отображается снова.

Мне интересно, какой PHP код мне нужно добавить, чтобы он удалял значения из JSON при сохранении формы при удалении строки из DOM через JS.

Шаг 1: Пользователь удаляет строку из DOM по нажатию кнопки удаления.
Шаг 2: При сохранении формы и отрисовке страницы эта удаленная строка не должна присутствовать.

Я знаю, что должен использовать функцию unset для удаления значений из JSON, но я не уверен, как интегрировать ее в форму.

unset($data->code);
unset($data->en_desc);

1 Ответ

1 голос
/ 18 февраля 2020

У вас есть опечатка здесь:

   $data = json_decode(file_get_contents('../feeds/ptp-ess_landing_scommittees.json'));

это должно быть

       $data = json_decode(file_get_contents('../feeds/ptp-ess_landing_committees.json'));

Посмотрите на "s" :)

Редактировать: вы также сохраняли новый файл, фактически не проверяя, происходит ли сообщение, вот полный код:

<?php

if (isset($_POST['submit'])) {
  $output = array();
  $output['en_desc'] = $_POST['en_desc'];
  $output['code'] = $_POST['code'];

  $fp = fopen('../feeds/ptp-ess_landing_committees.json', 'w');
  fwrite($fp, json_encode($output));
  fclose($fp);
}

if (file_exists('../feeds/ptp-ess_landing_committees.json')) {
  $data = json_decode(file_get_contents('../feeds/ptp-ess_landing_committees.json'));
}

?>
<?php if ($data) { ?>
  <form method="post" id="myform" style="text-align:left;">
    <div style="text-align:center; margin-right:9px; margin-bottom:24.703px;">
      <button type="submit" name="submit">Save</button>
    </div>
    <?php foreach ($data->code as $key => $value) { ?>
      <div class="house-senate-committee" style="text-align:center; margin-top:15px;">
        <button type="button" onclick="removeRow(this)" style="margin-right:10px;">Delete</button>
        <input type="text" name="code[]" style="margin-right:10px;" value="<?= $data->code[$key] ?>">
        <input type="text" name="en_desc[]" value="<?= $data->en_desc[$key] ?>">
      </div>
    <?php } ?>
  </form>
<?php } else {
  echo 'Cannot read JSON settings file';
} ?>

<script>
  function removeRow(el) {
    el.parentNode.remove();
  }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...