Добавление данных в json, через форму

303
23 марта 2017, 22:29

Почему после отправки корректных данных, файл data.json не дополняется?

Изначальный файл json

[
    {
        "email" : "test@test.ru",
        "age" : 18
    } 
]

Я проверил, если после $data[] = ['email' => $email, 'age' => $age];

вставить

echo '<pre>';         
var_dump($data);        
echo '</pre>';

то на экране показывает, то, что файл дополнился, а если его открыть, то он не изменён. Почему?

Может проблема в путях $fileName?

<?php
if($_POST){ 
    $error =[];
    $options = [
        'options' => [
            'min_range' => 18,
            'max_range' => 70
        ]
    ];
    $age = filter_input(INPUT_POST, 'age', FILTER_VALIDATE_INT, $options);
    if($age === false){
        $error[] = 'Поле возраст должно быть больше 0 и меньше 70';
    }
    $email= isset($_POST['email']) ? $_POST['email'] : '';
    $email = filter_var($email, FILTER_VALIDATE_EMAIL);
    if($email === false){
        $error[] = 'Поле Email не корректное';
    }
    //если нет ошибок, то значения в поля не подставлять
    if(!$error){
        $fileName = __DIR__  . '\data.json';
        $data = json_decode(file_get_contents($fileName), true);
        $data[] = ['email' => $email, 'age' => $age];
        echo '<pre>';
        var_dump($data);
        echo '</pre>';
        //если не записали файл
        if(!file_get_contents($fileName, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))){
            $error[] = 'Ну удалось сохранить данные';
        }
        //это только пример, писать так не нужно
        if(!$error){
            //header("Location:./form3.php");
        }
    }
}
$fileName = __DIR__  . '\data.json';
$data = json_decode(file_get_contents($fileName), true);
echo '<pre>';
var_dump($data);
echo '</pre>';
?>
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Обработка форм</title>
    </head>
<body>
<?php 
if($_POST){?>
    <?php foreach($error as $error): ?>
        <p><?php echo $error ?></p>
<?php endforeach; }?> 
    <form action="form3.php" method="post">
        <label for="email">Email</label>
        <input id="email" type="text" name="email" value="<?php echo isset($_POST['email']) ? $_POST['email'] : '';?>" placeholder="Email">

        <label for="age">Возраст</label>
        <input id="age" type="text" name="age" value="<?php echo isset($_POST['age']) ? $_POST['age'] : '';?>" placeholder="Возраст">
        <input type="submit" value="Войти">
    </form>
<body>
</html>
Answer 1
//если не записали файл
if(!file_get_contents($fileName, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))){
    $error[] = 'Ну удалось сохранить данные';
}

Здесь происходит чтение файла, а не запись.

READ ALSO
Авторизация между доменом и субдоменом

Авторизация между доменом и субдоменом

Пытаюсь реализовать авторизацию между моби десктоп версиями сайта

147
Подключение к Ldap-серверу на php

Подключение к Ldap-серверу на php

Ребят нужно с помощью php подключиться к Ldap-серверу в локальной сети и вывести все что там есть, вопрос вывода я решу, а вот как подключиться...

253
Как грамотно усечь массив (PHP)

Как грамотно усечь массив (PHP)

Есть большой многомерный массивКлючи могут быть разные

225
Ограничение на вызов скрипта php

Ограничение на вызов скрипта php

Есть скрипт, который может иногда вызываться по несколько раз в секундуВ этом скрипте стоит curl запрос на сторонний сайт

196