Manipulation de données JSON en PHP
Bonjour :)
Je rencontre quelques problèmes pour manipuler des données JSON en PHP, notamment pour la suppression et l'ajout.
Voici une partie de mon fichier JSON :
Code:
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
{
"entrees":
[
{
"nom":"Oeufs du jour"
},
{
"nom":"Oeufs tomate cerise du jour"
},
{
"nom":"Carottes rapées"
},
{
"nom":"Taboulet oriental"
},
{
"nom":"Taboulet vert"
},
{
"nom":"Taboulet meridionnal"
},
{
"nom":"Mini penne"
},
{
"nom":"Pommes de terre au thon"
},
{
"nom":"Salade de lantilles aux échalottes"
},
{
"nom":"Tartare de concombre"
},
{
"nom":"Salade Alaska"
},
{
"nom":"Tomates mozarella pesto"
}
]
} |
Et mon fichier PHP réduit à l'essentiel :
Code:
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
<?php
$menu = file_get_contents("db-json/menu.json");
$decodedMenu = json_decode($menu);
$entrees = $decodedMenu->{"entrees"};
$nbEntrees = count($entrees);
$moyenneNbEntrees = ceil($nbEntrees / 2);
if(isset($_POST["supprimer"]))
{
$id = $_POST["id"];
if ($_POST["categorie"] == "entrees")
{
unset($entrees[$id]);
}
$encodedMenu = json_encode($decodedMenu);
file_put_contents("db-json/menu.json", $encodedMenu);
}
if(isset($_POST["modifier"]))
{
$id = $_POST["id"];
if ($_POST["categorie"] == "entrees")
{
$entrees[$id]->{"nom"} = $_POST["nom"];
}
}
if(isset($_POST["ajouter"]))
{
if ($_POST["categorie"] == "entrees")
{
array_push($entrees, array('nom' => $_POST["nom"]));
}
}
?>
<div class="flexStart">
<ul>
<?php
for($i = 0; $i < $moyenneNbEntrees; $i++)
{
echo
'
<li>
<form method="post" action="interface-admin.php">
<input type="text" name="nom" value="' . $entrees[$i]->{"nom"} . '" />
<input type="hidden" name="id" value="' . $i . '" />
<input type="hidden" name="categorie" value="entrees" />
<button name="modifier"> Modifier </button>
<button name="supprimer"> Supprimer </button>
</form>
</li>
';
}
?>
</ul>
<ul>
<?php
for($i = $moyenneNbEntrees; $i < $nbEntrees; $i++)
{
echo
'
<li>
<form method="post" action="interface-admin.php">
<input type="text" name="nom" value="' . $entrees[$i]->{"nom"} . '" />
<input type="hidden" name="id" value="' . $i . '" />
<input type="hidden" name="categorie" value="entrees" />
<button name="modifier"> Modifier </button>
<button name="supprimer"> Supprimer </button>
</form>
</li>
';
}
?>
</ul>
</div>
<form method="post" action="interface-admin.php">
<label for="nom"> Ajouter une entrée </label>
<input type="text" name="nom" id="nom" placeholder="Nom" />
<input type="hidden" name="categorie" value="entrees" />
<button name="ajouter"> Ajouter </button>
</form> |
Alors le problème c'est que lorsque je clique sur un des boutons supprimer, deux erreurs apparaissent à l'emplacement de l'entrée que je souhaitais supprimer :
Citation:
Notice: Undefined offset: numéro de la ligne que je souhaite supprimer in monfichier.php on line ligne correspondante au input de mon formulaire de suppression
Citation:
Notice: Trying to get property 'nom' of non-object in monfichier.php on lineligne correspondante au input de mon formulaire de suppression
Pour l'ajout aucune erreur ne s'affiche quand j'envoi le formulaire mais l'ajout ne se fait pas. :?
Merci d'avance pour votre aide ! ;)