Detection navigateur

Résolu
cs_gaillardo Messages postés 22 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 22 septembre 2008 - 3 août 2007 à 14:32
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 - 8 août 2007 à 18:28
Bonjour à tous,

J'ai un petit problème avec une détection de navigateur avec getenv("HTTP_USER_AGENT") qui fonction bien en local avec easyPHP mais lorsque je la met sur le serveur plus rien ne marche.

Voici le code :

    $nav = getenv("HTTP_USER_AGENT");
    $nav=substr($nav, 0, 11);
    echo $nav;
    if ($nav == "Mozilla/4.0")
    {
    
        if(!isset($_GET['r']))
        {
        echo "<script language="JavaScript">
        <!--
        document.location="$PHP_SELF?r=1&Largeur="+screen.width+"&Hauteur="+screen.height;
        //-->
        </script>";
        }
        else
        {   
            // Code à afficher en cas de détection de la résolution d'affichage
            if(isset($_GET['Largeur']) && isset($_GET['Hauteur']))
            {
                if((($_GET['Largeur'])=="1280" ) && ($_GET['Hauteur'])=="1024")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1280x1024-ie_dominique.css" ><?php
                   }
                elseif((($_GET['Largeur'])=="1024" ) && ($_GET['Hauteur'])=="768")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1024x768-ie_dominique.css" ><?php
                   }
                else
                {
                   
                  ?><link rel="stylesheet" type="text/css" href="css/1024x768-ie_dominique.css" >
                  <script language="JavaScript">
       
        alert("Résolution inappropriée ! Résolution conseillée : 1280x1024 ou 1024x768");
       
        </script>;<?php
                }
            }
            else
            {
                echo "Résolution non détectée !";
            }
        }   
    }
    if ($nav == "Mozilla/5.0")
    {
        if(!isset($_GET['r']))
        {
        echo "<script language="JavaScript">
        <!--
        document.location="$PHP_SELF?r=1&Largeur="+screen.width+"&Hauteur="+screen.height;
        //-->
        </script>";
        }
        else
        {   
            // Code à afficher en cas de détection de la résolution d'affichage
            if(isset($_GET['Largeur']) && isset($_GET['Hauteur']))
            {
                if((($_GET['Largeur'])=="1280" ) && ($_GET['Hauteur'])=="1024")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1280x1024-dominique.css" ><?php
                   }
                elseif((($_GET['Largeur'])=="1024" ) && ($_GET['Hauteur'])=="768")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1024x768-dominique.css" ><?php
                   }
                else
                {
                   
                  ?><link rel="stylesheet" type="text/css" href="css/1024x768-dominique.css" >
                  <script language="JavaScript">
       
        alert("Résolution inappropriée ! Résolution conseillée : 1280x1024 ou 1024x768");
       
        </script>;<?php
                }
            }
            else
            {
                  echo "Résolution non détectée !";
            }
        }   
    }

Si quelqu'un peu me mettre sur la voie se serai cool. Merci d'avance et à bientôt.

11 réponses

cs_gaillardo Messages postés 22 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 22 septembre 2008
8 août 2007 à 17:38
Merci beaucoup pour ton aide,
Je pense que je vais faire comme tu l'as dit : en 1024x768 avec une gestion du centrage en javascript. Ce sera plus simple.

Merci encore et à bientôt.
3
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
3 août 2007 à 14:45
Salut,

Tonpb est là :

document.location="$PHP_SELF?r=1&Largeur="+screen.width+"&Hauteur="+screen.height;

PHP_SELF renvoi l'adresse physique du fichier (c:\truc\chose\fichier.php)

Essaye simplement ainsi :
document.location="?r=1&Largeur="+screen.width+"&Hauteur="+screen.height;

A+http://www.catb.org/%7Eesr/faqs/smart-questions.html
0
cs_gaillardo Messages postés 22 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 22 septembre 2008
3 août 2007 à 16:04
Salut à toi et merci pour ta réponse,

J'ai essayé comme tu m'a dit mais ça ne change rien. Je pense que l'erreur n'est pas là car  à l'affichage j'ai  la page sans la css. Je ne rentre donc pas dans la première boucle if et je n'affiche pas le contenu de la variable $nav. Je pense que le problème vient plutôt de getenv mais je ne trouve pas la solution.

A+
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
3 août 2007 à 17:07
Hello, c'est la config serveur qui fait ça, moi une fois c'était pareil, je ne pouvais pas utiliser $_SERVER['PHP_SELF'], il fallait écrire autre chose (mais je ne sais plus quoi)...
Il y a plusieurs syntaxes pour récupérer les variables d'environnement, teste-les (cf php.net), autrement vérifie auprès de ton hébergeur.
à+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_gaillardo Messages postés 22 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 22 septembre 2008
5 août 2007 à 02:00
Salut,
C'est bon j'ai trouvé un code qui fonctionne su rmon server :

echo "<script language="JavaScript">
        <!--
        document.location="?r=1&Largeur="+screen.width+"&Hauteur="+screen.height;
        //-->
        </script>";

Maintenant j'ai un autre problème. Toute cette ligne s'affiche dans mon url et c'est pas très propre. J'ai éssayé de remplacer mes GET par des POST mais j'obtient une boucle sans fin qui me plante tout. Ce qu'il faudrai c'est que je puisse récupérer les valeurs de screen.width et screen.height dans des variables php. Si quelqu'un à une idée ou désire d'autre explications plus claire qu'il n'ésite pas.
A+
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
5 août 2007 à 11:33
Hello,

et bien ça paraît évident, tu mets quelque chose qui empêche la boucle infinie...
une variable en cookie par exemple. Si elle existe, pas d'envoi, sinon tu valides le formulaire.

à+
0
cs_gaillardo Messages postés 22 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 22 septembre 2008
5 août 2007 à 18:18
Salut, merci pour ta réponse mais j'ai rien compris. C'est pas un formulaire. C'est une detection du navigateur et de la résolution :

Je te montre mon code :

if(ereg("MSIE", $_SERVER["HTTP_USER_AGENT"]))
    {
        $nav="IE";
    }
    else
    {
        $nav="MOZ";
    }
       
    if ($nav == "IE")
    {
    
        if(!isset($_GET['r']))
        {
        echo "<script language="JavaScript">
        <!--
        document.location="?r=1&Largeur="+screen.width+"&Hauteur="+screen.height;
        //-->
        </script>";
        }
        else
        {   
            // Code à afficher en cas de détection de la résolution d'affichage
            if(isset($_GET['Largeur']) && isset($_GET['Hauteur']))
            {
                if((($_GET['Largeur'])=="1280" ) && ($_GET['Hauteur'])=="1024")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1280x1024-ie_dominique.css" ><?php
                   }
                elseif((($_GET['Largeur'])=="1024" ) && ($_GET['Hauteur'])=="768")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1024x768-ie_dominique.css" ><?php
                   }
                elseif((($_GET['Largeur'])=="1440" ) && ($_GET['Hauteur'])=="900")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1440x900-ie_dominique.css" ><?php
                   }
                else
                {
                   
                  ?><link rel="stylesheet" type="text/css" href="css/1024x768-ie_dominique.css" >
                  <script language="JavaScript">
       
        alert("Résolution inappropriée ! Résolution conseillée : 1280x1024 ou 1024x768");
       
        </script><?php
                }
            }
            else
            {
                echo "Résolution non détectée !";
            }
        }   
    }
    if ($nav == "MOZ")
    {
        if(!isset($_GET['r']))
        {
       
       
        echo "<script language="JavaScript">
        <!--
        document.location="?r=1&Largeur="+screen.width+"&Hauteur="+screen.height;
        //-->
        </script>";
        }
        else
        {   
            // Code à afficher en cas de détection de la résolution d'affichage
            if(isset($_GET['Largeur']) && isset($_GET['Hauteur']))
            {
                if((($_GET['Largeur'])=="1280" ) && ($_GET['Hauteur'])=="1024")// Résolution détectée
                   {
                    ?><link rel="stylesheet" type="text/css" href="css/1280x1024-dominique.css" ><?php
                   }
                elseif((($_GET['Largeur'])=="1024" ) && ($_GET['Hauteur'])=="768")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1024x768-dominique.css" ><?php
                   }
                elseif((($_GET['Largeur'])=="1440" ) && ($_GET['Hauteur'])=="900")// Résolution détectée
                   {
                   ?><link rel="stylesheet" type="text/css" href="css/1440x900-dominique.css" ><?php
                   }
                else
                {
                   
                  ?><link rel="stylesheet" type="text/css" href="css/1024x768-dominique.css" >
                  <script language="JavaScript">
       
        alert("Résolution inappropriée ! Résolution conseillée : 1280x1024 ou 1024x768");
       
        </script>;<?php
                }
            }
            else
            {
                  echo "Résolution non détectée !";
            }
        }   
   
   
    }
?>
</head>

Si tu pouvais m'éclairer ce serai cool.
Merci d'avance.
A+
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
5 août 2007 à 18:30
Tu ne vas pas détecter à chaque page la résolution de l'écran, non ? donc il faut que tu l'enregistres une bonne fois pour toutes. Soit en session soit par cookies.

Quand la valeur n'existe ni en session ni en cookies, c'est que tu n'as pas encore détecté alors tu balances ton code de détection.

Qu'est-ce que tu ne comprends pas ?
à+
0
cs_gaillardo Messages postés 22 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 22 septembre 2008
7 août 2007 à 19:55
Ok je comprend mieu,
Il faut que je créer une variable soit en session soit en cookie depuis le code javascript pour pouvoir y avoir acces depuis n'importe où  ?  Je ne l'ai jamais fait  que me conseil-tu entre ces deux possibilités et comment créer la variable et comment la tester ?
Si j'ai bien compris, au lieu d'avoir tous ce code dans mon header je teste simplement cette variable "globale" et si elle est vide  je met un include vers un autre fichier qui teste la résolution.
Merci encore pour ton aide et à bientôt.
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
7 août 2007 à 20:58
C'est tout à fait ça.

Maintenant pour choisir entre cookies et session, ça dépend un peu du site. Les sites à fort trafic préféront les cookies pour ne pas empiéter sur les performances du serveur, les petits sites préféreront les sessions pour leur aspect pratique et plus fiable.

Le javascript peut enregistrer la variable en cookie, mais pas en session. Pour enregistrer en session, il faut qu'il *envoie* la variable au serveur (php donc) qui lui pourra l'enregistrer en session. Le php, lui, peut enregistrer en session et en cookie, c'est pratique.

Le problème maintenant c'est plutôt : que se passera-t-il la première fois qu'un visiteur arrivera sur ton site, et que la largeur d'écran n'aura pas été enregsitré ? Veux-tu lui afficher qqch sur cette 1ère page (mais il faudrait que ton javascript puisse s'adapter tout seul sans rechargement de page, bof bof) ou plutôt choper la valeur et le rediriger tout de suite ailleurs pour pouvoir passer la variable au php ? Evidemment je conseille la 2ème solution.

Bon, on parle on parle, mais j'ai oublié de dire un truc : mieux vaut faire un site pour une seule résolution (1024x768), sinon c'est vraiment galère à gérer, et puis tu ne peux pas toujours avoir la résolution du gars... Moi je n'utilise le javascript que pour gérer le centrage de mes page, c'est tout. Au pire si le visiteur n'a pas javascript, le site reste collé à gauche de l'écran.

à+
0
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
8 août 2007 à 18:28
Pas de quoi, bonne chance.
0
Rejoignez-nous