while + mysql_fetch_assoc

Eléphanteau du PHP | 28 Messages

13 déc. 2006, 19:12

Bonjour.

Décidément je n'ai pas de chance avec les assoc...

Voici ce que je veux faire:

1- Récupérer des enregistrements dans 1 table.
2- Afficher certaines des données récupérées.
3- Récupérer d'autres enregistrements dans une autre table selon une condition d'une donnée récupérée en 1-
4- Afficher les données de 3- dans un tableau

1- pas de soucis
2- pas de soucis
3- et 4- problème

Voici le code:
//GESTION DES MODULES
//SELECTIONNER LES NIVEAUX DES MODULES DU JOUEUR
include './includes/mysql_connect.php';
$sql = " SELECT * FROM transfo WHERE id_joueur = '" . $_SESSION['id_joueur'] . "' ";
$result = mysql_query( $sql ) or die(mysql_error());
$assoc = mysql_fetch_assoc( $result ) or die(mysql_error());

$niv_centrale = $assoc['niveau_centrale'] + 1;
$niv_transfo = $assoc['niveau_transfo'] + 1;
$niv_sol = $assoc['niveau_solaire'] + 1;
$niv_eol = $assoc['niveau_eolien'] + 1;

mysql_free_result($sql);

//SELECTIONNER LES COUTS DE CONSTRUCTION POUR LE NIVEAU SUIVANT POUR CHAQUE MODULE
//TODO rechercher si cout_joueur existe
$sql = " SELECT * FROM cout_fabrication WHERE categorie = 'energie' ";
$result = mysql_query( $sql ) or die(mysql_error());


while ($assoc = mysql_fetch_assoc( $result )) 
{
	if ($assoc['nom_objet'] = 'centrale' AND $assoc['niveau_objet'] = $niv_centrale) 
	{
		$cout_tml_centrale = $assoc['cout_tml'];
		$cout_ste_centrale = $assoc['cout_ste'];
		$cout_pol_centrale = $assoc['cout_pol'];
		$cout_blo_centrale = $assoc['cout_blo'];
		$temps_centrale = $assoc['temps_fabrication'];	
	} 
	elseif ($assoc['nom_objet'] = 'transformateur' AND $assoc['niveau_objet'] = $niv_transfo) 
	{
		$cout_tml_transfo = $assoc['cout_tml'];
		$cout_ste_transfo = $assoc['cout_ste'];
		$cout_pol_transfo = $assoc['cout_pol'];
		$cout_blo_transfo = $assoc['cout_blo'];
		$temps_transfo = $assoc['temps_fabrication'];		
	}
	elseif ($assoc['nom_objet'] = 'module solaire' AND $assoc['niveau_objet'] = $niv_sol) 
	{
		$cout_tml_sol = $assoc['cout_tml'];
		$cout_ste_sol = $assoc['cout_ste'];
		$cout_pol_sol = $assoc['cout_pol'];
		$cout_blo_sol = $assoc['cout_blo'];
		$temps_sol = $assoc['temps_fabrication'];		
	}
	elseif ($assoc['nom_objet'] = 'module eolien' AND $assoc['niveau_objet'] = $niv_eol) 
	{
		$cout_tml_eol = $assoc['cout_tml'];
		$cout_ste_eol = $assoc['cout_ste'];
		$cout_pol_eol = $assoc['cout_pol'];
		$cout_blo_eol = $assoc['cout_blo'];
		$temps_eol = $assoc['temps_fabrication'];		
	}	
}

?>
ensuite j'ai le script qui affiche les un tableau contenant, entre autre, les infos récupérées dans la boucle. Chaque if doit renvoyer des infos pour une ligne du tableau. (4 if = 4 lignes)


Avec ce code tel quel il n'y a que les infos du premier if qui sont affichées, et ce ne sont même pas les bonnes infos, la condition
AND $assoc['niveau_objet'] = $niv_centrale
n'est pas respectée.

Si je change les elseif en if alors les infos sont affichées mais toujours pas les bonnes faute du respect des conditions AND.

Au final en mettant que des IF et non des ELSEIF mon tableau comporte bien des données récupérées dans la BDD mais seulement celles du dernier enregistrement! J'ai donc 4 lignes identiques avec des valeurs fausses... cool lol

Ais-je raté quelque-chose?

Merci de votre aide.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 déc. 2006, 23:26

Salut,

Les test if() demandent un double "=" sinon le test récupère le retour de l'affectation:
if($var = "toto") // renvois TRUE donc passe toujours dans la condition

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphanteau du PHP | 28 Messages

18 déc. 2006, 00:05

Merci bien Truc, je vais dorénavant essayer de faire plus attention à ce genre d'erreur.

Je demande le délestage de ce topic car l'erreur étant si classique qu'il vaut mieux ne pas encombrer le forum.