Как я могу читать / писать в один массив в json с PHP - PullRequest
0 голосов
/ 05 мая 2020

У меня есть простой скрипт, который может хранить данные в файле json. Каждый раз, когда вы сохраняете форму, она создает новый массив. Я просто хочу обновить цель и поднять ее в том же массиве.

форма:

<form action="process.php" method="POST">
Goal:<br>
<input type="text" name="goal">
<br><br/>
Raised:<br>
<input type="text" name="raised">
<br><br>
<input type="submit" value="Submit">
</form>

процесс. php

<?php

$myFile = "data.json";
$arr_data = array();

try
{      
    $formdata = array(
        'goal'=> $_POST['goal'],
        'raised'=> $_POST['raised']
    );

    $jsondata = file_get_contents($myFile);

    $arr_data = json_decode($jsondata, true);

    array_push($arr_data,$formdata);

    $jsondata = json_encode($arr_data, JSON_PRETTY_PRINT);

    if(file_put_contents($myFile, $jsondata)) {
            echo 'Data successfully saved';
        }
    else 
            echo "error";

}
catch (Exception $e) {
            echo 'Caught exception: ',  $e->getMessage(), "\n";
}

?>

Ответы [ 4 ]

2 голосов
/ 05 мая 2020
<?php

$formdata = array(
    'goal'=> $_POST['goal'],
    'raised'=> $_POST['raised']
);


try {

    $fp = fopen('data.json', 'w');
    fwrite($fp, json_encode($formdata));
    fclose($fp);

}
catch(\Exception $e) {
    // Caught Some Exception
}

Вы можете просто использовать fopen() и fwrite() для открытия и записи в файл. Данные будут заменены новыми данными.

1 голос
/ 05 мая 2020

array_push добавляет. Вы хотите заменить существующие, а не добавить, верно? Итак:

<?php

$myFile = "data.json";

try {      
    $arr_data = json_decode(file_get_contents($myFile), true);

    // don't forget to validate first of course:
    $arr_data['goal'] = $_POST['goal'];
    $arr_data['raised'] = $_POST['raised'];

    $jsondata = json_encode($arr_data, JSON_PRETTY_PRINT);

...
0 голосов
/ 05 мая 2020

Когда вы выполняете $arr_data = json_decode($jsondata, true);, $arr_data становится ассоциативным массивом, это означает, что вы можете просто выполнить $arr_data['goal'] = $_POST['goal'] или $arr_data['goal'] = $formdata['goal'], после чего вы можете перекодировать массив и сохранить его в свой файл. Таким образом, вам нужно только переключить строку с вызовом array_push() на код, который я только что объяснил. Это работает как для ключей 'goal', так и 'raised'

0 голосов
/ 05 мая 2020

Для архива этот file_put_contents не очень поможет.

Каждый раз, когда кто-то отправляет данные из формы, вы должны открывать свой файл (data. json) в режиме добавления (a). затем напишите свой контент, используя fwrite или fopen.

В этом случае вы получите весь единый набор данных как отдельный массив. Ни одного массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...