[RESOLU]Changement d'ordre... et ça ne marche plus.

Eléphant du PHP | 58 Messages

23 déc. 2013, 11:42

Bonjour.

L'erreur vous paraitra sans doutes évidente mais je ne la trouve pas. Pour chaque page je génère plusieurs petits textes l'un après l'autre et tout marchait très bien... jusqu'à ce que j'échange bétement avec un copier-coller un texte de place. Depuis, le dernier texte ne s'affiche pas si le premier et le deuxième s'affichent, alors qu'avant le changement d'ordre tout s'affichait et surtout que ce texte est indépendant des deux autres!
<?php
$req_image_gen_desc="SELECT * 
					 FROM  `image_gen_desc` WHERE image_gen='".$image_gen."'";
$res_image_gen_desc=mysql_query($req_image_gen_desc)
           or die ("la requete image_gen_desc ne peut pas être executee");
		   
While ($desc=mysql_fetch_array ($res_image_gen_desc))
	{
	extract ($desc);
	$desc=utf8_encode($desc_fr);
	echo"$star_name $desc";
	}
	

$req_asso="SELECT * FROM assoc WHERE asso_name='".$asso."'";
$res_asso=mysql_query($req_asso)
		  or die ("fuck ça ne marche pas!");	
while ($text1=mysql_fetch_array($res_asso))
	{
		extract($text1);
		$asso_desc=utf8_encode($asso_desc)
		;
		echo"<br>
			 <br>$asso_desc";
	}
echo"<ul>";
$req_asso2="SELECT star_name FROM etoile WHERE asso='".$asso."' ORDER BY star_name";
$res_asso2=mysql_query($req_asso2)
		  or die ("marre d'inventer des messages d'erreur");	
while ($text2=mysql_fetch_array($res_asso2))
	{
		extract($text2);
		$star_url=str_replace(' ','_',$star_name);
		$star_url=str_replace('+','plus',$star_url);
		echo"<li><b><a href='index.php?CONTENU=catalogue&star_url=$star_url'>$star_name</a></b>";
	}
echo"</ul>";

$req_text="SELECT description FROM fiches WHERE name='".$star_name."'";
$res_text=mysql_query($req_text)
		  or die ("fuck ça ne marche pas");	
while ($text3=mysql_fetch_array($res_text))
	{
		extract($text3);
		$description=utf8_encode($description)
		;
		echo"$description";
	}

?>
Si vous pouviez m'aider... j'ai d'autres petits textes à ajouter et j'aimerais que ce problème ne se reproduise plus lors des ajouts!
Modifié en dernier par Stalker le 23 déc. 2013, 16:36, modifié 1 fois.

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

23 déc. 2013, 12:16

salut,

Il faut plus d'info c'est qu'elle partie du code qui te pose problème ?

As tu essayé de debuger (affiche les requêtes sql et exécute les dans un client mysql, ajoute des echo pour savoir si chaque étape se passe bien etc etc.


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

ViPHP
ViPHP | 2577 Messages

23 déc. 2013, 12:17

Il me semble que le second pavé et le troisième sont liés. Le second affiche une url et le troisième la description de l'url (le lien se fait par starname).
Il faut peut être inclure le troisième pavé dans le while du second pour avoir la bonne url avec la bonne description.

Mettre les dernière lignes :
        }
echo"</ul>";

à la fin.

Si c'est vraiment la solution de ton problème, il y a une petit problème de conception sur la base donnée et sur la programmation :
1) boucle sur un select
2) modification de la clé (starname) pour faire le select suivant.

Edit : les remarques de moogli reste vrai, j'ai du utiliser une boule de cristal. Je me fait chier au boulot, donc ca explique certaine chose. En plus, mon boulot consiste souvent à déboguer des trucs que je ne peux pas tester et/ou que je ne comprends pas.

Eléphant du PHP | 58 Messages

23 déc. 2013, 12:25

Le troisième bloc était en première position avant le changement d'ordre et le bug

Le blog 1 et 2 sont liés, si l'étoile appartient à une association, j'affiche et la description de l'association et la liste d'étoiles lui appartenant.

Le troisième bloc est indépendant.

Quand l'étoile appartient à une association, seul les deux premiers blocs marchent maintenant alors qu'avant les trois s'affichaient avant(et le code n'a pas changé, seulement l'ordre). Lorsque l'étoile est solitaire (asso est vide dans la BDD) le troisième bloc s'affiche seul comme prévu.

star_name est juste le nom de l'étoile, il ne fait pas vraiment le lien entre le bloc 1 et 3, qui marchent très bien tout seuls

Eléphant du PHP | 58 Messages

23 déc. 2013, 12:42

Mettre les dernière lignes :
        }
echo"</ul>";

à la fin.
Elles y sont déjà non?

ViPHP
ViPHP | 2577 Messages

23 déc. 2013, 15:11

Un des problèmes, c'est que l'on ne sais ta d''ou sortent tes variables. En particulier celles qui sont sensées être renseignées avant le code présenté.

$image_gen : jamais initialisée.
$asso : provient de SELECT * FROM `image_gen_desc` WHERE image_gen='".$image_gen."'", une seule association ?
$star_name : peut provenir du select sur la table `etoile` ou d'ailleurs ? Mais plusieurs valeurs pour une association ?

Evites d'utiliser "*", mais met les colonnes explicitement.
Evites d'utiliser extract, mais utilise $star_name = $text2['star_name'] ou directement $text2['star_name'].
Ainsi ca sera plus compréhensible.

Edit, j'ai l'impression que le problème vient de $star_name qui est écrasé lors de la lecture du select de la table etoile.

Eléphant du PHP | 58 Messages

23 déc. 2013, 16:02

Je vois où est le problème, c'est lorsque je recherche la liste d'étoiles appartenant à l'association que ça me change $star_name... je vais voir ce que je peux faire à ce niveau là.

C'est bon merci beaucoup. J'ai réglé le problème en sauvegardant le nom de l'étoile dans une nouvelle variable que j'utilise ensuite pour le dernier bloc.