Affiché une boucle dans une condition

Eléphant du PHP | 372 Messages

25 avr. 2017, 18:14

Salut tout le monde.

Voilà j'ai une concition qui est bien rempli et je suis sur que j'ai des entrées pour la ville de renseingée mais rien de s'affiche :
// On affiche un texte par defaut selon la ville renseignée
	elseif (!empty($_GET['ville']) && !in_array(ucfirst(strtolower($_GET['ville'])), $villes) && empty($_GET['loisir']) && empty($_GET['departement']) && empty($_GET['page'])) {
		
	// Salle de spectacle, affiché 3 noms de salle différents et unique
	$spectacle = ("SELECT * FROM loisirs WHERE id_type_loisirs = 11 AND city = '".$_GET['ville']."' LIMIT 3");
	$req = $bdd->query($spectacle);
	while($ligne = $req->fetch(PDO::FETCH_ASSOC)){  
	$exemple_salle = ucfirst(strtolower($ligne['manufacturer']));
	$artist = ucfirst(strtolower($ligne['titre']));
	}
	
	
	echo '
	<div class="dummy">
		<div class="container">
			<p>mon texte ..... bla bla puis encore du texte '.$exemple_salle.'<br>
		mon texte ..... bla bla !<br>
		Remplissez .......  '.ucfirst(strtolower($_GET['ville'])).' dès maintenant</p>
		</div></div>';	
	}
Le but étant que '.$exemple_salle.' doit m'afficher une selection de 3 salle au hazard, mais j'ai aboslulement rien qui se passe même pas une erreur ....

Merci pour le coup de pied ;)

Mammouth du PHP | 2703 Messages

25 avr. 2017, 19:04

le code ne prendra en compte que le dernier des 3 enregistrements. si le dernier a un champ manufacturer vide alors c'est normal que cela n'affiche rien.

il faut concaténer avec .= pour avoir 3 valeurs en sortie de boucle.

Eléphant du PHP | 372 Messages

25 avr. 2017, 21:53

Alors j'ai réussi à faire ce que je souhaitais cependant juste un soucis:
// On affiche un texte par defaut selon la ville renseignée
	elseif (!empty($_GET['ville']) && !in_array(ucfirst(strtolower($_GET['ville'])), $villes) && empty($_GET['loisir']) && empty($_GET['departement']) && empty($_GET['page'])) {
		
	echo '
	<div class="dummy">
		<div class="container">
			<p>bla bla texte ...';
		
		// Nom de salle + artiste et ville
		$spectacle = ("SELECT titre,manufacturer FROM loisirs  WHERE city = '".$_GET['ville']."' LIMIT 3");
		$req = $bdd->query($spectacle);
		$premier = true;
		while($ligne = $req->fetch(PDO::FETCH_ASSOC)){
			if($premier){
			$premier = false;
			}
			else{
			echo ' ou peut-être ';
			}
			echo $ligne['titre'].' ('.$ligne['manufacturer'].')';
		}
		
		echo'
		bla bla texte</p>
		</div>
</div>';	
	}
Tout marche bien, cependant je sépare actuellement dans ma boucle par ou peut-être, mais j'aimerais que la premiere fois ca soit ou peut être que le deuxième mais encore et le troisième : mais encore .

Merci à vous encore ;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 avr. 2017, 10:40

salut,

plutôt que de gérer un booléen pour le premier ou la suite utilise un entier.
<?php
    $i = 0;
    while($ligne = $req->fetch(PDO::FETCH_ASSOC)){
      if($i==1){
      echo ' ou peut-être ';
      }
      else if($i > 1){
      echo ' mais encore';
      }
      echo $ligne['titre'].' ('.$ligne['manufacturer'].')';
      $i++;
    }
tu va pouvoir affiner plus si tu le souhaites.
Attention j'ai repris ton code c'est pour cela que je test et plus. ton code n'affiche que les données pour la première ligen (ce qui semble logique vu le résultat souhaité).

au final
toto (....) ou peut être tata ( ...) mais encore titi (...) mais encore tati (...) ....

@+
Il en faut peu pour être heureux ......