Bonjour,
J'ai un petit problème avec mon site internet.
Je dois afficher à un endroit d'une page une première boucle, mais je dois effectuer cette même boucle à un autre endroit de la page.

                            <?php 
                                while ($donnees = $result->fetch()) { 
                                }
                            ?>
                            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut dapibus felis, ut mattis dolor. Phasellus dignissim, ex ut gravida sodales, quam risus feugiat risus, eget tristique leo elit sit amet purus. Aenean pulvinar fringilla ipsum sed iaculis. Aenean eget ultrices justo, ut vehicula augue. Integer nulla enim, accumsan in augue sed, tristique dictum magna. Nam suscipit lacus at molestie eleifend. In vel ipsum vitae neque pretium laoreet non vel est. Sed dictum sollicitudin nulla non tincidunt. Vestibulum orci est, tincidunt et risus non, sagittis elementum turpis.</p>
                            <?php 
                                while ($donnees = $result->fetch()) { 
                                }
                            ?>

Voilà en gros ce que j'aimerais effectuer. Merci pour vos réponses :)

24 réponses


Kiv
Réponse acceptée

Ahaaaaa ! Je l'aiiii !
Pour le coup je l'ai essayer chez moi.

Bon il est vrai que je suis moins fan des boucles while, d'ailleurs sur tous mes projets je les utilises très peu.

voici la correction : (en tout cas chez moi ça fonctionne)

$donnees = $reponse->fetchAll();

foreach($donnees as $key => $donnee){
   echo '<p><strong>' . htmlspecialchars($donnee['title']) . '</strong></p>'; 
}
?>
<p>Lorem...</p>
<?php
foreach($donnees as $key => $donnee){
   echo '<p><strong>' . htmlspecialchars($donnee['title']) . '</strong></p>'; 
}
?> 

Comme tu peux le voir de fetch je suis passé à fetchAll, puis la boucle j'utilise le foreach. puis les deux boucles sont identiques.
Voilà Mr :)

Bonjour,
Soit vous utilisez une fonction ou vous copiez les données avant de faire le fetch()

$donnees1 = $donnees;
$donnees->fetch();
$donnees1->fetch();
Grope
Auteur

Ca reviendrait donc à faire ceci
Et ca marcherait ?
<?php
$donnees = $donnees1;
while ($donnees = $result->fetch()) {
}
?>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut dapibus felis, ut mattis dolor. Phasellus dignissim, ex ut gravida sodales, quam risus feugiat risus, eget tristique leo elit sit amet purus. Aenean pulvinar fringilla ipsum sed iaculis. Aenean eget ultrices justo, ut vehicula augue. Integer nulla enim, accumsan in augue sed, tristique dictum magna. Nam suscipit lacus at molestie eleifend. In vel ipsum vitae neque pretium laoreet non vel est. Sed dictum sollicitudin nulla non tincidunt. Vestibulum orci est, tincidunt et risus non, sagittis elementum turpis.</p>
<?php
while ($donnees1 = $result->fetch()) {
}
?>

A essayer.
et c'est $donnees1 = $donnees;
utiliser la balise < /> pour insérer du code, c'est plus lisible

Grope
Auteur

Je viens d'essayer la première boucle s'affiche corréctement, la seconde n'affiche rien.

Désolé pour la balise.
Merci pour vos réponses.

vous affichez la même chose dans les 2 boucles ou c'est différent ?

Bonsoir,
C'est normal que la seconde n'affiche rien, puisqu'il faut faire $result1 = $result; et non $donnees1 = $donnees;

Grope
Auteur

Carouge10 : Oui j'affiche la même chose dans les 2 boucles
AlexJM : D'accord je vais essayer merci

Toujours le même problème AlexJM malgrès ta solution :/
Merci pours vos réponses

Salut @ZarKx

Essai ceci =>

$donnees1 = clone $donnees;

while ($donnee = $donnees->fetch()) {
    // machin
}

while ($donnee = $donnees1->fetch()) {
    // Autre machin
}

Sinon tu peux essayer ceci aussi

$donnees = $donnees->fetchAll();

foreach ($donnees as $donnee)
{
     // machin
}

foreach ($donnees as $donnee)
{
     // Autre machin
}

Essai ceci =>

$donnees = $donnees->fetchAll();
foreach ($donnees as $donnee)
{
     // machin
}

foreach ($donnees as $donnee)
{
     // Autre machin
}
Grope
Auteur

Ni l'une ni l'autre ne marche :/
Merci pour ta réponse !

Lol essai ceci =>

$donnees1 = array();
while ($donnee = $donnees->fetch()) {
    // machin

    $donnees1[] = $donnee;
}

foreach ($donnees1 as $donnee)
{
     // Autre machin
}
Grope
Auteur

Toujours rien ^^'

C'est très etrange ça !!!!

Grope
Auteur

Ca fait maintenant quelques jours que je bloque sur ce problème :/
Merci en tout cas pour ton aide ;)

je vais essayer quelque chose mais pour t'aider au mieux, je peux avoir le code de la boucle (si ce n'est pas indiscret).

Grope
Auteur

Je n'ai pas grand chose de plus à te donner de plus, que ce que j'ai déjà donné dans mon premier post si ce n'est la requête, que veux-tu de plus ?

Essai de mettre :

$req->closeCursor();

à la fin de ta première boucle, pour qu'ensuite tu puisses rappeler ta même requête pour ta seconde boucle.
(A voir)

Grope
Auteur

Je viens d'essayer ta solution je n'ai pas d'erreurs qui s'affichent, la première boucle s'affiche correctement mais la seconde ne retourne aucuns résultats... :/

Voilà ce que j'ai modifié :

     <?php 
            while ($donnees = $result->fetch()) { 

            } $result->closeCursor();  ?>

        <p>Lorem ipsum</p>

        <?php 
            while ($donnees = $result->fetch()) { 

            }
        ?>

Merci pour ta réponse ;)

Outch j'ai été con ! forcément si on met une fermeture de requête ta deuxième boucle reçoit aucune valeur.

as-tu essayé ça:

     <?php 
            while ($donnees1 = $result->fetch()) { 
                echo $donnees1->titre;
            } 

        <p>Lorem ipsum</p>

        <?php 
            while ($donnees2 = $result->fetch()) { 
                echo $donnees2->titre;
            }
        ?>
Grope
Auteur

Même résultat qu'avant, la première boucle s'affiche correctement, la seconde ne s'affiche pas :/

Grope
Auteur

Je dois probablement mal m'y prendre mais avec le code que tu as modifié, je l'ai donc adapté.
Mais seul la première lignes apparait
Je n'ai pas vraiment l'impression que la boucle s'opère :/

Salut encore moi,

Essai ceci =>

$donnees = $reponse->fetchAll();
$donnees1 = array();

foreach($donnees as $key => $donnee){
   echo '<p><strong>' . htmlspecialchars($donnee['title']) . '</strong></p>'; 
   $donnees1[] = $donnee;
}
?>
<p>Lorem...</p>
<?php
foreach($donnees1 as $key => $donnee){
   echo '<p><strong>' . htmlspecialchars($donnee['title']) . '</strong></p>'; 
}
?> 
Grope
Auteur

Merci pour vos réponses ! ;D