Partage
  • Partager sur Facebook
  • Partager sur Twitter

JSON + php - Données effacées

je perds mes données après un update

Sujet résolu
    4 mars 2021 à 17:41:50

    Bonjour à tous ,

    Suite à plusieurs jours de recherche je ne sais plus quoi faire !!

    j'ai crée un base de donnée pour faire une bibliothèque vidéos.

    dans un premier temps j'enregistre les catégories de films action, aventure, drame ect .... et dans un second temps je vais enregistré le titre du film dans la catégorie concerné .

    Voici le résultat finale que je voudrais obtenir :

    {
    	"Action - Aventure": {
    		"nom": "Action - Aventure",
    		"films": {
    			"Cross the Line": {
    				"titre": "Cross the Line"
    			},
    			"Wrong Turn": {
    				"titre": "Wrong Turn"
    			},
    			"Rams": {
    				"titre": "Rams"
    			}
    		}
    	},
    	"Science-Fiction": {
    		"nom": "Science-Fiction",
    		"films": {
    			"The Breakdown": {
    				"titre": "The Breakdown"
    			},
    			"Cross the Line": {
    				"titre": "Cross the Line"
    			}
    		}
    	}
    }

    Mais ça c'est pour plus tard !!!

    Mais étant novice en php et json je galère un peu et c'est pour ça que pour le moment je n'utilise pas de fonction de classe ou de js car je n'en suis pas capable j'apprends en php puis je progresserais après une fois le php bien compris

    Après ce grand blabla,

    Voici le résultat de mon json aujourd'hui ( c'est une partie )

    {
        "Action - Aventure": {
            "nom": "Action - Aventure"
        },
        "Western": {
            "nom": "Western"
        },
        "Science-Fiction": {
            "nom": "Science-Fiction"
        }
    }

    lorsque que j'enregistre ou que je supprime une catégorie tout ce passe bien !!

    mais quand je fais une modification avec formulaire : exemple pour "western" je rajoute un 's' donc "westerns" il me modifie bien western en westerns mais il me supprime tout le reste :

    {
        "Westerns": {
            "nom": "Westerns"
        }
    }

    voici mon formulaire pour la modification : 

    <?php
    if(isset($_GET['id'])){
    	$data = $_GET['id'];
    	//sans true
    	//$projets = json_decode(file_get_contents('projets/films.json'));
    	//$titre = $projets->{$data}->{'nom'};
    	
    	//avec true
    	$projets = json_decode(file_get_contents('projets/films.json'),true);
    	$titre = $projets[$data]['nom'];
    ?>
    <!-- Formulaire -->
    <div class="container">
      <h2>Modifier : <?php echo $titre; ?></h2>
      <form class="form" action="" method="post">
    	<div class="form-group">
          <label for="text">nom :</label>
          <input type="text" class="form-control" id="nom" value="<?php echo $titre; ?>" name="nom">
        </div>
    	<button type="submit" name="save" class="btn btn-warning">Modifier</button>
    	<a href="index.php" class="btn btn-default ">Annuler</a>
      </form>
    </div>
    
    <!-- Fin du du formulaire -->
    <?php 
    if(isset($_POST['save'])){
    		$data = $_POST['nom'];
    		$input = array(
                'nom'	=>	$_POST['nom']
            );
    	$data_array[$data] = $input;
    	//encodage
    	$projets = json_encode($data_array, JSON_PRETTY_PRINT);
    	file_put_contents('projets/films.json', $projets);
    
    header('location: index.php');
    }
    }
    ?>

    je suis perdu, si quelqu'un à une idée à me soumettre !! je suis preneur.

    Cordialement

    Mickael



    • Partager sur Facebook
    • Partager sur Twitter
      4 mars 2021 à 17:56:20

      Bonjour,

      Déplacement vers un forum plus approprié

      Le sujet est déplacé de la section Discussions générales vers la section PHP

      • Partager sur Facebook
      • Partager sur Twitter
        4 mars 2021 à 18:11:08

                $data = $_POST['nom'];
                $input = array(
                    'nom'   =&gt;   $_POST['nom']
                );
            $data_array[$data] = $input;
            //encodage
            $projets = json_encode($data_array, JSON_PRETTY_PRINT);
        

        Est faux, c'est juste :

        unset($projets[$_GET['id']]);
        $projets[$_POST['nom']]['nom'] = $_POST['nom'];
        $projets = json_encode($projets, JSON_PRETTY_PRINT);
        

        Avec ton code :

        1. tu ne reprends pas/repars pas du contenu actuel du JSON ($projets, le résultat d'un json_decode)
        2. et tu écrases le contenu du fichier par un nouveau tableau (ton $input)

        Par contre, je ne vois pas l'intérêt de répéter la clé en valeur de la sous-clé nom.

        -
        Edité par julp 4 mars 2021 à 18:22:39

        • Partager sur Facebook
        • Partager sur Twitter
          4 mars 2021 à 18:18:04

          Bonsoir julp

          Merci pour ta rapidité

          unset($projets[$_GET['id']]);
          
          $projets[$_POST['nom']]['nom'] = $_POST['nom'];
          $projets = json_encode($projets, JSON_PRETTY_PRINT);

          Oui avec le unset, ça fonctionne !!! Merci beaucoup !!

          Ne connaissant pas bien tout ce chmilblique, tu me conseillerais quoi pour avoir un résultat que je puisse bien comprendre la chose, car des fois en mettant des guillemet j'ai un tableau et des fois c'est un objet, j'ai encore beaucoup de progrès à faire j'en suis contient.

          Donc tout idée et bonne pour moi.

          Ben du coup je mets en résolut.

          Cordialement

          Mickael

          -
          Edité par mickaelgutt 4 mars 2021 à 18:42:28

          • Partager sur Facebook
          • Partager sur Twitter
            4 mars 2021 à 18:49:47

            Un tableau (numériquement indexé) ? Ca permettrait de modifier directement une donnée sans supprimer/rajouter. C'est surtout à toi de voir ce qui t'est le plus pratique à l'usage.

            Manipuler du JSON, ça demande avant tout de comprendre les structures que sont les tableaux et/ou objets, surtout quand elles sont imbriquées sur plusieurs niveaux.

            • Partager sur Facebook
            • Partager sur Twitter
              4 mars 2021 à 19:49:36

              Bonsoir julp

              julp a écrit:

              Un tableau (numériquement indexé) ? Ca permettrait de modifier directement une donnée sans supprimer/rajouter. C'est surtout à toi de voir ce qui t'est le plus pratique à l'usage.

              Manipuler du JSON, ça demande avant tout de comprendre les structures que sont les tableaux et/ou objets, surtout quand elles sont imbriquées sur plusieurs niveaux.

              Un tableau indexé oui pourquoi pas !!! 
              Alors en fait j'ai fais des tests en ajoutant des données par Example dans western mais quand je modifie westerns ça efface ce que contiens western donc je pense qu'il faut que je parte sur une autre façon de faire mais je ne vois pas comment.

              la structure que j'aimerais est :

              1 - enregistrer les catégories ( action, drame ect.... )

              2 - pouvoir enregistrer dans chaque catégorie les films qui correspondent à la catégorie ( j'ai mis un exemple en haut du post )

              et j'aimerais pouvoir changer de catégorie ou la modifier sans perdre les données qui vont avec .

              voilà après si tu peux m'orienter sur des piste ou des exemples je suis preneur.

              encore merci 

              j'enlève résolu car ça efface les données qui se trouvent dans la catégorie ( je crois à cause de unset !! )

              Cordialement 

              Mickael

              • Partager sur Facebook
              • Partager sur Twitter
                4 mars 2021 à 19:59:00

                unset c'était pour modifier une entrée/catégorie parce qu'en fait vu que tu te servais du nom que tu modifiais comme clé, il fallait bien la supprimer avant d'en recréer une avec le nouveau nom.

                Forcément, tu ne vas pas la supprimer par un unset si le but est d'associer un film à une catégorie. Est-ce qu'une opération de suppression a un sens si c'est pour rajouter quelque chose ?

                $projets[$_POST['nom_categorie']] ??= ['nom' =&gt; $_POST['nom_categorie'], 'films' =&gt; []];
                $projets[$_POST['nom_categorie']]['films'][] = $_POST['nom_film'];
                // json_encode puis file_put_contents
                

                -
                Edité par julp 4 mars 2021 à 20:03:21

                • Partager sur Facebook
                • Partager sur Twitter
                  4 mars 2021 à 20:24:23

                  Bonsoir julp

                  effectivement la suppression n'as pas de sens sur une catégorie.

                  le code que tu m'as données ci-dessus c'est pour la modification et je vois que le code ajoute un tableau films du coup si je comprends bien 

                  à la validation du formulaire je récupère la valeur de $_POST['nom_categorie'] ( le ??= ça veut dire quoi ? )

                  car là j'ai des erreurs

                  par contre =&gt; c'est : => ( c'est bien pour désigner la valeur qu'il récupère dans le formulaire ? )

                  je crois que les codes sont modifiés car j'ai des erreurs avec ??= et je ne sais pas à quoi ça corresponds mais je cherche

                  Là actuellement ça ajoute bien films avec un tableau donc il faut que j'ajoute également ce code à l'ajout de catégorie ( si je comprends bien ) et pour ajouter des films c'est avec un nouveau formulaire avec la seconde ligne de code . (dite moi si je me trompe !!  )

                  Merci pour ta patience

                  bonne soirée sinon on vois ça demain ou quand tu veux !!

                  Cordialement

                  Mickael

                  -
                  Edité par mickaelgutt 4 mars 2021 à 20:35:17

                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 mars 2021 à 21:21:32

                    > par contre =&gt; c'est : =>

                    Oui, c'est un bug non corrigé depuis 3 (?, j'ai perdu le compte) ans du forum ...

                    > je crois que les codes sont modifiés car j'ai des erreurs avec ??= et je ne sais pas à quoi ça corresponds mais je cherche

                    ??= a été introduit par PHP 7.4.0 et permet d'initialiser le sous-tableau s'il n'existe pas. Tu n'en as pas forcément besoin si tu le vérifies avant. Sinon tu peux faire la même chose avec isset/array_key_exists.

                    -
                    Edité par julp 4 mars 2021 à 21:25:59

                    • Partager sur Facebook
                    • Partager sur Twitter
                      4 mars 2021 à 21:35:45

                      Re julp,

                      Bon j'ai mis à jour ma version php j'étais en 7.3 j'ai mis la 7.4 et j'ai également mis la 8 mais elle est désactivée .

                      donc la effectivement ??= c'est bon par contre il ajoute lor d'une modification mais ne change pas les valeurs :

                      {
                          "Action - Aventure": {
                              "nom": "Action - Aventure"
                          },
                          "Westerns": {
                              "nom": "Westerns",
                              "films": []
                          },
                          "Western": {
                              "nom": "Western",
                              "films": []
                          }
                      }

                      bon je vais faire des tests demain, un grand merci et une soirée 

                      Cordialement

                      Mickael

                      • Partager sur Facebook
                      • Partager sur Twitter
                        4 mars 2021 à 22:39:20

                        Il manque ou a visiblement une erreur sur la ligne :

                        $projets[$_POST['nom_categorie']]['films'][] = $_POST['nom_film'];
                        

                        (qui nécessite éventuellement adaptation(s))

                        • Partager sur Facebook
                        • Partager sur Twitter
                          5 mars 2021 à 12:56:43

                          Bonjour julp

                          Je n'y arrive pas, donc je vais changer d'approche pour essayer de simplifier la chose .

                          je vais mettre deux valeurs fixe : categorie et films, ce qui donnera je pense :

                          {
                          	"categorie": [
                          		{
                          			"cat_nom": "Action - Aventure",
                          			"films": {
                          				"Cross the Line": {
                          					"titre": "Cross the Line"
                          				},
                          				"Wrong Turn": {
                          					"titre": "Wrong Turn"
                          				},
                          				"Rams": {
                          					"titre": "Rams"
                          				}
                          			}
                          		},
                          		{
                          			"cat_nom": "Science-Fiction",
                          			"films": {
                          				"The Breakdown": {
                          					"titre": "The Breakdown"
                          				},
                          				"Cross the Line": {
                          					"titre": "Cross the Line"
                          				}
                          			}
                          		},
                          		{
                          			"cat_nom": "Western",
                          			"films": []
                          		}
                          	]
                          }

                          Je pense que ce sera plus façile pour parcourir les données

                          Si tu as mieux à me proposer !!

                          Cordialement

                          Mickael

                          • Partager sur Facebook
                          • Partager sur Twitter
                            5 mars 2021 à 17:41:01

                            Mouais, je ne sais pas pourquoi tu veux toujours répéter les "noms" en clés et en sous-valeurs ni ne pas utiliser des tableaux numériquement indexés.

                            Par ailleurs, à moins vraiment que ce ne soit un exercice, je ne ferais pas ça en JSON mais avec une base de données SQL.

                            • Partager sur Facebook
                            • Partager sur Twitter
                              5 mars 2021 à 18:35:54

                              Bonsoir julp,

                              Merci pour ta réponse,

                              je ne sais pas utiliser des tableaux indexés comme je te l'ai dis je débute.

                              j'ai vu fonctionné des blogues avec le système json avec des structures incroyables, moi je galère avec ça, des films que je mets dans une catégorie rien de plus, alors quand je fais le json à la main j'ai l'affichage qui fonctionne très bien mais j'aurais voulu avoir un formulaire pour ajouter modifier et supprimer, mais bon je continue à classer ma vidéothèque en manipulant directement le json pour le moment ben ça resteras comme ça jusqu'as ce que je trouve ou que je sache le faire !!

                              Pour ce qui est de sqlite ou mysql effectivement je sais le faire, mais je voudrais aussi connaitre le json .

                              c'est pas grave, je trouverais bien un jour !! 

                              Merci quand même du temps que tu as consacré à mon égard ( je mets le sujet à résolu ).

                              cordialement

                              Bonne fin de journée et bon week-end

                              Mickael

                              • Partager sur Facebook
                              • Partager sur Twitter

                              JSON + php - Données effacées

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown