Affichage du contenu selon le clic

Par Zulkar, il y a 8 ans


Bonjour,

Voila je n'arrive pas à trouver la solution.

Ce que je fais

J'ai 2 recettes contenant chacune 2 ingrédients.
J'ai bien ma liste de recettes dans un tableau.
Mais mon autre tableau m'affichant le détail de la recette m'affiche les 4 ingrédients des 2 recettes.
Avec le code qui suit, lorsque je clique sur une recette, je récupère bien l'id de la recette dans ma barre d'adresse.

<table id="recettes-table" class="table table-bordered table-striped" width="100%"> <thead> <tr> <th>Recettes</th> <th width="30%">Actions</th> </tr> </thead> <tbody> <?php foreach (App::getInstance()->getTable('Recette')->all() as $recette): ?> <tr> <td onclick="location.href='index.php?p=recettes&id=<?= $recette->id; ?>'"><?= $recette->recettes; ?></td> <td> <!-- Bouton Editer --> <a href="?p=recette.edit&id=<?= $recette->id; ?>" class="btn btn-xs btn-default btn-flat"><span class="glyphicon glyphicon-pencil"></span></a> <!-- Bouton Imprimer --> <a href="#" class="btn btn-xs btn-default btn-flat"><span class="glyphicon glyphicon-print"></span></a> <!-- Bouton Supprimer --> <form action="?p=recette.delete" method="post" style="display: inline;"> <input type="hidden" name="id" value="<?= $recette->id ?>"> <button type="submit" class="btn btn-xs btn-default btn-flat"><span class="glyphicon glyphicon-trash"></span></button> </form> </td> </tr> <?php endforeach; ?> </tbody> </table>

Ce que je veux

Lorsque je clique sur une recette, que le détail des ingrédients correspondant s'affiche.

3 réponses

Laznet, il y a 8 ans

Bonsoir,

Tu cherches à detecter quand un clique est fait... donc le reflex devrait direct être >>>> Javascript.
Tu détecte le clique sur ton élément et après tu peux afficher des éléments HTML.

Zulkar, il y a 8 ans

Bonjour,
Merci pour la piste.

C'est parce que dans une autre version, j'avais réussi en intégrant à la fois du code dans une fonction et à la fois dans ma page PHP pour contrôler $id.

function getDetailRecette( $connect, $id ) { $id = intval($id); <------------------ $query = " SELECT C.categories, C.id, R.recettes, R.nbpersonnes, marge, observations, I.ingredients, quantites, I.prix FROM categories C JOIN recettes R ON C.id=R.categories_id JOIN composition_recettes CR ON R.id=CR.recettes_id JOIN ingredients I ON I.id=CR.ingredients_id WHERE CR.recettes_id = $id <--------------- ORDER BY ingredients DESC"; $result = mysqli_query($connect, $query); return mysqli_fetch_all( $result, MYSQLI_ASSOC ); }

Et dans ma page PHP, j'avais donc ceci :

$id = isset($_GET['id']) ? $_GET['id'] : 1; <------ Affiche par défaut le contenu de la recette avec l'id 1 $details = getDetailRecette( $connect, $id );

Mais depuis que j'ai tout refait en suivant la formation PHP en POO, je n'arrive pas à reproduire la même chose sans javascript.

Je vais rechercher selon ce que tu m'as dit. Merci

Zulkar, il y a 8 ans

C'est bon, en me posant et regardant tout dans le détail, j'ai réussi.
J'ai modifié ma fonction actuelle comme ceci :

public function getDetailRecette($id) { return $this->query(" SELECT C.categories, C.id, R.recettes, R.nbpersonnes, marge, observations, I.ingredients, quantites, I.prix FROM categories C JOIN recettes R ON C.id=R.categories_id JOIN composition_recettes CR ON R.id=CR.recettes_id JOIN ingredients I ON I.id=CR.ingredients_id WHERE CR.recettes_id = $id ORDER BY ingredients ASC "); }

Et dans ma page PHP j'ajoute donc ce code :

$id = isset($_GET['id']) ? $_GET['id'] : 1; $details = App::getInstance()->getTable('Recette')->getDetailRecette($id);