IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Effectuer une requête par rapport au résultat d'une requête précédente


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2019
    Messages : 3
    Par défaut Effectuer une requête par rapport au résultat d'une requête précédente
    Bonsoir à tous !

    Je cherche une solution à mon problème depuis plusieurs jours sans succès je me tourne donc vers vous pour essayer de formuler peut-être plus clairement mon soucis ...
    Pour poser le contexte, je bosse sur un site de restaurant et sur la page des menus, j'ai utilisé une navigation mise en page avec bootstrap ce qui me permet du coup de cliquer sur le nom d'un menu et de l'afficher en restant sur cette même page. La partie statique fonctionne correctement et j'aimerai maintenant dynamiser tout ça et mettre ça en page avec php.
    Du coup, j'ai une première requête qui me permet de gérer la partie active du menu qui fonctionne bien. Sauf que quand je veux afficher le contenu de ce menu, donc en fonction de l'id sélectionné, ça coince. J'ai essayé pas mal de code différents, sans succès; soit rien ne s'affiche, soit ma boucle m'affiche tous les menus sur chaque choix.

    Je vous met le code pour y voir plus clair

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    echo '<nav>';
            echo    '<ul class="nav nav-pills">';
            $db = Database::connect();
            $statement = $db->query('SELECT * FROM menus_names');
            $menus_names = $statement->fetchAll();
            foreach($menus_names as $menu_name)
            {
                if($menu_name['id'] == '1')
                    echo '<li role="presentation" class="active"><a href="#' . $menu_name['id'] . '" data-toggle="tab">' . $menu_name['menu_name'] . '</a></li>';
                else
                    echo '<li role="presentation"><a href="#' . $menu_name['id'] . '" data-toggle="tab">' . $menu_name['menu_name'] . '</a></li>';
            }
            echo    '</ul>';
            echo '</nav>';
     
            echo '<div class="tab-content">';
     
            foreach($menus_names as $menu_name)
            {
                if($menu_name['id'] == '1')
                {
                    echo '<div class="tab-pane active" id="' . $menu_name['id'] . '">
                    <h1 class="menu_name>' . $menu_name['menu_name'] . '</h1>';
                }
                else
                {
                    echo '<div class="tab-pane" id="' . $menu_name['id'] . '">
                    <h1 class="menu_name>' . $menu_name['menu_name'] . '</h1>';
                }
            }
     
            echo    '</div>';
            Database::disconnect();
    Avec ce code pour le moment, rien ne s'affiche après le menu, peut importe le choix.
    J'ai essayé de faire une nouvelle requête mais je ne vois pas comment imbriquer l'id selectionné dans le WHERE ... Je pense que c'est une bonne piste mais sans réussir à l'exploiter...

    Si quelqu'un a une idée, j'en serais reconnaissant

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    comme je ne connais pas trop comment tu fais fonctionner ton menu, j'ai repris ton code presque à l'identique en le corrigeant, je ne garantis rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    $hsc     = function($p): string { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };  // fonction d'échappement des caractères dangereux
    $implode = function(array $p): string { return implode(null, $p); };
     
    // on récupère l'id du menu qui aurait été sélectionné, sinon par défaut c'est 1
    $id_active = 1;
    if (isset($_GET['id'])) {
        $id_active = (int)$_GET['id'] ? (int)$_GET['id'] : 1;
    }
     
    $db    = Database::connect();
    $stmt  = $db->query('SELECT * FROM menus_names');
    $menus = $stmt->fetchAll();
    $nav   = [];
     
    foreach ($menus as $m) {
        $active = ((int)$m['id'] === $id_active) ? ' class="active"' : '';
        $nav[]  = <<<html
    <li role="presentation"{$active}><a href="#{$m['id']}" data-toggle="tab">{$hsc($m['menu_name'])}</a></li>
    html;
    }
     
    $details = [];
    foreach ($menus as $m) {
        $active    = ((int)$m['id'] === $id_active) ? ' active' : '';
        $details[] = <<<html
    <div class="tab-pane{$active}" id="{$m['id']}">
        <h1 class="menu_name>{$hsc($m['menu_name'])}</h1>
    </div>    
    html;
    }
     
    echo <<<html
    <nav>
        <ul class="nav nav-pills">
            {$implode($nav)}
        </ul>
    </nav>
    {$implode($details)};
    html;

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2019
    Messages : 3
    Par défaut
    Salut !

    Déjà merci d'avoir répondu
    Ensuite j'aurais dû préciser que je suis encore débutant (en cours de reconversion professionnelle ). Du coup j'ai comprit les grandes lignes du code mais malheureusement il ne fonctionne pas :/
    Je peux poster quelques screens ou codes si ça peut aider à comprendre... Sinon pour faire simple, le menu de navigation lié aux menus de la carte s'affiche par défaut avec un menu sélectionné en classe active en fonction de celui affiché. Par exemple si le menu du midi est sélectionné, il est affiché dans un style différent des autres (dans la barre de navigation) et à l'écran c'est le descriptif de ce menu qui s'affiche, donc les plats ... et si je sélectionne le menu du marché, c'est ce menu qui prend le style actif et c'est le descriptif de ce menu qui vient s'afficher mais tout en restant sur la même page.
    Je ne sais pas si c'est plus clair ...

Discussions similaires

  1. [LibreOffice][Tableur] Récupération d'une valeur décalée par rapport à un résultat mobile dans une colonne
    Par sterzock dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 31/08/2016, 16h47
  2. Réponses: 2
    Dernier message: 31/10/2009, 15h01
  3. Réponses: 5
    Dernier message: 24/08/2009, 08h14
  4. [MySQL] Avoir les 50 premiers résultat par rapport à une recherche
    Par polemoss dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 30/11/2007, 11h42
  5. effectuer une moyenne par rapport à un champ
    Par djejackk dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/05/2005, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo