Probléme boucle while suivi de if

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probléme boucle while suivi de if

Re: Probléme boucle while suivi de if

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
  ...

Re: Probléme boucle while suivi de if

par tof73 » 24 avr. 2015, 16:04

tu commences par utiliser http://php.net/manual/fr/mysqli-result.num-rows.php pour savoir s'il y a des résultats ou non.

après un while, les variables définies dans la boucle n'existent plus.

Probléme boucle while suivi de if

par Incognito » 24 avr. 2015, 15:47

Bonjour,

Voici mon problème : Lorsque je fait un SELECT, je souhaite afficher mes résultats (jusqu'ici tout va bien)...

Mais si je veux vérifier si mon tableau de résultat est vide, cela ne marche pas...en effet quand j'affiche mes résultats, je retrouve mes résultats...mais suivi du message : "Aucune réservation n'a eu lieu pour l'hôtel ".$admin->getNameHotel().".".

Et quand ma Base de données est bien vide la phrase s'affiche comme il faut...

Voici mon code :
public function getListBooginkHotel(Admin $admin){
		
		$req=$this->_db->prepare('SELECT * FROM booking WHERE name_hotel=:name_hotels ORDER BY dt_begin ASC');
		
		$req->execute(array(':name_hotels'=>htmlspecialchars($admin->getNameHotel()),
										));
		

		while ($row=$req->fetch()){
		echo "Le client ".$row['name_guest'].", a choisi l'hôtel ".$row['name_hotel']." et le numéro de chambre ".$row['room_number'].", et il a réservé du ".$row['dt_begin']." au ".$row['dt_end']." .<br>
					contact: ".$row['email']."<br><br>" ;
		};
		
		$req->closeCursor();
		
		if(empty($row)){
			
		echo "Aucune réservation n'a eu lieu pour l'hôtel ".$admin->getNameHotel().".";
		}
		}
Si quelqu'un peut m'aider, d'avance merci.