[Réglé] Une boucle dans une boucle...

Forum de développements privés.

Modérateur: Equipe

Règles du forum
A lire impérativement sur notre page : Règlement

[Réglé] [réglé] Une boucle dans une boucle...

Messagepar Alcazarfr » 07 Nov 2004 à 13:34

Toujours pour mon monopoly, j'ai une boucle qui sert à affciher la liste des joueurs, leur nom, leur solde, leur localisation, etc.

Code: Tout sélectionner
$sql = "SELECT mj.*, u.user_id, u.username, mp.nom_case
	FROM " . USERS_TABLE . " u, " . MONOPOLY_PARTIE_JOUEUR_TABLE . " mj, " . MONOPOLY_PARTIE_PLATEAU_TABLE . " mp
	WHERE mj.id_partie = $id
		AND u.user_id = mj.id_joueur
		AND mp.partie_id = mj.id_partie
		AND mp.plateau_case = mj.lieu
	ORDER BY mj.numero_joueur";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{

		$ids_joueurs = $row['user_id'];
		$numero_joueur = $row['numero_joueur'];
	
$template->assign_block_vars('partie_commencee.joueurs', array(
				'NOMS_JOUEURS' => $row['username'],
				'IDS_JOUEURS' => $ids_joueurs,
				'U_VIEWPROFILE' => append_sid("monopoly_profil_joueur.$phpEx?" . POST_USERS_URL . "=$ids_joueurs"),
				'NUMERO_JOUEUR' => $row['numero_joueur'],
				'SOLDES_JOUEURS' => $row['solde'],
				'LIEUX_JOUEURS' => $row['lieu'],
				'NOM_CASE' => $row['nom_case'],
				'VIRGULE_OU_POINT' => $virgule_ou_point)
			);

		$i++;
	}
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);

}


Le code marche (et peut paraitre bizzare, mais c'est normal... :wink: )

Il y a une ligne par joueur. Et j'aimerai qu'il y ai pour chaque ligne, la liste des proprietés détenues par le joueur...

Or, je ne peux pas modifier (à ma onnaissance) la requete, car elle appelerai alors 2 fois (mais pas pour la même chose) le champ mp.nom_case... :roll:

Alors, j'ai essayé une boucle dans la boucle, mais quelquesoit la boucle (bonne, j'en suis sur), cela ne marchait pas (tpl bon aussi...).


Donc Avee vous une idée pour faire une boucle, dans une boucle??? :roll:

Merci.
Modifié en dernier par Alcazarfr le 08 Nov 2004 à 21:55, modifié 1 fois.
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar titeuf51 » 07 Nov 2004 à 14:01

Qu'est ce qu'il t'empêche de le faire ?
Quelle erreur ?
@+ Titeuf

Je suis de moins en moins présent sur ce forum, j'ai beaucoup de choses à faire.
Je ne peux donc pas être très actif pour un support quelconque.


On dit bien Le ridicule ne tue pas. On dit aussi Ce qui ne nous tue pas nous rend plus fort. Alors pourquoi ne pas dire Le ridicule rend plus fort ? :D
Avatar de l’utilisateur
titeuf51
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 3077
Enregistré le: 29 Fév 2004 à 14:27
Localisation: France, Reims

Messagepar Genova » 07 Nov 2004 à 14:25

Tu peux filer la structure de tes tables que tu souhaites relier avec les points communs entre les tables (user_id par exemple) et nous dire ce que tu veux relier?
Avatar de l’utilisateur
Genova
Pistolero des MODs
 
Messages: 7593
Enregistré le: 18 Nov 2003 à 18:45
Localisation: En train de programmer, logique non?

Messagepar Alcazarfr » 07 Nov 2004 à 15:29

Concernant la structure des tables:

Image

Je dois récupérer une première fois nom_case pour affciher le lieu ou est le joueur, et une autre fois pour afficher le nom de ses propriétés.


Titeuf51: Je l'avais déjà, tu penses... Je viens de le refaire pour toi... cela me donne:

Code: Tout sélectionner
$sql = "SELECT mj.*, u.user_id, u.username, mp.nom_case
	FROM " . USERS_TABLE . " u, " . MONOPOLY_PARTIE_JOUEUR_TABLE . " mj, " . MONOPOLY_PARTIE_PLATEAU_TABLE . " mp
	WHERE mj.id_partie = $id
		AND u.user_id = mj.id_joueur
		AND mp.partie_id = mj.id_partie
		AND mp.plateau_case = mj.lieu
	ORDER BY mj.numero_joueur";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{

		$ids_joueurs = $row['user_id'];
		$numero_joueur = $row['numero_joueur'];

		if ( $row['numero_joueur'] > 1)
		{
			$template->assign_block_vars('joueurs', array(
				'NOMS_JOUEURS' => $row['username'],
				'U_VIEWPROFILE' => append_sid("monopoly_profil_joueur.$phpEx?" . POST_USERS_URL . "=$ids_joueurs"),
				'NUMERO_JOUEUR' => $numero_joueur,
				'VIRGULE_OU_POINT' => $virgule_ou_point)
			);
		}
	
		if ( $tour > 0 )
		{

			$template->assign_block_vars('partie_commencee.joueurs', array(
				'NOMS_JOUEURS' => $row['username'],
				'IDS_JOUEURS' => $ids_joueurs,
				'U_VIEWPROFILE' => append_sid("monopoly_profil_joueur.$phpEx?" . POST_USERS_URL . "=$ids_joueurs"),
				'NUMERO_JOUEUR' => $row['numero_joueur'],
				'SOLDES_JOUEURS' => $row['solde'],
				'LIEUX_JOUEURS' => $row['lieu'],
				'NOM_CASE' => $row['nom_case'],
				'VIRGULE_OU_POINT' => $virgule_ou_point)
			);

			$sql = "SELECT nom_case
				FROM " . MONOPOLY_PARTIE_PLATEAU_TABLE . "
				WHERE partie_id = '$id'
					AND proprietaire = '$numero_joueur'";

			if( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
			}
			if ( $rowpossessions = $db->sql_fetchrow($result) )
			{
				$i = 0;
				do
				{
					$template->assign_block_vars('partie_commencee.joueurs.possessions', array(
						'POSSESSIONS_PERSOS' => $rowpossessions['nom_case'])
					);

					$i++;
				}
				while ( $rowpossessions = $db->sql_fetchrow($result) );
				$db->sql_freeresult($result);
			}

		}




		$i++;
	}
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);



}


et
Code: Tout sélectionner
<!-- BEGIN joueurs -->
  <tr>
	<td width="25%" height="32" class="row2" align="center" valign="middle"> <span class="genmed" > <a href="{partie_commencee.joueurs.U_VIEWPROFILE}" class="gen">{partie_commencee.joueurs.NOMS_JOUEURS}</span></td>
	<td width="15%" height="32" class="row2" align="center"> <span class="genmed">{partie_commencee.joueurs.SOLDES_JOUEURS} {SYMBOLE}</span></td>
	<td width="30%" height="32" class="row2" align="center"> <span class="genmed">{partie_commencee.joueurs.NOM_CASE} (case n° {partie_commencee.joueurs.LIEUX_JOUEURS}) </span></td>
	<td width="30%" height="32" class="row2" align="center"> <span class="genmed">
<!-- BEGIN possessions -->
{partie_commencee.joueurs.possessions.POSSESSIONS_PERSOS} - 
<!-- END possessions -->
</span></td>
  </tr>



Et ... n'affiche que la première ligne... (le premier persos..) mais affcihe correctement les propriétés de ce joueur


Merci pour votre aide.


EDIT: Les
Code: Tout sélectionner
if ( $row['numero_joueur'] > 1)
dans le ocde sont " a part", et servent pour une autre liste. (qui marche)
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Genova » 07 Nov 2004 à 19:14

Alkazarf ca me semble assez consuf tes tables, si tu fais ce que tu veux faire ca va augmenter ton nombre de requete vu que tu devras en faire dans ta boucle, tu devrais revoir tes tables de manièere a les joindre en une seule fois ;)
Avatar de l’utilisateur
Genova
Pistolero des MODs
 
Messages: 7593
Enregistré le: 18 Nov 2003 à 18:45
Localisation: En train de programmer, logique non?

Messagepar Alcazarfr » 07 Nov 2004 à 19:19

bah justement, je ne peux pas...

Il me faut une table sur les utilisateurs, et une autre sur le "plateau" de jeu... (rue, proprietaire, maisons, etc.)...

Ave la boucle, j'ai aussi un message d'erreur en dehors du tableau:
Code: Tout sélectionner
Warning: mysql_fetch_array(): 25 is not a valid MySQL result resource in c:\program files\easyphp1-7\www\monopoly\db\mysql4.php on line 214

Warning: mysql_free_result(): 25 is not a valid MySQL result resource in c:\program files\easyphp1-7\www\monopoly\db\mysql4.php on line 318


Pourriez vous juste m'aider à débuger ces 2 boucles?

NB: Pour les nombre de requetes, j'arrive à 4 avec celle ci, je pense que c'est résonable...

Et je ferai une longue phase d'optimisation entre temps...
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar korko » 07 Nov 2004 à 20:33

je ne saurait que te conseiller fortement de changer le nom de tes variables lors de ta 2eme requete pk ? Car tu utilise ces variables déja pour ta premiere boucle.
korko
Apprenti-floodeur
Apprenti-floodeur
 
Messages: 1334
Enregistré le: 09 Aoû 2003 à 14:48
Localisation: Entre 2 variables

Messagepar Alcazarfr » 07 Nov 2004 à 21:19

korko a écrit:je ne saurait que te conseiller fortement de changer le nom de tes variables lors de ta 2eme requete pk ? Car tu utilise ces variables déja pour ta premiere boucle.


??? Elles ne sont pas identiques... 8O
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar korko » 08 Nov 2004 à 19:33

parceque dans
Code: Tout sélectionner
         $sql = "SELECT nom_case
            FROM " . MONOPOLY_PARTIE_PLATEAU_TABLE . "
            WHERE partie_id = '$id'
               AND proprietaire = '$numero_joueur'";

         if( !($result = $db->sql_query($sql)) )
         {
            message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
         }
         if ( $rowpossessions = $db->sql_fetchrow($result) ) 

$sql, $result sont différents de
Code: Tout sélectionner
$sql = "SELECT mj.*, u.user_id, u.username, mp.nom_case
   FROM " . USERS_TABLE . " u, " . MONOPOLY_PARTIE_JOUEUR_TABLE . " mj, " . MONOPOLY_PARTIE_PLATEAU_TABLE . " mp
   WHERE mj.id_partie = $id
      AND u.user_id = mj.id_joueur
      AND mp.partie_id = mj.id_partie
      AND mp.plateau_case = mj.lieu
   ORDER BY mj.numero_joueur";

if( !($result = $db->sql_query($sql)) )
{
   message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}
if ( $row = $db->sql_fetchrow($result) ) 

$sql, $result ?

Pour moi c'est les meme noms et donc sa te pose un bug
korko
Apprenti-floodeur
Apprenti-floodeur
 
Messages: 1334
Enregistré le: 09 Aoû 2003 à 14:48
Localisation: Entre 2 variables

Messagepar Alcazarfr » 08 Nov 2004 à 21:03

Oh, ok... Je ne parlais pas de celle ci... :wink:

JE vais tester après manger, merci :wink:
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar Alcazarfr » 08 Nov 2004 à 21:50

Loué soyez ... :wink: :wink: :wink: :roll: 8O 8O 8O :D :D :D

Cela marche. Merci korko!!!!

LE (the) code:

Code: Tout sélectionner
$sql = "SELECT mj.*, u.user_id, u.username, mp.nom_case
	FROM " . USERS_TABLE . " u, " . MONOPOLY_PARTIE_JOUEUR_TABLE . " mj, " . MONOPOLY_PARTIE_PLATEAU_TABLE . " mp
	WHERE mj.id_partie = $id
		AND u.user_id = mj.id_joueur
		AND mp.partie_id = mj.id_partie
		AND mp.plateau_case = mj.lieu
	ORDER BY mj.numero_joueur";

if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Erreur', '', __LINE__, __FILE__, $sql);
}
if ( $rowpo = $db->sql_fetchrow($result) )
{
	$i = 0;
	do
	{

		$ids_joueurs = $rowpo['user_id'];
		$numero_joueur = $rowpo['numero_joueur'];

		if ( $rowpo['numero_joueur'] > 1)
		{
			$template->assign_block_vars('liste_joueurs', array(
				'NOMS_JOUEURS' => $rowpo['username'],
				'U_VIEWPROFILE' => append_sid("monopoly_profil_joueur.$phpEx?" . POST_USERS_URL . "=$ids_joueurs"),
				'NUMERO_JOUEUR' => $numero_joueur,
				'VIRGULE_OU_POINT' => $virgule_ou_point)
			);
		}
	
		if ( $tour > 0 )
		{

			$template->assign_block_vars('partie_commencee.joueurs', array(
				'NOMS_JOUEURS' => $rowpo['username'],
				'IDS_JOUEURS' => $ids_joueurs,
				'U_VIEWPROFILE' => append_sid("monopoly_profil_joueur.$phpEx?" . POST_USERS_URL . "=$ids_joueurs"),
				'NUMERO_JOUEUR' => $rowpo['numero_joueur'],
				'SOLDES_JOUEURS' => $rowpo['solde'],
				'LIEUX_JOUEURS' => $rowpo['lieu'],
				'NOM_CASE' => $rowpo['nom_case'],
				'VIRGULE_OU_POINT' => $virgule_ou_point)
			);
		}

		$sql = "SELECT nom_case
		FROM " . MONOPOLY_PARTIE_PLATEAU_TABLE . "
		WHERE partie_id = $id
			AND proprietaire = $numero_joueur";
		if( !$resultt = $db->sql_query($sql) )
		{
			message_die(GENERAL_ERROR, 'Erreur?', '', __LINE__, __FILE__, $sql);
		}
		if ( $rowpossessions = $db->sql_fetchrow($resultt) )
		{
			$i = 0;
			do
			{
				$template->assign_block_vars('partie_commencee.joueurs.possessions', array(
					'POSSESSIONS_PERSOS' => $rowpossessions['nom_case'])
				);
				$i++;
			}
			while ( $rowpossessions = $db->sql_fetchrow($resultt) );
			$db->sql_freeresult($resultt);
		}

		$i++;
	}
	while ( $rowpo = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);
}


Merci enormement!
(plus qu'un autre bug... (voir le même forum...))
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar korko » 09 Nov 2004 à 22:44

lol c'est une erreur fréquente que m'a signaler Dark Génova sur mes propres codes. Donc j'apprend a ne plus faire la faute ;)
korko
Apprenti-floodeur
Apprenti-floodeur
 
Messages: 1334
Enregistré le: 09 Aoû 2003 à 14:48
Localisation: Entre 2 variables

Messagepar Alcazarfr » 09 Nov 2004 à 22:47

korko a écrit:lol c'est une erreur fréquente que m'a signaler Dark Génova sur mes propres codes. Donc j'apprend a ne plus faire la faute ;)


Et modeste avec ça!!!!!! ( :wink: serieusement, merci beaucoup, car sans la liste des possessions, la case "possessins " étaient vide, et cela faisaient un vrai trou... :D )

C'est donc maintenant à moi de montrer la faute...
[url=http://www.opera.com]Image
[/url]PhpBB-Power : Base de Données de mods et de tutoriaux, astuces pour personnaliser et optimiser phpBB, support et forums.
Avatar de l’utilisateur
Alcazarfr
Grand-maître des floodeurs
Grand-maître des floodeurs
 
Messages: 2664
Enregistré le: 07 Mar 2004 à 20:22

Messagepar korko » 10 Nov 2004 à 15:27

inderectement, on remercie Dark génova :p
korko
Apprenti-floodeur
Apprenti-floodeur
 
Messages: 1334
Enregistré le: 09 Aoû 2003 à 14:48
Localisation: Entre 2 variables


Retourner vers Développements privés

 


  • Articles en relation
    Réponses
    Vues
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités

cron