[PHP] bug avec internet explorer

bug avec internet explorer [PHP] - PHP - Programmation

Marsh Posté le 10-09-2008 à 16:28:58    

bonjour,
j'essaye de faire un petit jeu en java script, dans une de mes page j'écris un code en java script avec du PHP, et tout marche bien sur firefox mais dés que j'essaye avec internet explorer certaines variables PHP ne s'affichent :
 
Voici mon code PHP:
 <?php
  include("connect.php" );
  $id=$_POST['idnv'];
  $sql=sprintf("SELECT * FROM `niveaux` WHERE `id`='%s' ",mysql_real_escape_string($id));
  $select = @mysql_query($sql);
  $it=mysql_fetch_array($select,MYSQL_NUM);
  $nom=$it[1];
  $auteur=$it[2];
  $niveau=$it[3];
  $diff=$it[4];
  $commentaire=$it[5];
  $aide=$it[6];
  $lennm=strlen($nom);
  $lenau=strlen($auteur);
  $lendf=strlen($diff);
 
   
 $tabniveau=explode(",",$niveau);
 echo("\n\t\t<SCRIPT laguage=\"javascript\">\nvar tabnv=[ " );
 for($i=1;$i<=20;$i++)
  {
   echo("[" );
   for($j=1;$j<=20;$j++)
    {
     $val=$tabniveau[($i-1)+20*($j-1)];
     if ($j!=20)
      echo("'{$val}'," );
     else
      echo("'{$val}'" );
     if($val=="0b" )
      {
       $xs=$i-1;$ys=$j-1;
       $sd=1;
      }
     else if($val=="0d" )
      {
       $xs=$i-1;$ys=$j-1;
       $sd=0;
      }
     else if($val=="0g" )
      {
       $xs=$i-1;$ys=$j-1;
       $sd=2;
      }
     else if($val=="0h" )
      {
       $xs=$i-1;$ys=$j-1;
       $sd=3;
      }
     if($val=="1" )
      {
       $xh=$i-1;
       $yh=$j-1;
      }
    }
   echo("],\n  " );
  }
 echo("];" );
 echo("\n\t\tvar xs=$xs;var ys=$ys;\n\t\tvar sd=$sd;\n\t\tvar xh=$xh;var yh=$yh;" );
 echo("\n\t\t</SCRIPT>\n" );
?>
 
 
je charge ma chaine de caractère depuis la base de donnée, que je transforme en matrice java script.
Puis je retiens certaine position qui m'intéressent que je retient dans des variable java script
 
 
 
 
 
 
 
 
 
Voici le code source que ce code génère lorsque j'ouvre la page avec firefox:
 
  <SCRIPT laguage="javascript">
var tabnv=[ ['3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','1','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','3','0','0','0','3','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','3','0','0','0','0','0','3','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','3','0','0','0','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','3','0','0','0','0','0','0','4','0','0','3','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0g','0','0','0','0','0','3','0','0','3'],
  ['3','0','0','0','0','0','0','0','0','0','0','0','0','3','0','0','0','0','0','3'],
  ['3','0','0','0','0','0','0','0','3','0','0','0','0','0','0','0','0','0','0','3'],
  ['3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3','3'],
  ];
  var xs=16;var ys=10;
  var sd=2;
  var xh=7;var yh=9;
  </SCRIPT>
 
 
 
 
 
 
 
 
 
 
Et voici le code source que ce code génère lorsque j'ouvre la page avec internet explorer:
 
  <SCRIPT laguage="javascript">
var tabnv=[ ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ['','','','','','','','','','','','','','','','','','','',''],
  ];
  var xs=;var ys=;
  var sd=;
  var xh=;var yh=;
  </SCRIPT>
 
 
 
Le plus abérant c'est que j'utilise ce même principe sur une autre page ou ça marche impeccablement sur les deux navigateurs.

Reply

Marsh Posté le 10-09-2008 à 16:28:58   

Reply

Marsh Posté le 10-09-2008 à 19:31:07    

ca sent le problème de cache. -> ctrl-F5

Reply

Marsh Posté le 15-09-2008 à 14:36:48    

merci pour ta réponse mais malhereusement ca ne fonctionne pas :'(
 
c'est vrai que c'est un truc abérant et j'ai aussi pensé a un probléme de cache étand donné qu'a un moment ma page ressemblai a la version internet explorer ( bug php de ma part) peut être que ctrl F5 ne suffi pas a effecer le cache completement, j'ai aussi essayer de supprimer les fichiers temporaires mais ca ne donne rien.
 
ce bug se produit que ma page soit en ligne ou en localhost.
 
j'y comprend plus rien, m'enfin PHP devari générer la meme page peut importe le navigateur!!

Reply

Marsh Posté le 15-09-2008 à 14:39:37    

et ton problème viendrait pas tout connement d'ailleurs? Genre la connexion à la base qui se fait pas? Tu ne contrôles aucun retour de fonction...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-09-2008 à 14:40:22    

mince j'ai poster sans le vouloir, du coup je n'ai pas corriger les fautes ,et je n'ai pas relus, désolé.

Reply

Marsh Posté le 15-09-2008 à 14:43:47    

skeye, je comprend pas ce que tu veut dire: en php je connais un peut le langage mais je suis pas un pro de ce qui se passe au niveau du serveur.. :s

Reply

Marsh Posté le 15-09-2008 à 14:47:37    

lemb a écrit :

skeye, je comprend pas ce que tu veut dire: en php je connais un peut le langage mais je suis pas un pro de ce qui se passe au niveau du serveur.. :s


Va lire la doc des fonctions que tu utilises.
mysql_query, mysql_fetch_array te retournent des erreurs en cas de problème, tu ne le vérifies même pas.
Est-ce que tu es sûr que tu récupères  bien ton $_POST['idnv']?
Est-ce qu'il n'y a pas un soucis dans ton connect.php?
 
Bref, il y a beaucoup de choses à vérifier...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-09-2008 à 14:58:43    

je fais les vérifications et je reviens ...   merci

Reply

Marsh Posté le 15-09-2008 à 15:05:10    

Ton probleme ne vient pas de PHP, mais simplement de ton code JavaScript que tu vas utiliser. PHP ne fait que générer un flux html et il est identiquement le même sur I.E. ou Firefox etc...

Reply

Marsh Posté le 15-09-2008 à 15:43:58    

matrixise > Son problème ne vient pas de l'exécution du javascript, mais de la génération du javascript par le php.
La question est ensuite de savoir si son problème vient d'un bug dans son code php, d'une donnée mal envoyé ou pas envoyé par l'un des deux navigateurs, ou si la base de donnée ne retourne rien (valeur différente mais valide envoyé par les deux navigateurs).
 
lemb > Une des règles d'or en php : L'arobase est ton ennemie.
Non seulement l'arobase ne t'aide en rien mais en plus elle t'empêche de voir tes bugs. Enlève donc tous les arobase qui précèdent les noms de fonctions.
En fait, la bonne pratique, c'est d'afficher toutes les erreurs même les plus petites (les "notice" ) sur un serveur de test et de ne rien afficher sur le serveur de production (idéalement, détourner les messages d'erreurs vers un fichier de log avec si possible des détails supplémentaires)
 
PS : En passant, même si ça n'a aucun rapport avec ton problème, vérifie si la librairie mysqli ou bien pdo et pdo_mysql n'est/ne sont pas chargé. Les prepared_statement de ces librairies seront plus propre et un peu plus sécurisé (aucun risque d'oublier un "mysql_real_escape_string" ) que ton code actuel.

Reply

Marsh Posté le 15-09-2008 à 15:43:58   

Reply

Marsh Posté le 15-09-2008 à 15:52:42    

j'ai fai des vérification:
echo("<div style=\"position:absolute;top:500px;left:800px;\">select:$select,post:{$_POST['idnv']}</div>" );
 
sous firefox il m'affiche:
select:Resource id #4,post:50
 
donc nikel,
 
sous internet explorer il m'affiche
select:Resource id #4,post:
donc il reconnait le select mais le post est vide
 
ce qui n'est pas normal puisqu'il existe sous firefox!!

Reply

Marsh Posté le 15-09-2008 à 15:54:11    

bon, on tient le coupable...montre le formulaire qui envoie sur cette page...


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-09-2008 à 16:03:58    

omega2, ce que tu dit à propos des @ est vrai, j'ai essayer de retirer le @ mais ça ne donne rien (aucune erreur).
 
merci pour ton conseil , je suis trés intéressé par la sécurité, je ne sais pas comment faire pour vérifier la librairie mysqli pdo et pdo_mysql , mais t'embête pas à m'expliquer ça, je chercherai par moi même comment faire...

Reply

Marsh Posté le 15-09-2008 à 16:14:57    

le formulaire qui envoi sur cette page:
 
  <form id="fedit" method="post" action="./editeur.php" >
   <input id="idnved" name="idnv" type="hidden" value="">
  </form>
 
 
 
il est validé par un code javascript:
 
   function editer(id)
    {
     document.getElementById("idnved" ).value=id;
     document.getElementById("fedit" ).submit();
    }
 
 
la fonction editer se lance sur une balise qui est elle même généré en php (bon dieu!!)
 
echo("\n\t\t\t\t<td onmouseout='document.getElementById(\"charg\" ).style.display=\"none\";clearTimeout(timernolag);document.getElementById(\"terrain\" ).style.display=\"none\";lien(0);' onmouseover=\"apercu($it[0]);lien(1);\" onclick='jouer(\"$it[0]\" );'><a href=\"#\">$it[1]</a></td>" );
 
sans onmouseover et onmouseout:
echo("\n\t\t\t\t<td  onclick='jouer(\"$it[0]\" );'><a href=\"#\">$it[1]</a></td>" );
 
 
qui génére le code suivant
<td onmouseout='document.getElementById("charg" ).style.display="none";clearTimeout(timernolag);document.getElementById("terrain" ).style.display="none";lien(0);' onmouseover="apercu(25);lien(1);" onclick='jouer("25" );'><a href="#">mb</a></td>
 
sans onmouseover et onmouseoout:
 
<td onclick='jouer("25" );'><a href="#">mb</a></td>
 
 
 
je précise: j'utilise la dernière version de internet explorer donc le: document.GetElementById fonctionne

Reply

Marsh Posté le 15-09-2008 à 16:17:16    

on parie combien que le problème est quelque part dans le code qui appelle editer()?
Montre le code javascript généré, au milieu du php c'est illisible.


Message édité par skeye le 15-09-2008 à 16:17:46

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-09-2008 à 16:17:51    

Soit

Code :
  1. <?php phpinfo(); ?>

soit encore mieux vu que tu auras que l'essentiel (la liste des extensions chargés)

Code :
  1. <?php print_r(get_loaded_extensions()); ?>


Dans les deux cas tu cherches mysqli et pdo_mysql dans le résultat. Ca te diras si l'un des deux ou les deux sont disponible .

Reply

Marsh Posté le 15-09-2008 à 16:22:23    

oups je me suis tromper de balise excuse moi, mais oui à tous les coup c'est par la que ça foire, je commençai à bugger moi même ac ce truc merci,
 
 
voila la bonne balise:
echo("\n\t\t\t\t<td onmouseover=\"lien(1);\" onmouseout=\"lien(0);\" onclick='editer(\"$it[0]\" );'><a href=\"#\" );'>éditer</a></td>" );
 
qui génère le code suivant:
<td onmouseover="lien(1);" onmouseout="lien(0);" onclick='editer("50" );'><a href="#" );'>éditer</a></td>

Reply

Marsh Posté le 15-09-2008 à 16:23:54    

merci omega2

Reply

Marsh Posté le 15-09-2008 à 16:25:00    

Citation :

onclick='editer("50" );'


 
t'aurais pas inversé simples/doubles quotes, là?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-09-2008 à 16:36:00    

non , j'ai vérifier avec un alert("" ) et la fonction récupère la bonne valeur.
 
je vais tester d'autre truc, je te dirais le résultat ( si j'ai trouvé ou non...)

Reply

Marsh Posté le 15-09-2008 à 16:48:29    

déjà générer du Javascript depuis du PHP c'est totalement stupide.
 
Il y a largement moyen de faire plus propre et plus intelligent

Reply

Marsh Posté le 15-09-2008 à 16:51:09    

:D j'ai trouvé merci beaucoup skeye
En fait j'ai plusieurs formulaire de ce type qui ont chacun un input de type hidden et qui ont chacun un id différent , jusque la ça devrai pas poser de problèmes, mais leur valeur de name étaient tous les même: name="idnv".
 
conclusion à la ligne:
document.get.ElementById('idnv').value="50";
sous internet explorer
il sélectionne le input avec name="idnv"
alors que sous firefox
il sélectionne le input avec id="idnv"

Reply

Marsh Posté le 15-09-2008 à 16:54:58    

Gatsu35 explique : comment tu fait pour passer des valeurs venant du serveur à une variable java script?

Reply

Marsh Posté le 15-09-2008 à 17:01:29    

Petite précision sur ma conclusion:
internet explorer récupéré en priorité le name="idnv"  
et si il n'en trouve pas il récupéré le id="idnv"

Reply

Marsh Posté le 15-09-2008 à 17:54:16    

lemb > Ajax ou json (chargement après coup) ,
paramètre des balises html (depuis html5, les data-* sont réservé pour ce genre de chose)
...

Reply

Marsh Posté le 15-09-2008 à 18:07:25    

Oui, mais je crois que c'est trop compliqué pour moi
m'enfin lors de mon prochain projet j'essayerais peut être de m'y intéresser, c'est vrai que ça doit être très pratique.
En attendant je fais à l'ancienne :p

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed