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


Zulkar
Auteur
Réponse acceptée

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);

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
Auteur

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