Page 1 sur 1

recherche de bug.

Posté : 02 mai 2011, 11:16
par spokito
bonjour,
je me permet de vous soumettre un probleme de code sur lequel je me casse le nez.

la page à débuguer est celle-ci : http://www.desavionsetdesmaquettes.com/ ... &nmaq=1064
dont voici l'image :
Image

pour obtenir le bon affachage de la requete 1, il faur rafraichir la page par la touche f5

lorsqu'on arrive sur la page, la deuxieme partie (requete2 jaune) est bonne mais la premiere partie avec le drapeau (zone rouge correspondant à la requete 1) est bloquée sur l'ancienne valeur.

lorsqu'on fait F5 la bonne valeur apparait dans tout la page / le nom de l'avion et le drapeau correspondent bien à la mquette affichée.

voilà mon code :
---------------------------------------------------------------------------------------------------------------------------
<?

if(isset($_GET['navion'])){
   $r_navion=$_GET['navion'];
}else{
   if(isset($_POST['chxavion'])){
     $r_navion=$_POST['chxavion'];
 }else{
     $r_navion=$_SESSION['idavion'];
 }     }

[color=#FF8000]/*  requete 1*/[/color]
$resultat=mysql_query("SELECT numavion, avion.nom as nomavion, periode.txtperiode, avion.type, avion.presentation, avion.photo, avion.sourcephoto, avion.datecreation, constructeur.nom as nomconstructeur, constructeur.pays, redacteur.login, redacteur.numredacteur, pays.flag as flag
                                           FROM avion, constructeur, redacteur, periode, pays
                                           WHERE avion.numconstructeur=constructeur.numconstructeur
                                           AND avion.numavion='$r_navion'
                                           AND avion.numredacteur=redacteur.numredacteur
                                           AND constructeur.pays=pays.libelle
                                           AND avion.periode = periode.idperiode");
$ligne=mysql_fetch_object($resultat);
$_SESSION['idavionmaq']=$ligne->numavion;
 
<link href="menunav.css" rel="stylesheet" type="text/css">
<body onLoad="MM_preloadImages('images/modif_01-over.gif','images/retour_01-over.gif','images/rediger_01-over.gif','images/modification_01-over.gif')">
<table width="100%"  >
<tr>
[color=#FF8000]/*  exploitation de la requete 1*/[/color]
    <td width="33%"><div align="left"><img src="./images/[php]<?php echo $ligne->flag; ?>[/php]" ></div></td>
    <td colspan="2"><div align="left"><span class="style3b">[php]<?php echo strtoupper($ligne->nomconstructeur)."</span>"; ?>&nbsp;&nbsp;&nbsp;<? echo "<span class=\"style3\">".$ligne->nomavion; ?>[/php]</span></div></td>
</tr>
   <tr><td colspan="3"><hr></td></tr>
<?php $r_nmaq=$_GET['nmaq'];
[color=#FF8000]/*  requete 2*/[/color]
$sql="SELECT produitmaquette.numproduit, produitmaquette.echelle, produitmaquette.code, produitmaquette.type,
	produitmaquette.presentation, produitmaquette.photo, fabricant.marque, fabricant.logo,  avion.nom as nomavion, constructeur.nom as nomconstructeur, 
	redacteur.login, produitmaquette.datecreation, produitmaquette.numavion, pays.flag as flag
	FROM produitmaquette, fabricant, avion, constructeur, redacteur, pays
	WHERE produitmaquette.numproduit='$r_nmaq' AND produitmaquette.numavion=avion.numavion
	AND produitmaquette.numfabricant=fabricant.numfabricant
	AND avion.numconstructeur=constructeur.numconstructeur
	AND produitmaquette.numredacteur=redacteur.numredacteur";

$resultat=mysql_query($sql);
$ligne=mysql_fetch_array($resultat);
$_SESSION['idavion']=$ligne['12'];
[color=#FF8000]/*  exploitation de la requete 2*/[/color]
$sql="select numredacteur from produitmaquette WHERE produitmaquette.numproduit = ".$r_nmaq;
if($resultat = mysql_query($sql)){
	$red = mysql_fetch_array($resultat);
	showprotected(1,$red['numredacteur'],"<a href=index.php?page=modifmaq&nmaq=".$r_nmaq." onMouseOut=\"MM_swapImgRestore()\" onMouseOver=\"MM_swapImage('Image3','','images/modification_01-over.gif',1)\"><img src=\"images/modification_01.gif\" name=\"Image3\" width=\"170\" height=\"23\" border=\"0\"></a>&nbsp;");
}



else
	echo 'erreur sql:'.mysql_error();
if ($_SESSION['typeredacteur']>0){
	echo "<a href=index.php?page=fichart&nmaq=".$r_nmaq." onMouseOut=\"MM_swapImgRestore()\" onMouseOver=\"MM_swapImage('Image4','','images/rediger_01-over.gif',1)\"><img src=\"images/rediger_01.gif\" alt=\"rediger 1 article\" name=\"Image4\" width=\"170\" height=\"23\" border=\"0\"></a>&nbsp;";
}
?>
<a href="index.php?page=pagehist"  onMouseOut="MM_swapImgRestore()" onMouseOver="MM_swapImage('Image5','','images/retour_01-over.gif',1)"><img src="images/retour_01.gif" alt="retour fiche appareil" name="Image5" width="170" height="23" border="0"></a>
<table>
	<tr>
		<td>
	  <table>
				<tr>
					<td><img src="./images/logo/<?php echo $ligne["logo"];?>" style="width:200px;"></td>
				</tr>
				<tr>
					<td>marque : <span class="style2b"><?php echo strtoupper($ligne["marque"]);?></span></td>
			  </tr>
				<tr>
					<td>échelle : <span class="style2b">1/<?php echo $ligne["echelle"];?></span></td>
				</tr>
				<tr>
					<td>code produit :<span class="style2b"><?php echo $ligne["code"];?></span></td>
				</tr>
				<tr>
					<td>fiche enregistrée par&nbsp;<span class="style2b"><?php echo $ligne["login"];?></span></td>
				</tr>
				<tr>
					<td>le <span class="style2b"><?php echo $ligne["datecreation"];?></span></td>
				</tr>
		  </table>
		</td>
  <td align="right">
			<img src="./images/maquette/<?php echo $ligne["photo"];?>" width="450">
	  </td>
	</tr>
</table>
<hr />
<table >
	<tr class="style2" align="left" valign="top" >
		<td class="style2b">présentation du produit&nbsp;:</td>
	</tr>
	<tr>
		<td bgcolor="#FFFFFF"><span class="style2"><?php echo stripslashes($ligne["presentation"]); ?></span></td>
	</tr>
</table>
---------------------------------------------------------------------------------------
j'essayé différents codes de génération automatique de refresh en copiant/collant des bout de codes trouvés sur le net mais sans résultat .
avec votre aide, je vais tenter de réparer le code mais je ne suis pas l'auteur du code et mes compétences php sont limitées.

merci d'avance.

francis

Re: recherche de bug.

Posté : 02 mai 2011, 12:07
par macgawel
Bonjour.

1. Merci de mettre le code dans les balises qui vont bien (ici le bouton PHP), ça simplifiera la lecture.

2. Pour débugger (et seulemen pour débugger) le SQL, pense à afficher le message d'erreur s'il y en a un :
Les fonctions mysql_* renvoient FALSE en cas d'erreur, donc tu peux faire (exemple sur la requete 1) :
$ligne=mysql_fetch_object($resultat) or die ("Erreur requete 1 : '.$resultat.mysql_error());
3. Pense aussi à afficher le contenu de tes $_POST et $_GET (avec print_r($_GET);)...

Ca devrait déjà te donner des indications sut ton problème...

Re: recherche de bug.

Posté : 02 mai 2011, 13:17
par spokito
merci macgawel pour ta réponse.

je viens d'essayer de mettre en forme le code pour que ce soit plus lisible en effet mais y'a plein de renvois html<->php ! un vrai sac de noeud (enfin, surtout pour moi !)

comme je disais plus haut, je ne suis pas l'euteur du php et il faut me considerer comme un novice en la matière.

comment dois-je interroger exactement avec le print ? peut-tu m'editer le code et me dire ou le placer pour faire le controle svp ?

Re: recherche de bug.

Posté : 02 mai 2011, 13:34
par spokito
je viens de faire le test de print $_GET et ma variable est bonne.elle varie bien en fonction de la page affichée (maquette affichée en l'occurence)
en page d'acceuil du site se trouvent les dernieres maquettes. lorsqu'on clic sur une d'entre elles, on amène la variable "nmaq" avec l'affichage de la page pagemaq.php ( donc pagemaq.php&nmaq )
ce sont uniquement les éléments de la requete 1 (drapeau et nom avion qui necessittent le refresh)

Re: recherche de bug.

Posté : 02 mai 2011, 13:55
par macgawel
Pour afficher les éventuels messages de mySQL (exemple pour la requête 1) :
// 1. On ecrit la requete dans une variable
$requete = "SELECT numavion, avion.nom as nomavion, periode.txtperiode, avion.type, avion.presentation, avion.photo, avion.sourcephoto, avion.datecreation, constructeur.nom as nomconstructeur, constructeur.pays, redacteur.login, redacteur.numredacteur, pays.flag as flag
                                           FROM avion, constructeur, redacteur, periode, pays
                                           WHERE avion.numconstructeur=constructeur.numconstructeur
                                           AND avion.numavion='$r_navion'
                                           AND avion.numredacteur=redacteur.numredacteur
                                           AND constructeur.pays=pays.libelle
                                           AND avion.periode = periode.idperiode";
// 2. On exécute la requête. SI problème on affiche les messages
$resultat=mysql_query($requete) or die ("Erreur de requête :<br />$requete<br />".mysql_error());
$ligne=mysql_fetch_object($resultat);

Re: recherche de bug.

Posté : 02 mai 2011, 14:13
par spokito
ok, je viens de tester et je n'ai aucun message d'erreur sur la requete .
mais quand je "foire" expres" la requete, j'ai bien un message d'erreur de mysql . donc ce n'est pas la requete qui est en cause mais probablement une histoire de sessions puisqu'au refresh les bonnes valeurs prennent leur place.
quoique je dis ça...mais j'en sais fichtre rien... :lol:

Re: recherche de bug.

Posté : 02 mai 2011, 15:15
par macgawel
Ca m'étonne...
Si je suis le lien que tu donnes, je devrais avoir un Notice :
if(isset($_GET['navion'])){ // le GET['navion'] n'est pas défini
   $r_navion=$_GET['navion'];
}else{
   if(isset($_POST['chxavion'])){ // Pareil pour le POST
     $r_navion=$_POST['chxavion'];
 }else{
     $r_navion=$_SESSION['idavion']; // Et comme j'arrive sur le site, je n'ai pas de session
 }     }
=> Là encore, le temps du débuggage, pense à activer le rapport d'erreur en début de fichier :
error_reporting(-1);

Re: recherche de bug.

Posté : 02 mai 2011, 15:22
par spokito
je suis désolé, je ne comprends pas ce que tu attends de moi.
je suis vraiment nul !
est ce que je dois mettre ce bout de code quelque part ? (error reporting)

Re: recherche de bug.

Posté : 02 mai 2011, 15:25
par spokito
je viens de mettre ce code sur ma page de test.
lorsque je ne suispas logué, il me dit bien unidentified 'typeredacteur' (ce qsui est normal)
mais pour notre soucis il ne me dit rien de plus.

Re: recherche de bug.

Posté : 02 mai 2011, 15:30
par spokito
il me semble comprendre,

concernant la prédetermination des avion et maquette, il y a un bout de code dans la page d'index.
if(!isset($_SESSION['idavion'])){$_SESSION['idavion']=1;}
if(!isset($_SESSION['idavionmaq'])){$_SESSION['idavionmaq']=1;}

Re: recherche de bug.

Posté : 03 mai 2011, 09:59
par spokito
bonjour à tous

existe -t-il un moyen de faire faire à la page quand elle se charge un refresh et un seul ! de manière à ne pas voir le defaut !
ce n'est pas académique mais ça résoudrait le bug.
j'ai vu differents codes que j'ai testé sans succès sur mon serveur test 127.0.0.1 mais je n'ai pas testé en ligne.
j'ai testé la commande HEADER,
<?php

$delai=5;
header("Refresh: $delai;");

?> 
j'ai aussi testé la ligne
include once ' adresse de la page';
également la balise META

malheureusement sans succès.

connaissez vous un moyen de le faire ?