Detection navigateur [Résolu]

Signaler
Messages postés
22
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
22 septembre 2008
-
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
-
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

Messages postés
22
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
22 septembre 2008

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.
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
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
Messages postés
22
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
22 septembre 2008

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+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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.
à+
Messages postés
22
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
22 septembre 2008

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+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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.

à+
Messages postés
22
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
22 septembre 2008

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+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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 ?
à+
Messages postés
22
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
22 septembre 2008

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.
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
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.

à+
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5
Pas de quoi, bonne chance.