Aide - Recherche - Membres - Calendrier
Version complète : PHP + XHTML : bug sous IE
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
Neko
Bonjour,

Je commence juste à developper mes pages en xhtml (cela fait plusieurs années que je fais du HTML + PHP), et je rencontre un problème :

En local, aucun problème, mes pages s'affichent bien et sont valide XHTML.

Mais lors de la mise en ligne de mon site sur un serveur distant (dédié RedHat 7.2 hébergé chez OVH), mon site pose problème sous IE pc.

Quand je valide un formulaire, ou que je clique sur un lien, une page blanche s'affiche et je dois actualiser la page pour afficher son contenu.

J'ai fait plusieurs tests, et je me rend compte que cela vient de l'association du XHTML et des sessions PHP : quand je retire les entete <! DOCTYPE ...> et <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"> et que je les remplace par un <html> tout bête, je n'ai plus ce problème (mais du coup ma mise en page n'est plus du tout bonne et ma page n'est plus validé XHTML).

J'ai aussi testé de mette en ligne sur le meem serveur un site XHTML sans php, et la : aucun probléme...

Par ailleurs, le problème ne se pose ni sur Opéra (PC), ni sur Firefox (PC), ni sur Safari (Mac), ni sur IE (Mac).


Merci d'avance pour votre aide.
jep
Alors ça, c'est vraiment un problème inedit !

On peut avoir un apreçus de ton code PHP ?

Est-ce que tu as essayer de mettre un prologue XML a tes fichier XHTML ? (je ne pense pas que ça change grand chose, mais on ne sait jamais)

Est-ce que ton serveur est configuré pour afficher les erreurs PHP ou les stocker dans un journal ? Ça peut être utiles de voir s'il n'y à pas une erreur qui traine du à une configuration différente de ton serveur de Dev !

Est-ce que tu utilise la compressions des transactions HTTP ?
Avec ob_start('ob_gzhandler') par exemple, IE n'est pas très copain avec ce type de compression !

icon_smile.gif
Neko
Alors voici le code de ma page index.php (qui permet de s'identifier) :

"Barbouillache" a dit :
<?php
session_start
();
if((
$Mon_Site['Admin']!="")and($Mon_Site['user']!=0)and($Mon_Site['user']!="")){
   
header( "location:base.php");
    exit();
}
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"[/b]>
<head>
<title>Vert Marine - Base documentaire</title>
<meta [b]http-equiv=
"Content-Type" content="text/html; charset=iso-8859-15" />
<link rel="stylesheet" href="css/txt.css" type="text/css" />
</head>
<body onLoad="document.formconn.identifiant.focus();"[/b]>
<div [b]id=
"top"[/b]></div>
<div [b]id=
"page"[/b]>
<div [b]id=
"menu"[/b]>

<?php
// Fin header

if($erreur=="oui"){
    echo
"<p class='erreur' align='center'><b>Mauvais</b> login et/ou password</p>";
}
?>


  <div [b]id=
"formulaire_index"[/b]>
   <form [b]action=
"connect.php" method="post" name="formconn"[/b]>
    <fieldset>
     <legend>CONNEXION</legend>
     <p><label>Identifiant&nbsp;:&nbsp;<input type="text" name="identifiant" value="" class="chps" /</label></p>
     <p><label>Mot de passe&nbsp;:&nbsp;<input [b]type=
"password" name="motdepasse" value="" class="chps" /></label></p>
    </fieldset>
    <p><input type="submit" name="action" value="Connexion" class="bouton" /></p>
   </form>
  </div>

<?php
include("foot.inc");
?>



Voici celui de ma page de connexion :

"Barbouillache" a dit :
<?php
session_start
();
if((
$Mon_Site['Admin']!="")and($Mon_Site['user']!=0)){
   
header( "location:base.php");
    exit();
}
else
    {
    if(
$action=="Connexion"){
        include (
"acces_base_vmbddmark.inc");
       
$req_nom = mysql_query("SELECT id_user , nom FROM utilisateurs WHERE login='$identifiant' and password='$motdepasse'");
       
$num =mysql_num_rows($req_nom);
        if(
$num!=0){
           
session_register("Mon_Site");
            list(
$id_admin , $nom) =mysql_fetch_row($req_nom);
           
$Mon_Site['Admin']=$nom;
           
$Mon_Site['user']=$id_admin;
           
$Mon_Site['groupe']="||";
           
$req_groupes=mysql_query("SELECT groupe FROM groupes_users WHERE user=$id_admin ORDER BY groupe");
            while(list(
$groupe)=mysql_fetch_row($req_groupes)){$Mon_Site['groupe'].="$groupe||";}
           
header( "location:base.php");
            exit();
        }
        elseif(
$num==0){
           
header( "location:index.php?erreur=oui");
            exit();
        }
    }
    elseif(
$action==""){
       
header( "location:index.php");
        exit();
    }
}
?>



J'ai testé avec un prologue XML, et a part poser des problème de mise en page, ca ne change rien.

Le serveur affiche les erreurs PHP , et la il n'affiche rien. (ou alors la configuration fait qu'il n'affiche pas ce genre d'erreur).

Je n'utilise pas la compression des transactions HTTP.

EDIT : Ah oui j'oubliais : j'ai déjà fait plusieurs fois ce genre de page de connexion en HTML (et non en XHTML comme ici), et je n'ai jamais eu aucun problème. icon_cry.gif
jep
C'est très bizzard !

Lorsque tu test ton site chez toi, tu n'as pas de problèmes ?

Peut-etre qu'il faut vérifier la valeur de l'en-tête HTTP Content-type qui est envoyé. S'il est différent de "text/html" ou de "application/xml", tu aura des problèmes avec IE... sinon, si tu regarde ta source dans IE, qu'est-ce que tu as ? Le bon code XHTML ou bien une "page vierge" ?

Note : Tu utilise un système d'authentification avec la directive register_globals sur On est-ce bien le cas chez ton hebergeur... dans tous les cas, sache que en l'etat, ton code présente une grosse faille de sécurité potentiel... en effet, actuellement, rien n'empèche d'accéder à la page base.php en passant dans l'URL n'importe quelle valeur pour les variables du tableau $Mon_Site !
Neko
Aucun problème quand je teste en local... (sur le meme IE, mais avec un environnement Win 2k au lieu de Linux)

Par contre... je sais pas commetn vérifier la valeur de mon entete HTTP.. icon_redface.gif

Pour le code source : quand j'ai la page blanche, si je fais "afficher le code source", rien ne se passe.... si j'actualise, la page s'affiche et la je peux obtenir le code source...

register_globals est bien sur On sur le serveur "online"

Au niveau de la sécurité de l'authentification, que me conseille tu? utiliser un objet plutot qu'un tableau? revoir completement le fonctionnement de mon authentification?
jep
Neko (May 24 2005, 05:11 PM) a dit :
Pour le code source : quand j'ai la page blanche, si je fais "afficher le code source", rien ne se passe.... si j'actualise, la page s'affiche et la je peux obtenir le code source...

!?... Ah... bon... désolé mais là je ne vois pas trop d'ou ça pourrais venir !

Neko (May 24 2005, 05:11 PM) a dit :
Au niveau de la sécurité de l'authentification, que me conseille tu? utiliser un objet plutot qu'un tableau? revoir completement le fonctionnement de mon authentification?

Là, ton principale problème viens que tu ne vérifie pas l'origine de tes variables... si par exemple tu as prévu de mettre tes variables dans un cookie, dans ton cas, si les variable sont envoyé par méthode post ou get, le resultat sera le même !

Pour eviter ce problème, le plus simple consiste à faire ton authentification de manière habituelle puis, si tous va bien, de stocker une variable indiquant que l'identification est bonne. Comme l'utilisateur n'a jamais accès directement au variable de session (contrairement au variable d'environnement POST, GET ou COOKIE), c'est la meilleur solution pour passer un identifiant de page en page. En suite, sur chacune de tes pages, au lieu de faire
Php
if(($Mon_Site['Admin']!="")and($Mon_Site['user']!=0)and($Mon_Site['user']!="")){
header( "location:base.php");
exit();
}


Fait plutot :
Php
if(!empty($_SESSION['Admin'],$_SESSION['user'])){
header( "location:base.php");
exit();
}

De cette manière, tu est sur que c'est toi, et toi seul, qui a definis les variables d'identification wink.gif

Plus d'infos sur les variables super_global et les sources de donnée externes :
> http://www.php.net/manual/fr/security.variables.php
> http://www.php.net/manual/fr/security.globals.php
Neko
Merci pour ton aide.

En attendant de trouver une solution pour mon problème de page blanche, je vais refaire le site en html simple icon_cry.gif
Neko
Bon bah j'ai trouvé....

Vu que meme en html simple ca me posait le meme problème, j'ai réfléchit à ce que j'avais changé à mon code habituel....

Et ca venait du charset....

en remettant charset=iso-8859-1 à la place de charset=iso-8859-15, ca fonctionne nikel....

En tout cas, merci encore pour ton aide jep !!!! gourou.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2009 Invision Power Services, Inc.