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 :

foreach : boucle deux fois sur la même ligne de la table


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut foreach : boucle deux fois sur la même ligne de la table
    Bonjour,
    Je fais un petit projet avec une architecture MVC. j'ai une base de donnée avec une table recettes (id, titre, description etc...), pour tester j'ai une seule ligne dans la table.
    Quand je vais insérer d'autres lignes dans la table je voudrais générer des cards Bootstrap.
    Dans le model :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function getAll() {
                $req = "Select titre, description from recettes";
                $recettes = $this->bdd->query($req);
                $resultat = $recettes->fetch(PDO::FETCH_ASSOC);
                return $resultat;
    }

    Si j'utilise ce code dans la vue je n'ai pas de souci, j'ai une seule fois l'affichage de ma ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
            $recettes = $recettesController->getAllRecettes();
            foreach($recettes as $rec) {
                echo $rec;
            }
    Mon problème est avec ce code(il boucle deux fois la même ligne donc j'ai un doublon) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php foreach($recettes as $rec) :?>
                    <div class="col-md-3 mb-3">
                        <div class="card">
                            <div class="card-body">
                                <img class="card-img-top" src="..." alt="Card image cap">
                                <h5 class="card-title"><?= $recettes["titre"]?></h5>
                                <p class="card-text"><?= $recettes["description"]?> </p>
                                <a href="#" class="btn btn-primary">lire</a>
                            </div>
                        </div>
                    </div>
    <?php endforeach ; ?>
    Quand je fais un j'ai bien une seul cle titre et une seule description. Je ne comprends pas pourquoi le premier code marche mais avec le deuxième j'ai ce doublon.
    Mon autre question est :quand j'aurais plusieurs lignes est ce que il faut utiliser fetchAll eu lieu de fetch?
    merci beaucoup désolé si mon post est trop long et si mes termes dans l'explication ne sont pas exactes en informatique.

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    vous n'utilisez pas $rec dans votre 2e code.

    "fetch" récupère seulement une ligne du résultat. si vous allez avoir plusieurs enregistrements, je pense que vous avez plutot besoin de "fetchall" :
    https://www.php.net/manual/fr/pdostatement.fetchall.php

  3. #3
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Bonjour,
    je n'ai pas trop compris votre première partie de réponse. $rec dans la boucles sont les valeurs de ma table je suppose, dans mon deuxième code j'ai besoin juste de placer le titre dans le <h5> la description dans le <p> donc j'ai utilisé $recettes["titre"] et $recettes["description"]. Ce deuxième code marche bien sauf qu'il fait un doublon pourtant j'ai un seul enregistrement dans ma table recettes.
    Dans ma vue je me retrouve deux fois la div avec le même titre et la même description.
    merci

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    je faisais la remarque que vous n'utilisez pas la variable créée par la boucle foreach ce qui est surement une erreur de frappe.
    sinon ça voudrait dire que vous n'avez pas besoin de la boucle puisque vous pouvez déjà accéder à vos données directement dans la variable $recettes.

    regardez aussi les exemples de boucles avec les tableaux à plusieurs dimensions :
    https://www.php.net/manual/fr/contro...es.foreach.php

  5. #5
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    Dans mon projet l'administrateur peut par le biais d'un formulaire ajouter ou supprimer des recettes, donc dans la table je peux par moments avoir un seul enregistrement ou plusieurs, c'est pour cela que j'avais mis une boucle même avec un seul enregistrement pour l'instant. Mais si je comprends bien le problème vient de ma boucle qui n'est pas correcte pour les tableaux multidimensionnel (j'ai lu la documentation) ?
    Si quand il y a un seul enregistrement on ne peut pas utiliser de boucles, comment gérer? je suis un peu perdu
    merci

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    vous devez d'abord résoudre le souci que vous avez avant d'utiliser la boucle, vous verrez que la variable ne contiendra pas la même chose :
    Citation Envoyé par mathieu Voir le message
    "fetch" récupère seulement une ligne du résultat. si vous allez avoir plusieurs enregistrements, je pense que vous avez plutot besoin de "fetchall" :
    https://www.php.net/manual/fr/pdostatement.fetchall.php

  7. #7
    Membre confirmé
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2021
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Mars 2021
    Messages : 206
    Par défaut
    merci pour vos conseils. Je vais essayer
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Positions de deux div sur la même ligne
    Par kabkab dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 18/06/2008, 16h19
  2. Réponses: 1
    Dernier message: 14/02/2008, 08h02
  3. Comment disposer deux formulaires sur la même ligne ??
    Par soad029 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 05/05/2007, 04h14
  4. Comment positionner deux blocs sur la même ligne
    Par yaya0057 dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 27/02/2007, 16h42
  5. Réponses: 6
    Dernier message: 28/09/2005, 10h24

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