Plusieurs fetch() sur une même page

Par Grope, il y a 10 ans


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

Grope, il y a 10 ans

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

Carouge10, il y a 10 ans

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

$donnees1 = $donnees; $donnees->fetch(); $donnees1->fetch();
Grope, il y a 10 ans

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()) {
}
?>

Carouge10, il y a 10 ans

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

Grope, il y a 10 ans

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.

Carouge10, il y a 10 ans

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

AlexJM, il y a 10 ans

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

Balbert, il y a 10 ans

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

Grope, il y a 10 ans

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

Balbert, il y a 10 ans

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 }
Balbert, il y a 10 ans

Essai ceci =>

$donnees = $donnees->fetchAll(); foreach ($donnees as $donnee) { // machin } foreach ($donnees as $donnee) { // Autre machin }
Grope, il y a 10 ans

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

Balbert, il y a 10 ans

Lol essai ceci =>

$donnees1 = array(); while ($donnee = $donnees->fetch()) { // machin $donnees1[] = $donnee; } foreach ($donnees1 as $donnee) { // Autre machin }
Grope, il y a 10 ans

Toujours rien ^^'

Carouge10, il y a 10 ans

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, il y a 10 ans

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 ?

Kiv, il y a 10 ans

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, il y a 10 ans

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

Kiv, il y a 10 ans

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, il y a 10 ans

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

Kiv, il y a 10 ans

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

Grope, il y a 10 ans

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 :/

Balbert, il y a 10 ans

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, il y a 10 ans

Merci pour vos réponses ! ;D