[RESOLU] affichage textarea

Eléphanteau du PHP | 31 Messages

08 août 2023, 03:30

bonjour

je rencontre un proble avec une boucle while($row = mysqli_fetch_assoc($requete))
en faite mon while fonctionne mais j aurai besoin d afficher dans une me tetextarea les informations concernant les personne qui ce sont incrite pour un meme poste
j utilise ce code actuellement
<?php
							//recuperation des infos des personne inscript par poste
							 $requete = mysqli_query($link, "SELECT * FROM inscription WHERE Id_epreuve=$Id_circuit1 ORDER BY Num_poste Asc ");
							// $resultat = mysqli_num_rows($requete);
							
							 while($row = mysqli_fetch_assoc($requete)) {
								 
								//$Id_p       = $row['Id_inscription'];
								$Nom        = $row['Nom']; 
								$Prenom     = $row['Prenom'];
								$Num_poste  = $row['Num_poste'];
							 ?>
							 <table class="bouton2" align="center">
								<tr>
								<td><div align="left">Poste: <?php echo $Num_poste; ?></td>
								<td><textarea name="textarea" cols="37" rows="4" style="CURSOR: hand;" disabled readonly>
									<?php 
										echo $Nom.' '. $Prenom.'<br>'; 
									?>
									</textarea></font></td>
								</tr>
							</table>
							 <?php
							 }
							 ?>
actuellement cela me généré autant de textarea que de personne qui ce sont inscrite meme si j ai 3 personne qui ce sont inscrit pour le même poste.
je sais pas si je suis asser claire, en gros je souhaiterai afficher une textarea par poste avec dans chaque textarea le nom des personnes qui sont inscrite pour ce poste.
je pense que je devrai faire un truc du genre
$i=0;
while($row[$i] = mysqli_fetch_assoc($requete)) {
$Nom        = $row[$i]['Nom'];
$i++;
mais la je suis un peu perdu sur la syntaxe,avez vous une idée.
merci

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9626 Messages

08 août 2023, 10:24

Alors, 1ère étape logique, il faut que tu sortes ton textarea de ta boucle pour ne pas en avoir plusieurs qui s'affichent.

Et dans ta boucle, il faut que tu construises une variable qui va contenir le texte que tu veux afficher dans ton textarea. En gros, à chaque passage de ta boucle, tu vas concaténer la valeur courante avec ce qu'il y avait précédemment dans ta variable (les valeurs précédentes de ta boucle.
Donc, avant ta boucle tu inities une variable vide, par exemple $contenu_textarea = '';
Puis dans ta boucle, tu ajoutes les valeurs courantes et un séparateur (par exemple un retour à la ligne \n ) à la variable que tu es en train de construire pas à pas.
Exemple :
 $contenu_textarea = $contenu_textarea . $row['Prenom'] . ' ' . $row['Nom'] . "\n";
À noter qu'il existe l'opérateur ".=" (au lieu de "=", attention à bien voir le ".") qui permet de faire la même chose, c'est à dire concaténer du texte à la suite d'une variable :
 $contenu_textarea .= $row['Prenom'] . ' ' . $row['Nom'] . "\n";

Et enfin dans le textarea, que tu as sorti de ta boucle, et bien tu affiches la valeur de $contenu_textarea
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 31 Messages

08 août 2023, 11:30

bonjour

merci de ta réponse @rthur
si je dit pas de bêtise t on exemple me crée juste un textarea du faite de le sortir de la boucle et me met l ensemble des personnes inscrit dedans.
le problème est que pour un circuit je dispose de plusieurs poste et pour un même poste plusieurs personne peuvent s inscrire.
ce que j aimerai comme résultat c est que pour le poste 1 par exemple ca m affiche un textarea avec toutes les personnes inscrite a ce poste, puis en dessous un textarea pour le poste2 avec toutes les personne qui sont inscrite a ce poste etc etc

Mammouth du PHP | 2581 Messages

08 août 2023, 13:57

ce code doit lui même être dans une autre boucle, qui parcours tous les postes.
à noter, s'il n'y a que le textarea, qu'il est possible d'afficher le début du textarea avant le while, le contenu dans le while, la fermeture du textarea après le while, donc sans variable concaténée.

Eléphanteau du PHP | 31 Messages

08 août 2023, 17:53

Merci or1

Je vai testé ca ce soir je vous tient informé des résultats

Eléphanteau du PHP | 31 Messages

09 août 2023, 14:47

salut

j ai fait avec ta réponse or1 et ca me donne bien le résultat que je souhaite.
je met le code si ca px aider du monde.
<?php
	//recuperation des postes
	 $requete = mysqli_query($link, "SELECT * FROM inscription WHERE Id_epreuve=$Id_circuit1 GROUP BY Num_poste ASC");
			 //$resultat = mysqli_num_rows($requete);
			while($row = mysqli_fetch_assoc($requete)) {

			$Num_poste  = $row['Num_poste'];
								 
?>
			<table class="bouton2" align="center">
			<tr>
			<td colspan="4" class=tetieredate><div align="left">Poste: <?php echo $Num_poste; ?></td>
			<td colspan="4"><textarea name="textarea" cols="37" rows="4" style="CURSOR: hand;" disabled readonly>
<?php
			//recuperation des personne poste par poste
			 $Rqs = mysqli_query($link, "SELECT * FROM inscription WHERE Num_poste='$Num_poste' ");
			 //printf("Select a retourné %d lignes.\n", mysqli_num_rows($Rqs));
			while($row = mysqli_fetch_assoc($Rqs)) {
										 
				$Nom        = $row['Nom']; 
				$Prenom     = $row['Prenom'];
										
			echo $row['Nom'].' '.$row['Prenom']."\n";
			 }
													
?>
	</textarea></font></td>
	</tr>
	</table>
<?Php
	 }
 ?>
merci a vous deux de votre aide

Mammouth du PHP | 2581 Messages

09 août 2023, 19:59

la structure de la base de données n'est probablement pas bonne. s'il y a des postes, des épreuves, des utilisateurs, des inscriptions, il faut une table pour chaque.