IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-JS] Détecter immédiatement Javascript sans la méthode GET


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut [PHP-JS] Détecter immédiatement Javascript sans la méthode GET
    Salut à tous,

    Sur mon site je souhaiterais savoir si l'utilisateur a désactivé ou non Javascript. J'ai vu les deux fonctions que proposent les FAQ PHP/JS de developpez.com, mais elles ne conviennent ni l'une ni l'autre car j'ai besoin :
    - que la détection se fasse immédiatement (sans soumission comme nécessaire ici)
    - que le script n'utilise pas la méthode GET comme dans cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function checkJavascript()
    {
        if(!isset($_GET['js']))
        {
            $url=@eregi_replace($_SERVER['DOCUMENT_ROOT'], 'http://'.$_SERVER['HTTP_HOST'],$_SERVER['SCRIPT_FILENAME']);
            echo '<script type="text/javascript">window.location.href="'.$url.'?js=1";</script>';
            echo '<noscript><meta http-equiv="refresh" content="0; url='.$url.'?js=2"/></noscript>';
        }
     
        if($_GET['js']=='1') echo 'JS activé<br/>';
        if($_GET['js']=='2') echo 'JS désactivé<br/>';
    }
    car je passe d'autres paramètres avec la méthode GET. Or avec la solution ci-dessus, le paramètre '?js=1' va remplacer ces autres paramètres, par exemple '?err=1' qui me sert dans une autre fonction.

    Merci par avance.

  2. #2
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    Salut,

    tu as la fonction get_browser qui te retourne 1 tableau avec les infos navigateur client, dont le javascript qui est à 1 ou 0.

    pour + d'infos : http://fr.php.net/get_browser

  3. #3
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut
    Citation Envoyé par renaudjuif
    tu as la fonction get_browser qui te retourne 1 tableau avec les infos navigateur client, dont le javascript qui est à 1 ou 0.

    pour + d'infos : http://fr.php.net/get_browser
    Non pas exactement, sur php.net il est expliqué que :

    Be aware of the fact that this function shows what a specific browser might be able to show, but NOT what the user has turned on/off.

    So maybe this function tells you that the browser is abel to to javascript even when javascript is turned off by the user.

  4. #4
    Membre éclairé Avatar de renaudjuif
    Inscrit en
    Avril 2006
    Messages
    325
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 325
    Par défaut
    Effectivement, autant pour moi...
    La prochaine fois je lirai la doc jusqu'au bout

  5. #5
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    Pourquoi est ce que dans ta ligne qui définit la variable $url tu ne gères pas la présence éventuelle de parmètres get déjà présent?

    Tu les détectes, et s'il y en a, tu les rajoutes à ton url...
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  6. #6
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut
    Citation Envoyé par MasterOfChakhaL
    Pourquoi est ce que dans ta ligne qui définit la variable $url tu ne gères pas la présence éventuelle de parmètres get déjà présent?

    Tu les détectes, et s'il y en a, tu les rajoutes à ton url...
    J'y ai pensé mais je ne sais pas comment faire techniquement...

  7. #7
    Rédacteur
    Avatar de MasterOfChakhaL
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2004
    Messages
    2 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 147
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    $url=@eregi_replace($_SERVER['DOCUMENT_ROOT'], 'http://'.$_SERVER['HTTP_HOST'],$_SERVER['SCRIPT_FILENAME']);
    if ( isset( $_GET ) 
    {
      $url .= '?';
      foreach ( $_GET as $name => $value )
      {
        $url .= $name . '=' . $value . '&amp;';
      }
      $url = substr( $url, 0, -5 ); //pour enlever le dernier '&amp;'
    }
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    N'oubliez pas de cliquer sur quand votre question à trouvé une solution.

    Si vous n'avez pas encore lu les règles du club, mieux vaut tard que jamais!

  8. #8
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    En plus de ce que te dit MasterOfChakhaL je rajouterais que tu fais ton get à la première connection au site et ensuite tu stocke le résultat en session... .. .

    @ tchaOo°

  9. #9
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    petite rectification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    // si PHP4
    if(!function_exists('http_build_query'))
    {
          function http_build_query($vars, $prefix = '')
          {
                if(!is_array($vars))
                      return false;
                            elseif(empty($vars))
                                  return '';
                
                $ret = '';
                
                foreach($vars as $name => $value)
                      $ret .= $prefix.$name.'='.urlencode($value).'&amp;';
                
                return substr( $ret, 0, -5 );
          }
    }
    
    
    if(isset($_GET['js']))
          $js = $_GET['js'];
                else
                      $js = 1;
    
    $url = (!empty($_SERVER['HTTPS']) ? 'https' : 'http').' ://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
    $query_str = '';
    
    if(isset($_SERVER['QUERY_STRING']))
    {
          if(!empty($_SERVER['QUERY_STRING']))
                $query_str = '?'.$_SERVER['QUERY_STRING'].'&amp;js='.$js;
     
    }
    elseif(!empty($_GET))
          $query_str = '?'.http_build_query($_GET).'&amp;js='.$js;
          
    $url .= $query_str;
    
    @ tchaOo°

  10. #10
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut
    Merci krankelune et MasterOfChakhal pour vos réponses.

    Cependant, je ne sais pas où intégrer ces 2 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo '<script type="text/javascript">window.location.href="'.$url.'?js=1";</script>';
    echo '<noscript><meta http-equiv="refresh" content="0; url='.$url.'?js=2"/></noscript>';
    (lignes reprises depuis la fonction proposée dans les sources PHP de developpez.com)

    Encore merci par avance.

  11. #11
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    En reprenant le code précédant et en le modifiant un peu ça peut donner ça... .. .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    <?php
    // si PHP4
    if(!function_exists('http_build_query'))
    {
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;function http_build_query($vars, $prefix = '')
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!is_array($vars))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return false;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;elseif(empty($vars))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return '';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$ret = '';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;foreach($vars as $name => $value)
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$ret .= $prefix.$name.'='.urlencode($value).'&';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;return substr( $ret, 0, -1);
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    }
    
    // on vérifi que js à été envoyé via l'url sinon on l'initialise à null
    if(isset($_GET&#91;'js']))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$js = $_GET&#91;'js'];
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$js = null;
    
    $url = (!empty($_SERVER&#91;'HTTPS']) ? 'https' : 'http').' ://'.$_SERVER&#91;'HTTP_HOST'].$_SERVER&#91;'PHP_SELF'];
    $query_str = '';
    $sep = '?';
    
    if(isset($_SERVER&#91;'QUERY_STRING']))
    {
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;if(!empty($_SERVER&#91;'QUERY_STRING']))
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;{
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$query_str = '?'.$_SERVER&#91;'QUERY_STRING'];
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$sep = '&amp;';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;}
    }
    elseif(!empty($_GET))
    {
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$query_str = '?'.http_build_query($_GET);
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$sep = '&amp;';
    }
    
    $url .= $query_str;
    
    //traitement php
    ?>
    <html>
    <body>
    <head>
    <?php
    &#160;&#160;&#160;&#160;&#160;&#160;if(is_null($js)) // si $js est null on lance le test
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;echo '<script type="text/javascript">window.location.href="'.$url.$sep.'js=1";</script>
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<noscript>
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<meta http-equiv="refresh" content="0; url='.$url.$sep.'js=0"/>
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</noscript>';
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;else // sinon on le rajoute à l'url
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;$url .=&#160;&#160;$sep.'js='.$js;
    
    &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
    ?>
    @ tchaOo°

  12. #12
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut
    --> Krankelune : j'ai rajouté les balises fermantes </head></html> à ton code, et j'ai enlevé le tag <body>.

    Pourtant, quand j'exécute ce code dans un fichier test.php, j'obtiens 'error 403' (Access forbidden), et l'url dans mon navigateur est passée de :
    127.0.0.1/temp/checkJavascript/
    à :
    127.0.0.1/temp/checkJavascript/http%20://127.0.0.1/temp/checkJavascript/test.php?js=1

    donc je n'ai pas encore trouvé la solution...

  13. #13
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    Supprime l'espace qu'il y a avant le deux points dans...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $url = (!empty($_SERVER['HTTPS']) ? 'https' : 'http').' ://'... .. .
    @ tchaOo°

  14. #14
    Membre confirmé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Par défaut
    Très bien, ça fonctionne ! Merci kankrelune

    Il y avait encore une petite erreur. Par deux fois, il faut remplacer :
    par :

  15. #15
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 69
    Par défaut
    Salut,

    Si je puis me permettre : http://www.w3.org/QA/2005/04/php-session

  16. #16
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Si tu veux le faire en post :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    function test_javascript()	{
     
    	$browser = get_browser();
     
    	if($browser->javascript === '1')	{
    		if(!isset($_SESSION['javascript']))	{
    			echo '<body onload="document.form.submit()">';
    			echo '<form name="form" action="',$_SERVER['PHP_SELF'],'" method="post">';
    			echo '<input name="javascript" type="hidden" value="1">';
    			echo '</form>';
    		}
    		else echo '<body>';
     
    		if(isset($_POST['javascript']))	{
    			$_SESSION['javascript'] = $_POST['javascript'];
    		}
    		elseif(!isset($_SESSION['javascript']))	{
    			$_SESSION['javascript'] = 0;
    		}
    	}
    	else	{
    		$_SESSION['javascript'] = 0;
    	}
    }
    Ensuite tu remplaces ta première balise body de ta page par l'appel de la fonction.
    Bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/04/2008, 14h03
  2. [PHP-JS] Arguments PHP d'une fonction javascript
    Par Néo-Tony dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 22/12/2004, 12h06
  3. [PHP-JS] Php dans un script javascript
    Par nebule dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/11/2004, 10h38
  4. [PHP-JS] Envoi de variable sans passer par un submit
    Par adilou1981 dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2004, 19h21
  5. Réponses: 4
    Dernier message: 02/06/2004, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo