par
Ryle » 26 avr. 2015, 09:47
Les boucles ne sont pas des fonctions, les variables définies ou modifiées dans une boucle sont toujours disponibles à la sortie de celle-ci, avec la dernière valeur qui leur a été affectée.
Le problème dans ton cas, c'est que la condition de ta boucle est "tant qu'il reste un enregistrement" ( while($row=$req->fetch()) ). Si tu sors de la boucle, c'est parce que $req->fetch() retourne false (il n'y a pas/plus d'enregistrement à parcourir) et cette valeur est stockée dans ta variable $row lorsque php évalue la condition du while. Ainsi à la sortie de ta boucle, que tu sois rentré dedans où non, $row aura pour valeur false, le empty retournera true et ton message sera affiché...
Selon le traitement que tu veux mettre en place et la base de données utilisée, pour connaître le nombre d'éléments retournés, tu peux faire une autre requête avec un SELECT COUNT(*), faire appel à PDOStatement::rowCount, ou plus simplement compter le nombre d'élément affichés dans php :
$cpt = 0; // compteur à 0
while (...) {
...
$cpt++; // incrémentation du compteur
}
if ($cpt == 0) // test la valeur du compteur
...
Les boucles ne sont pas des fonctions, les variables définies ou modifiées dans une boucle sont toujours disponibles à la sortie de celle-ci, avec la dernière valeur qui leur a été affectée.
Le problème dans ton cas, c'est que la condition de ta boucle est "tant qu'il reste un enregistrement" ( while($row=$req->fetch()) ). Si tu sors de la boucle, c'est parce que $req->fetch() retourne false (il n'y a pas/plus d'enregistrement à parcourir) et cette valeur est stockée dans ta variable $row lorsque php évalue la condition du while. Ainsi à la sortie de ta boucle, que tu sois rentré dedans où non, $row aura pour valeur false, le empty retournera true et ton message sera affiché...
Selon le traitement que tu veux mettre en place et la base de données utilisée, pour connaître le nombre d'éléments retournés, tu peux faire une autre requête avec un SELECT COUNT(*), faire appel à PDOStatement::rowCount, ou plus simplement compter le nombre d'élément affichés dans php :
[php]$cpt = 0; // compteur à 0
while (...) {
...
$cpt++; // incrémentation du compteur
}
if ($cpt == 0) // test la valeur du compteur
...[/php]