Fonctions et boucles imbriquées

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonctions et boucles imbriquées

Re: Fonctions et boucles imbriquées

par two3d » 15 déc. 2022, 22:48

getSubcategories($category['id'])

Mets un "global $bdd;" dans ta fonction pour avoir la connexion dans ta fonction (tu trouvera facilement "global PHP" dans la doc PHP pour avoir + d'infos)

Fonctions et boucles imbriquées

par Fred120 » 15 déc. 2022, 22:43

Bonjour,

Le titre n'est pas très explicite. Simplement, je voudrais, dans une barre de navigation, afficher différentes catégories de produits et, pour chacune, dans un dropdown, les sous-catégories qui lui sont rattachées.

En mettant tout le code dans un même fichier, j'obtiens le résultat suivant, qui fonctionne comme attendu :
 
    <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
        <div class="container-fluid">
            <ul class="navbar-nav">

                <?php
                $bdd = new PDO(...);
                $req = $bdd->query('SELECT cat_id, cat_name FROM category');

                $categories = [];

                while ($row = $req->fetch()) {
                    $category = [
                        'id' => $row['cat_id'],
                        'name' => $row['cat_name'],
                    ];

                    $categories[] = $category;

                }

                foreach ($categories as $category) {
                ?>

                <li class="nav-item">
                    <div class="dropdown">
                        <button class="btn btn-secondary  bg-transparent border-0" data-bs-toggle="dropdown">
                            <?=($category['name']); ?>
                        </button>
                        <div class="dropdown-menu">
                            <?php


                    $req = $bdd->prepare(
                        "SELECT subcat_id, subcat_name FROM subcategory WHERE cat_id = ?"
                    );
                    $req->execute(array($category['id']));


                    $subcategories = [];

                    while ($row = $req->fetch()) {
                        $subcategory = [
                            'id' => $row['subcat_id'],
                            'name' => $row['subcat_name'],
                        ];

                        $subcategories[] = $subcategory;
                    }

                    foreach ($subcategories as $subcategory) {
                            ?>

                            <a class="dropdown-item"
                                href="index.php?action=subcategory&id=<?= $subcategory['id'] ?>">
                                <?=($subcategory['name']); ?>
                            </a>
                            <?php
                    }
                            ?>
                        </div>
                    </div>
                </li>
                <?php
                }
                ?>
            </ul>
    </nav>
L'objectif serait d'externaliser au maximum le PHP. J'ai créé, dans un autre fichier, une fonction qui permet de se connecter à la base de donnée, une autre qui permet d'afficher toutes les catégories, mais je n'arriver pas à concevoir de fonction qui affiche les sous-catégories d'une catégorie donnée.

Il faudrait une fonction getSubcategories qui prendrait en paramètre $category['id'], mais cette valeur étant incrémentée à chaque tour de la première boucle, je ne sais pas comment la transmettre.

Est-ce faisable en utilisant uniquement PHP, ou autrement ?

Je vous remercie pour votre aide.