recherche de bug.

Eléphanteau du PHP | 18 Messages

02 mai 2011, 11:16

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
Modifié en dernier par spokito le 02 mai 2011, 13:21, modifié 2 fois.

Mammouth du PHP | 672 Messages

02 mai 2011, 12:07

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...

Eléphanteau du PHP | 18 Messages

02 mai 2011, 13:17

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 ?

Eléphanteau du PHP | 18 Messages

02 mai 2011, 13:34

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)

Mammouth du PHP | 672 Messages

02 mai 2011, 13:55

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);

Eléphanteau du PHP | 18 Messages

02 mai 2011, 14:13

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:

Mammouth du PHP | 672 Messages

02 mai 2011, 15:15

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);

Eléphanteau du PHP | 18 Messages

02 mai 2011, 15:22

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)

Eléphanteau du PHP | 18 Messages

02 mai 2011, 15:25

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.

Eléphanteau du PHP | 18 Messages

02 mai 2011, 15:30

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;}

Eléphanteau du PHP | 18 Messages

03 mai 2011, 09:59

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 ?