sortir une variable d'une boucle

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

08 nov. 2005, 09:52

voici ton programme telque je l'ai compris : qui affiche la liste des pc réservés par utilisateur sous forme de blocs de 6 carrés par ligne.

Fonctionnement :
La requête trouve le nombre de pc réservés par utilisateur puis une boucle schèmatise les pc selon leur nombre dans une grille de 6 colonnes et n lignes et ce pour chaque utilisateur.

Dans le cadre de ton calendrier ceci se passe pour une date donnée.

Voici le code, où ta requête est remplacée par un tableau pour simplifier les tests :
<table width="100%"  border="1" align="center">
<tr> 
<?php 
                                 
                // on recupere l'id_user de chaque reservation sur la soirée donnée 
                $query_res = array(
				array("username"=>"toto","nb_pc"=>10),
				array("username"=>"momo","nb_pc"=>5),
				array("username"=>"popo","nb_pc"=>14)
				); 
                 
                // si la requete renvoie quelquechose, on execute la boucle 
                if ($query_res) 
                {     
                    foreach($query_res as $result_res) 
                    {     
                        echo "<table><legend>r&eacute;serv&eacute; par ".$result_res['username']."</legend>";
						for ($a=1; $a<=$result_res['nb_pc']; $a++) 
                        { 
                            if (($a-1) % 6 == 0) 
                            { 
                                echo "<tr>"; 
                            } 
                            echo "<td title=\"r&eacute;serv&eacute; par ".$result_res['username']."\"><img src=\"pc_res.gif\" width=\"13\" /></td>"; 
                        }
						echo "</table><p>" ;
                    } 
                                        
                } 
?> 
               
</table>
Essaye de réadapter ce code.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

VaN
Mammouth du PHP | 1107 Messages

08 nov. 2005, 15:10

je viens de tester ton code. ok le principe est la, mais je souhaiterais que les reservations des différents USER soient toutes dans le meme tableau.
Fonctionnement :
La requête trouve le nombre de pc réservés par utilisateur puis une boucle schèmatise les pc selon leur nombre dans une grille de 6 colonnes et n lignes et ce pour chaque utilisateur.
Justement, il ne faut pas créer une grille par utilisateur, mais une grille générale, et là ou je bloque, ne pas passer à la ligne entre chaque reservation.

j'ai modifié ton code de cette manière :
<table width="100%"  border="1" align="center"> 
<tr> 
<?php 
                                  
                // on recupere l'id_user de chaque reservation sur la soirée donnée 
                $query_res = array( 
                array("username"=>"toto","nb_pc"=>10,"ID"=>1), 
                array("username"=>"momo","nb_pc"=>5,"ID"=>2), 
                array("username"=>"popo","nb_pc"=>14,"ID"=>3) 
                ); 
                  
                // si la requete renvoie quelquechose, on execute la boucle 
                if ($query_res) 
                {      
                    foreach($query_res as $result_res) 
                    {      
                        
                        for ($a=1; $a<=$result_res['nb_pc']; $a++) 
                        { 
                            if (($a-1) % 6 == 0) 
                            { 
                                echo "<tr>"; 
                            } 
                            echo "<td title="r&eacute;serv&eacute; par ".$result_res['username'].""><img src="pc_res.gif" width="13" />".$result_res['ID']."</td>"; 
                        } 
                       
                    } 
                                         
                } 
?> 
                
</table>
ce qui donne ça : http://vanwork.nuxit.net/goodgame/calendrier/test.php
Mais il y'a toujours ce probleme de retour à la ligne.

Je viens de regarder le code généré, c'est pas extra en plus :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans nom</title> </head> <body> <table width="100%" border="1" align="center"> <tr> <tr> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <tr> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <td title="r&eacute;serv&eacute; par toto"><img src="pc_res.gif" width="13" />1</td> <tr> <td title="r&eacute;serv&eacute; par momo"><img src="pc_res.gif" width="13" />2</td> <td title="r&eacute;serv&eacute; par momo"><img src="pc_res.gif" width="13" />2</td> <td title="r&eacute;serv&eacute; par momo"><img src="pc_res.gif" width="13" />2</td> <td title="r&eacute;serv&eacute; par momo"><img src="pc_res.gif" width="13" />2</td> <td title="r&eacute;serv&eacute; par momo"><img src="pc_res.gif" width="13" />2</td> <tr> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <tr> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <tr> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> <td title="r&eacute;serv&eacute; par popo"><img src="pc_res.gif" width="13" />3</td> </table> </body> </html>
le probleme vient du fait qu'une fois qu'il a finit la boucle de USER 1, il passe à la boucle de USER 2, et ré-initialise $a à 1. et donc vue que ($a - 1) % 6 = 0, il ecrit le <tr>.

d'aileurs ça se voit à l'ouverture du tableau, le script à crée deux <tr> à la suite.

VaN
Mammouth du PHP | 1107 Messages

08 nov. 2005, 16:10

Trouvé !!!

je savis bien que la solution résidait dans le fait de récuperer $a à la fin de la boucle et de le re-injecter dans la boucle suivante !

Voilà le script, un peu bricolé, pour ceux qui ont participé au thread, merci :
<?php 
                                  
                // on recupere l'id_user de chaque reservation sur la soirée donnée 
                $query_res = array( 
                array("username"=>"toto","nb_pc"=>10,"ID"=>1), 
                array("username"=>"momo","nb_pc"=>5,"ID"=>2), 
                array("username"=>"popo","nb_pc"=>14,"ID"=>3) 
                ); 
                  
                // si la requete renvoie quelquechose, on execute la boucle 
                if ($query_res) 
                {      
                    foreach($query_res as $result_res) 
                    {      
                        if (!isset($b))
						{
							$b = 1;
						}
						
						for ($a=$b; $a<=($result_res['nb_pc']+$b); $a++) 
						{ 
							if (($a == '7') || ($a == '13'))
							// le nombre de case maximum du tableau est de 18, 
							// pas la peine d'aller plus loin donc.
							{ 
								echo "<tr>\n";
							} 
							echo "<td title=\"r&eacute;serv&eacute; par ".$result_res['username']."\">".$result_res['ID']."<br>a = ".$a."<br>b = ".$b."</td>\n"; 
						}
						$b = $a;
                    }                      
                } 
?>