Conditions entre un Ficher PHP et JSON
Résolu
DevRevoltium
Messages postés
37
Date d'inscription
Statut
Membre
Dernière intervention
-
DevRevoltium Messages postés 37 Date d'inscription Statut Membre Dernière intervention -
DevRevoltium Messages postés 37 Date d'inscription Statut Membre Dernière intervention -
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:
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-
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:
- Conditions entre un Ficher PHP et JSON
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Php alert ✓ - Forum PHP
- Fichier json - Forum Windows 10
19 réponses
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..
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..
D'accord je vais essayer
Mais je fais comment pour lui mettre name, price, image dans un array ?
-DevRevoltium-
Mais je fais comment pour lui mettre name, price, image dans un array ?
-DevRevoltium-
Bonsoir,
je ne suis pas un pro de php, mais n'avez pas oublier un ";" ou "," dans la partie ci dessous
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.' "
}
]';
<?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); } ?>
et si tu as deux articles ...
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...
$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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
D'accord et la boucle je la fait avec un while ou un for ?
comme ça
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); } ?>
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
et dans ce cas, dans ton post, chaque variable sera sous forme d'array
tu pourras alors faire un joli foreach dessus
genre
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);
Tous d'abord voici mon formulaire
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>
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>
Tout dépend comment tu penses gérer "plusieurs produits .."
Par exemple
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>
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
Warning: Invalid argument supplied for foreach() in C:\wamp64\www\Aide\admin.php on line 28
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); }
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
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
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 ?
<?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)
un truc du genre
EDIT : petite correction ligne 27
Edit 2 : Correction ligne 19
Edit 3 : Vérification existence du fichier avant de lire son contenu
<?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
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