Conditions entre un Ficher PHP et JSON

Résolu/Fermé
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 - 6 janv. 2022 à 21:27
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 - 7 janv. 2022 à 01:57
Bonjour, j'ai cherché partout ma réponse, mais je n'est pas trouvé comment faire. Ce que j 'aimerais faire, est
d'ouvrir un fichier JSON et de le lire et de updater/modifier le fichier .JSON avec un Formulaire ce que j'ai fais et qui fonctionne voilà le code:
<?php 
if(isset($_POST['submit'])){
$article_name = $_POST['article_name'];
$price = $_POST['article_price'];
$image = $_POST['article_image'];

$myfile = fopen("json/file.json", "r") or die("Unable to open file!");
$name_txt = '
[
{
"name": "'.$article_name.'",
"price": "'.$price.'",
"image": "'.$image.'"
}
]';
fwrite($myfile, $name_txt);
fclose($myfile);
}
?>


Le problème que je rencontre est que si je fais 2 articles ou +, cela ne marchera pas, car il manquera la virgule après les accolades ensuite le deuxième problème que je rencontre, c'est que le crochet se refait chaque fois alors que il faudrait jusqu'il les met au premier ça a l'assez complexe et ça fait un moment que je cherche comment faire merci à la personne ou aux personne qui m'aidera

-DevRevoltium-
A voir également:

19 réponses

jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
6 janv. 2022 à 21:35
Bonjour
Il ne faut pas chercher à écrire le texte au format JSON à la main... Mais plutôt stocker les différentes variables dans un array
Puis utiliser la fonction json_encode..
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
Modifié le 6 janv. 2022 à 21:38
D'accord je vais essayer

Mais je fais comment pour lui mettre name, price, image dans un array ?


-DevRevoltium-
0
blackmefias_3350 Messages postés 706 Date d'inscription dimanche 20 septembre 2020 Statut Membre Dernière intervention 8 mars 2024 58
6 janv. 2022 à 21:47
Bonsoir,

je ne suis pas un pro de php, mais n'avez pas oublier un ";" ou "," dans la partie ci dessous

$name_txt ='
[
{
" name " : " '.$article_name.' ",

" price " : " '.$price.' ",

" image " : " '.$image.' "

}

]';


0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
6 janv. 2022 à 21:49
<?php 
    if(isset($_POST['submit'])){
        $article_name = $_POST['article_name'];
        $price = $_POST['article_price'];
        $image = $_POST['article_image'];

        $myfile = fopen("json/file.json", "r") or die("Unable to open file!");
        
        $datas = ['name'=>$article_name, 'price'=>$price, 'image'=>$image]; // on stocke les données dans un array associatif
        $name_txt = json_encode($datas); // on transforme l'array au format json
        
        fwrite($myfile, $name_txt);
        fclose($myfile);
    }
?>

0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
6 janv. 2022 à 21:51
et si tu as deux articles ...

 $datas = ['name'=>$article_name, 'price'=>$price, 'image'=>$image];
 $datas[] = ['name'=>$article_name2, 'price'=>$price2, 'image'=>$image2];


bien sûr.. si tu as plusieurs articles .. au lieu de créer manuellement chaque ligne de l'array .. tu pourras ( devras ) passer par une boucle...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
6 janv. 2022 à 21:49
Oui j'avais vu mais je veux d'abord trouver un moyen de réglé le problème en premier lieu
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
6 janv. 2022 à 22:00
D'accord et la boucle je la fait avec un while ou un for ?
comme ça

<?php 
    if(isset($_POST['submit'])){
        $article_name = $_POST['article_name'];
        $price = $_POST['article_price'];
        $image = $_POST['article_image'];
        $article_name2 = $_POST['article_name'];
        $price2 = $_POST['article_price'];
        $image2 = $_POST['article_image'];

        $myfile = fopen("json/file.json", "a") or die("Unable to open file!");
        $datas = ['name'=>$article_name, 'price'=>$price, 'image'=>$image];
        $datas[] = ['name'=>$article_name2, 'price'=>$price2, 'image'=>$image2];
        while($data = $datas){
            $datas[] = ['name'=>$article_name2, 'price'=>$price2, 'image'=>$image2];
        }
        $name_txt = json_encode($datas);
        fwrite($myfile, $name_txt."\n");
        fclose($myfile);
    }
?>

0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
6 janv. 2022 à 22:30
Alors.. déjà .. ce n'est pas sur la variable $datas que tu vas devoir faire ta boucle .. mais sur tes variables $_POST ...

fais donc un var_dump de la variable $_POST pour voir ce qu'elle contient exactement....

Par contre, il serait pas mal de nous montrer également le code de ton formulaire...
J'imagine que si tu as plusieurs articles, tu as utilisé des attributs "name" dans tes input au format array .. par exemple
<input name="article_name[]"  value="" />


et dans ce cas, dans ton post, chaque variable sera sous forme d'array
tu pourras alors faire un joli foreach dessus
genre
<?php
  
  var_dump($_POST); // juste pour que tu vois ce que la variable contient et sous quelle forme elle se présente...

  $article_name = $_POST['article_name'];


  $datas = []; // on initialise la variable qui contiendra les données

//on boucle sur chaque article
foreach($article_name as $K=>$V ){
  //ici tu traites chaque article .. 
  $name = $V;
  $price = $_POST['article_price'][$K];
  $image = $_POST['article_image'][$K];

  $datas[] = ['name'=>$name, 'price'=>$price, 'image'=>$image];
}

 //on transforme l'array en JSON
$name_txt = json_encode($datas);

//On stocke le contenu dans le fichier
 $myfile = fopen("json/file.json", "a") or die("Unable to open file!");
 fwrite($myfile, $name_txt."\n");
 fclose($myfile);

0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
6 janv. 2022 à 22:35
Tous d'abord voici mon formulaire

<form action="#" method="POST" enctype="application/json">
    <input type="text" name="article_name" id="article_name" placeholder="Nom..">
    <input type="text" name="article_price" id="article_price" placeholder="Prix..">
    <input type="text" name="article_image" id="article_image" placeholder="Image..">
    <input name="submit" type="submit" value="Créer">
</form>

de ce que j''ai pu comprendre je le remplace par ça ?
<form action="#" method="POST" enctype="application/json">
    <input type="text" name="article_name[]" id="article_name" placeholder="Nom..">
    <input type="text" name="article_price[]" id="article_price" placeholder="Prix..">
    <input type="text" name="article_image[]" id="article_image" placeholder="Image..">
    <input name="submit" type="submit" value="Créer">
</form>

0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
Modifié le 6 janv. 2022 à 22:38
Tout dépend comment tu penses gérer "plusieurs produits .."

Par exemple
<form action="" method="POST">
  <label> Produit 1</label>
    <input type="text" name="article_name[]" id="article_name" placeholder="Nom..">
    <input type="text" name="article_price[]" id="article_price" placeholder="Prix..">
    <input type="text" name="article_image[]" id="article_image" placeholder="Image..">
  <label> Produit 2</label>
    <input type="text" name="article_name[]" id="article_name2" placeholder="Nom..">
    <input type="text" name="article_price[]" id="article_price2" placeholder="Prix..">
    <input type="text" name="article_image[]" id="article_image2" placeholder="Image..">


    <input name="submit" type="submit" value="Créer">

</form>
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
6 janv. 2022 à 22:38
Non je compte ajouter un produit à la fois
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
6 janv. 2022 à 22:40
Pour le foreach quand je créer un article j'ai ce warning

Warning: Invalid argument supplied for foreach() in C:\wamp64\www\Aide\admin.php on line 28
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
Modifié le 6 janv. 2022 à 22:51
voici le code
if(isset($_POST['submit'])){
        var_dump($_POST); // juste pour que tu vois ce que la variable contient et sous quelle forme elle se présente...

        $article_name = $_POST['article_name'];
        
        $datas = [];

        foreach($article_name as $K=>$V){
            $name = $V;
            $price = $_POST['article_price'][$K];
            $image = $_POST['article_image'][$K];
  
            $datas[] = ['name'=>$name, 'price'=>$price, 'image'=>$image];
        }

        $name_txt = json_encode($datas);

        $myfile = fopen("json/file.json", "a") or die("Unable to open file!");

        $name_txt = json_encode($datas);
        fwrite($myfile, $name_txt."\n");
        fclose($myfile);
    }


0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
6 janv. 2022 à 23:17
Vu que tu viens de dire que tu ne compte ajouter qu'un seul produit à la fois ils font donc revenir au premier code que je t'ai suggéré.
Par contre tu parles d'ajouter... Tu veux dire ajouter en plus dans le fichier json ?

Il faut donc commencer par lire le contenu du fichier
Stocker la donner dans la variable $datas
Puis traiter le submit de ton formulaire pour y ajouter le nouveau produit
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
6 janv. 2022 à 23:22
Ok alors je refait le $myfile mais à la place du a je met r c'est ça ?
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
6 janv. 2022 à 23:18
Finalement j'ai réalisé que j'avais oublié les crochets dans le formulaire mais si je veux les faires 1 par 1 mais bon pas grave. Mais ensuite si je veux en rajouter 2 Je ne peux pas, car il y déjà la fin des crochets alors comment je fais ?
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
6 janv. 2022 à 23:21
Comme je viens de te le dire ..

1 - Lire le contenu du fichier JSON
2 - Stocker les données dans la variable $datas ( regarde la fonction json_decode )
3 - Ajouter les données du POST dans la variable $datas
4 - Ecoder $datas au format json
5- Réécrire le fichier
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
6 janv. 2022 à 23:24
D'accord je vais faire de mon mieux pour y arriver et quand je pense que c'est bon je reviens vous demander si j'ai un truc mal fait
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
6 janv. 2022 à 23:27
dernier truc comment je fais cela ?

3 - Ajouter les données du POST dans la variable $datas
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
Modifié le 6 janv. 2022 à 23:37
<?php
    if(isset($_POST['submit'])){
        $article_name = $_POST['article_name'];
        $price = $_POST['article_price'];
        $image = $_POST['article_image'];

        $myfile = fopen("json/file.json", "r") or die("Unable to open file!");
        $datas = [];
        $name_txt = json_decode($datas);
        $datas = ['name'=>$article_name, 'price'=>$price, 'image'=>$image];
        $name_txt = json_encode($datas);
        fwrite($myfile, $name_txt);
        fclose($myfile);
    }
?>

J'ai essayé de faire ce que vous m'avez dit mais toujours un erreur:
Warning: json_decode() expects parameter 1 to be string, array given in C:\wamp64\www\Aide\admin.php on line 28 (dans le code c'est ligne 9)
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
Modifié le 7 janv. 2022 à 01:52
un truc du genre
<?php 
// chemin vers le fichier
$filename = "json/file.json";


//on traite le submit 
if(isset($_POST['submit'])){
  
  
  //initialisation variable $datas
   $datas = [];
   
  // lecture des données déjà présentes dans le fichier
  if ( file_exists($filename)){
     $string = file_get_contents($filename);
     //on décode les données et on les stocke en tant qu'array
     $json_a = json_decode($string, true);

     //on stocke les données dans $datas
     $datas = !empty( $json_a) ? $json_a : [] ;
 }
  
  //on récupère les données qui sont envoyées par le formulaire
    $article_name = $_POST['article_name'];
    $price = $_POST['article_price'];
    $image = $_POST['article_image'];

  //on stocke les données du formulaire dans $datas
  $datas[] = ['name'=>$article_name, 'price'=>$price, 'image'=>$image]; // on stocke les données dans un array associatif
  
  //on retransforme $datas en JSON
  $name_txt = json_encode($datas); // on transforme l'array au format json

  //on  le fichier en écriture
  $myfile = fopen($filename, "r") or die("Unable to open file!");
  fwrite($myfile, $name_txt);
  fclose($myfile);

  //tu peux aussi utiliser file_put_contents à la place de tes trois dernières lignes
 // file_put_contents($filename, $name_txt );
}
?>


EDIT : petite correction ligne 27
Edit 2 : Correction ligne 19
Edit 3 : Vérification existence du fichier avant de lire son contenu
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
6 janv. 2022 à 23:44
Hum d'accord, mais la plus aucun article insert dans le file.json
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
6 janv. 2022 à 23:49
En remplaçant les 3 dernières ligne cela marche mais ça modifie le message moi je veux avoir toute les articles que j'ajoute 1 par 1
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
7 janv. 2022 à 00:01
Lign,e 27, j'ai oublié des crochets
  $datas[] = ['name'=>$article_name, 'price'=>$price, 'image'=>$image]; // on stocke les données dans un array associatif
 
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
7 janv. 2022 à 00:13
Oh Wow merci infiniment c'est exactement ce que je voulais !
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670 > DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
7 janv. 2022 à 00:29
Pense à marquer le sujet en résolu
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
7 janv. 2022 à 01:57
D'accord =)
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
7 janv. 2022 à 01:02
Hum re-bonjour j'ai remarqué un truc qui n'allait pas je ne peux pas faire une boucle avec un foreach de toute mes articles, car mes articles ne sont pas à la même hauteur voilà ce que ça donne


0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670
Modifié le 7 janv. 2022 à 01:35
Ligne 19
Remplace par
$datas= !empty( $json_a) ? $json_a : [] ;

Supprime ton fichier json puis relance le script et ajoute des produits
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
Modifié le 7 janv. 2022 à 01:41
Ok je vais essayer
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670 > DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
7 janv. 2022 à 01:49
Dans le script, il faudra certainement vérifier que le fichier existe avant d'essayer d'en lire le contenu.
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023 > jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024
7 janv. 2022 à 01:50
Oui mais il existe déjà alors pas besoin si ?
0
jordane45 Messages postés 38182 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 mai 2024 4 670 > DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
7 janv. 2022 à 01:53
C'est juste une sécurité.
J'ai édité le code tu peux copier coller directement
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
Modifié le 7 janv. 2022 à 01:46
J'ai toujours la même chose





EDIT: Je n'avais pas vu l'édit que tu a fait alors je réessaye
0
DevRevoltium Messages postés 37 Date d'inscription lundi 20 juillet 2020 Statut Membre Dernière intervention 26 septembre 2023
7 janv. 2022 à 01:48
Merci tous fonctionne parfaitement !
0