IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer le N° d'enregistrement d'un fichier JSON


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2021
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Récupérer le N° d'enregistrement d'un fichier JSON
    Bonjour,

    Je souhaite accéder aux numéros des entrées de mon fichier JSON.
    Lorsque je fais un json_decode, j'accède directement aux éléments comme identifiant, prenom, nom, mot_de_passe (voir code ci-après) alors que je souhaite accéder aux numéros 0 ou 2 présents juste au-dessus de l'élément nommé identifiant.
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    {
        "0": {
            "identifiant": "utilisateur 1",
            "prenom": "xxx",
            "nom": "xxx",
            "mot_de_passe": "xxx"
        },
        "2": {
            "identifiant": "utilisateur 2",
            "prenom": "xxx",
            "nom": "xxx",
            "mot_de_passe": ""
        }
    }

    J'accède toujours au contenu que je mette true ou false dans le code json_decode($utilisateurs , true); pour obtenir un tableau ou un objet, mais jamais aux numéros d'enregistrement.
    C'est la première fois que j'utilise le format JSON, je suis plus habitué au format XML. Toute la documentation lue sur Internet me donne la fonction json_decode mais je ne comprends pas comment arriver à mes fins.

    Le but étant de pouvoir gérer des utilisateurs sans passer par une base de données. J'arrive à créer une nouvelle entrée, mais lorsque je modifie ou supprime un enregistrement, j'obtiens un décalage du n° ID, ce qui fait que je modifie ou je supprime un mauvais utilisateur.
    Par exemple, utilisateur 2 dans le fichier JSON est l'entrée N°2 mais dans mon script PHP je boucle en commençant par 0, donc c'est l'entrée N°1. Pour être "propre" et sécuriser le script, je préférerais donc accéder à l'information JSON plutôt que de me baser sur un index calculé dans ma boucle.

    Voici mon code PHP :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    header('Content-Type: text/html; charset=utf-8');
    $utilisateurs = file_get_contents("utilisateurs.json");
    $utilisateurs = json_decode($utilisateurs , true);
    if($_POST["action"] == "CREATION")
    {
      // Création d'un utilisateur
      $utilisateur = array (
        "identifiant" => $_POST["identifiant"],
        "prenom" => $_POST["prenom"],
        "nom" => $_POST["nom"],
        "mot_de_passe" => password_hash($_POST["mot_de_passe"] , PASSWORD_DEFAULT)
      );
      $utilisateurs[] = $utilisateur;
    }
    if($_POST["action"] == "MODIFICATION")
    {
      // Modification d'un utilisateur
      $utilisateur = $utilisateurs[$_POST["id"]]; 
      $utilisateur = array (
        "identifiant" => $_POST["identifiant"],
        "prenom" => $_POST["prenom"],
        "nom" => $_POST["nom"],
        "mot_de_passe" => password_hash($_POST["mot_de_passe"] , PASSWORD_DEFAULT)
      );
      $utilisateurs[$_POST["id"]] = $utilisateur;
    }
    if(isset($_GET['identifiant'])) {
      unset($utilisateurs[$_GET['identifiant']]);
    }
    $utilisateurs = json_encode($utilisateurs, JSON_PRETTY_PRINT);
    file_put_contents('utilisateurs.json', $utilisateurs);
    header('location: index.php');
    ?>

    Je vous remercie par avance pour l'attention que vous porterez à mon message et j'espère que mes explications sont claires.

    Cordialement,

    Kristien

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    mais lorsque je modifie ou supprime un enregistrement, j'obtiens un décalage du n° ID
    Hum, tu mélanges un peu numéro d'index et identifiant.

    Dans ta structure, tu voudrais que l'identifiant de l'utilisateur soit aussi en clef d'accès ?

    Il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    {
        "utilisateur 1": {
            "identifiant": "utilisateur 1",
            "prenom": "xxx",
            "nom": "xxx",
            "mot_de_passe": "xxx"
        },
        "utilisateur 2": {
            "identifiant": "utilisateur 2",
            "prenom": "xxx",
            "nom": "xxx",
            "mot_de_passe": ""
        }
    }
    Ainsi tu accèdes rapidement à un utilisateur, et en faisant un json_decode($json_buffer, true) tu obtiendras un tableau que tu peux parcourir de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $data = json_decode($json_buffer, true);
    foreach ($data as $id => $user) {
        echo 'ID : ', $id; // "utilisateur 1", "utilisateur 2"
        print_r($user);
    }
    Mais comment choisis-tu l'ID ? Je vois qu'il vient d'un formulaire, plusieurs utilisateurs ne peuvent-ils pas se retrouver avec le même ID ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2021
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour Séb,

    Merci pour ton message.

    Je souhaitais qu'il y ait un numéro d'index et que l'identifiant de l'utilisateur soit simplement considéré comme un élément comme un autre.
    Après ta solution me convient, je vais me pencher dessus.

    Un identifiant d'utilisateur doit être unique, je pensais contrôler l'unicité au moment de créer un utilisateur.

    Je te tiens au courant

    Bon après-midi et à bientôt !
    Kristien

  4. #4
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2021
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonsoir Séb,

    Encore merci pour ton aide, ça fonctionne nickel.
    Il me reste un truc que je ne comprends pas, c'est comment générer le fichier JSON avec le code PHP.
    Je pensais que mon script PHP devait imbriquer un tableau contenant les détails de l'utilisateur dans le tableau listant les identifiants des utilisateurs :

    Mon script PHP...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $utilisateur = array ("identifiant", array("prenom" => "Prenom de l'utilisateur" , "nom" => "Nom de l'utilisateur"));
    $utilisateur = json_encode($utilisateur , JSON_PRETTY_PRINT);
    file_put_contents("test.json" , $utilisateur);
    ... génère le fichier JSON ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [
        "identifiant",
        {
            "prenom": "Prenom de l'utilisateur",
            "nom": "Nom de l'utilisateur"
        }
    ]
    Peux-tu me dire comment remplacer la virgule après "identifiant" par des deux points et comment obtenir des accolades à la place des crochets ?

    Par avance merci.

    Kristien

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Utilise la syntaxe [] au lieu de array(), c'est plus concis.

    Il faut faire comme tu as procédé pour prenom et nom, avec une => :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $utilisateur = [
        "identifiant" => [
            "prenom" => "Prenom de l'utilisateur",
            "nom" => "Nom de l'utilisateur",
        ]
    ];
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Candidat au Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Septembre 2021
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Webdesigner
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2021
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour Séb !

    Un grand merci pour ton retour ultra rapide et ultra clair.

    Merci merci merci !

    Kristien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer des données d'une URL à un fichier json
    Par Sarah! dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/11/2015, 15h39
  2. Réponses: 0
    Dernier message: 13/05/2014, 17h15
  3. [PHP 5.3] Récupérer un Array avec étiquette enregistré dans un fichier .txt
    Par Myst3ryssss dans le forum Langage
    Réponses: 6
    Dernier message: 08/03/2012, 10h17
  4. [MySQL] Récupérer le nombre d'enregistrements d'un fichier
    Par Trebor_ dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 19/04/2008, 21h40
  5. récupérer la date d'enregistrement d'un fichier texte
    Par portecd dans le forum VBA Access
    Réponses: 2
    Dernier message: 04/06/2007, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo