How to crud with Json using PHP

Asked

Viewed 139 times

1

I’m starting a php Emm studies and want to be able to do a crud using a json. I already managed to create the file and write in it, I can also read the data. But I’m having a problem. The first time, when I play the file and throw the data in it empty, it works well, but the second time, the file already brings me a wrong structure of the json file. How can I fix this?

My code:

<?php

if(isset($_POST['submit'])) {    
    $nome = $_POST['nome'];
    $email = $_POST['email'];
    $telefone = $_POST['telefone'];

    $dados_preenchidos = array(
        'codigo'   => rand(1000, 9999)."",
        'nome'     => $nome,
        'email'    => $email,
        'telefone' => $telefone
    );

    $dados = array($dados_preenchidos);
    $dados_json = json_encode($dados);
    $fp = fopen("bd/dados.json", "a");
    $escreve = fwrite($fp, $dados_json);
    fclose($fp);

    header('Location: index.php');
}
?>

Sore o JSON:

At first, it creates and generates the data like this:

[{"code":"3709","name":"Samuel","email":"[email protected]","phone":"123456789"}]

All right, that’s correct and it appears on the screen for me straight, but when I enter a second record, it looks like this:

[{"code":"3709","name":"teste1","email":"[email protected]","phone":"1234567897"}][{"code":"8718","name":"teste2","email":"[email protected]","phone":"789456123"}]

Notice that the "[" repeats itself, when it should be like this:

[{"code":"3709","name":"teste1","email":"[email protected]","phone":"1234567897"},{"code":"8718","name":"teste2","email":"[email protected]","phone":"789456123"}]

I did the test by changing the hand to the correct form and the code worked perfectly...

How I do?

2 answers

1


Another possibility is the following:

<?php

if (isset($_POST['submit'])) {

    $nome = $_POST['nome'];
    $email = $_POST['email'];
    $telefone = $_POST['telefone'];

    $dados_preenchidos = array(
        'codigo' => rand(1000, 9999) . "",
        'nome' => $nome,
        'email' => $email,
        'telefone' => $telefone
    );

    $dados_preenchidos = array($dados_preenchidos);
    $dados_recuperados = array();

    //Verifica se um arquivo existe
    if (file_exists("bd/dados.json")) {

        //Lê o conteúdo do arquivo e retona em uma string
        $content = file_get_contents("bd/dados.json");
        if ($content) {
            //Decodifica uma string JSON, passando o parametro true o object retornado será convertido em array associativo.
            $arrayContent = json_decode($content, true);
            foreach ($arrayContent as $valor) {
                //Adiciona o array valor no final do array dados recuperados
                array_push($dados_recuperados, $valor);
            }
        }
    }

    //combina os arrays
    $dados_merge = array_merge($dados_preenchidos, $dados_recuperados);
    $dados_json = json_encode($dados_merge);

    $fp = fopen("bd/dados.json", "w");
    $escreve = fwrite($fp, $dados_json);
    fclose($fp);

    header('Location: index.php');
} ?>

0

Hello, Samuk you can work as follows (I commented the code to make it easy to understand):

<?php
if(isset($_POST['submit'])) { 
    $nome = $_POST['nome'];
    $email = $_POST['email'];
    $telefone = $_POST['telefone'];

    // Atribui o conteúdo do arquivo para variável $arquivo
    $arquivo = file_get_contents('bd/dados.json');

    // Decodifica o formato JSON e retorna um Objeto
    $dados_preenchidos = json_decode($arquivo);

    //acrescenta a informação que precisa no Objeto
    $dados_preenchidos[] = array(
        'codigo'   => rand(1000, 9999)."",
        'nome'     => $nome,
        'email'    => $email,
        'telefone' => $telefone
    );

//codifica em json
$dados_json = json_encode($dados_preenchidos);

//salva o arquivo
    file_put_contents("bd/dados.json",$dados_json);
}
?>

I hope I’ve helped

  • Leandro, thank you for the reply, but you made an error in your code, on the line $dados_json = json_encode($dados_preenchidos);, the mistake is this: Parse error: syntax error, unexpected '$dados_json' (T_VARIABLE)

  • corrected. Missed one ; in line above; Can test

  • Dude. It still didn’t work, error on that line now: $arquivo = file_get_contents('dados.json');

  • bd/data.json I will change the response

  • I saw it, and I tried to change it too, but continued with the error kkk

Browser other questions tagged

You are not signed in. Login or sign up in order to post.