Partage
  • Partager sur Facebook
  • Partager sur Twitter

Détecter si JavaScript est activé ou pas.

Sans les balises <noscript>

Sujet résolu
Anonyme
    29 août 2006 à 23:42:14

    Bonjour.

    Tou d'abord, j'ai un peu hésité entre poster ce sujet en xhtml/css/js ou php mais je l'ai finalement posté ici car je pense qu'on peut résoudre mon problème en php.

    Voici mon problème :

    Sur mon site j'ai un script JavaScript inséré dans chaque page qui affiche un menu.
    Comme ca ne fonctionne pas avec JS désactivé, j'aimerais mettre un menu en PHP avec
    <?php iclude ('menu.html'); ?>
    Le problème est que le code html contenu dans le fichier menu.html est chargé a chaque fois (donc affichage des pages moins rapides), alors qu'en JS on charge une fois le fichier et c'est bon.

    Je voudrais donc savoir si il y a un moyen de détecter si Javascript est activé ou pas, de n'importe quelle facon (éventuellement en PHP).
    Ensuite si c'est activé je mets le Javascript et si il est désactivé je mets le php include.

    Ah oui, et les balises
    <noscript></noscript>
    ne me serviraient pas (a moins que l'on puisse bidouiller avec des commentaires ou autres le contenu des balises) car leur contenu est quand même chargé.

    Merci pour votre aide.
    • Partager sur Facebook
    • Partager sur Twitter
      29 août 2006 à 23:48:49

      Le problème est que le code html contenu dans le fichier menu.html est chargé a chaque fois (donc affichage des pages moins rapides)
      -> tu sais, un include de quelques kilo-octets, c'est pas bien long non plus...

      Tu peux pas savoir si JS est activé avec php : php = serveur / JS = utilisateur
      • Partager sur Facebook
      • Partager sur Twitter
        30 août 2006 à 0:05:03

        Le plus pratique serait de rendre ton code javascript compatible avec ton menu ... (fait du dhtml non obstructif).

        Sinon pour détecter js, peut être devrait-tu faire un petit script en js, qui:
        -crée un cookie appelé "javascript"
        -si le cookie n'existait pas avant, réactualise la page

        Et du coté de php, tu regarde si ce même cookie existe. Si il n'existe pas, tu affiches ton menu statique, sinon ...
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 août 2006 à 0:08:51

          Merci. Je vais vois comment on fait pour faire un cookie.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            30 août 2006 à 16:21:25

            Salut.

            Finalement, après avoir pas mal réfléchi j'ai eu (enfin!) une idée. Ca serait avec des sessions.
            Seulement je ne suis pas sur de savoir le code qu'il faut pour la réaliser, donc si on peut m'aider, merci. Voici cette idée :

            Sur chaque page, j'affiche :
            <noscript>Vous avez désactivé javascript. Si vous voulez quand même voir le menu, cliquez ici. Si vous ne voulez pas, cliquez ici. Si vous voulez voir le menu en Javascript (chargement plus rapide), réactivez JavaScript</noscript>


            Si le visiteur clique sur le premier "ici" (pour voir le menu avec un include php), je crée une variable de session :
            $_SESSION['menu'] = 'phpinclude';


            Si le visiteur clique sur le deuxième "ici" (pour ne pas voir le menu), je crée la même variable mais avec une valeur différente :
            $_SESSION['menu'] = 'pasdemenu';




            Mais ensuite je ne sais pas comment faire pour créer la variable de session quand le visiteur clique sur le lien ( ca ne serait pas avec $GET ? mais je suis pas sur.)



            En fait, le code html plus haut était affiché ou pas en fonction de ce

            <?php
            session_start();


            if ( $_SESSION['menu'] = 'phpinclude')
                    {
                    include ('menu.php') //Donc la page php qui contient le code html du menu
                    }
            elseif ($_SESSION['menu'] = 'pasdemenu')
                    {
                    //Ah bein, la, il ne faut rien faire en fait. Donc je mets des accolades vides ?
                    }
            else //et la c'est si le visiteur a JS activé, ou que c'est la première page du site qu'il visite.
                    {
                    include ('menujs.php')/*je met la page qui contient le code html du menu en javascript (c'est a dire les balises <script...>)
                    et les balises noscript au cas ou JS est désactivé*/

                    }
            ?>



            Voila, je pense que mon code ressemblerait a ca.

            Mais il y a encore une chose que je ne sais pas faire, c'est comment créer la variable de session quand le visiteur clique sur un lien.

            Alors, je fais comment ?
            Et mon code a l'air bon ?

            Merci pour votre aide.
            • Partager sur Facebook
            • Partager sur Twitter
              30 août 2006 à 16:30:24

              Tu devrais regarder si la variable session existe aussi! Parce que la si quelqu'un a javascript d'activer tu vas avoir un message d'erreur disant que la variable $_SESSION['menu'] est inexistante.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                30 août 2006 à 16:52:42

                Ah ?
                Et comment je dois faire ?
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  30 août 2006 à 17:26:37

                  Euh...

                  C'est a dire ?

                  Je mets ou isset ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    30 août 2006 à 22:41:22

                    if(isset($ta_variable))
                    {
                    blabla
                    }

                    ca sert a voir si ta variable est pleine ;)

                    tu peut aussi utilisé !empty ;)

                    a+
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      30 août 2006 à 22:49:25

                      D'accord.

                      C'est a dire, a la place de

                      if ( $_SESSION['menu'] = 'phpinclude')

                      Je mets
                      if(isset( $_SESSION['menu'] = 'phpinclude'))


                      C'est bien ca ?

                      et sinon, comment je fais pour que quand le visiteur clique sur un lien la variable soit créée avec la bonne valeur ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        31 août 2006 à 11:04:16

                        non

                        c'est if(isset($_SESSION['menu']))

                        et la ca vérifie si la variable est pleine ;)

                        a+

                        EDIT : mais après, si tu veux vérifier qu'elle est égale a phpinclude, tu fais ca a l'interieur de la condition précédente :

                        if(isset($_SESSION[menu'] == "phpinclude")
                        {
                        }

                        a+
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          31 août 2006 à 13:20:03

                          Merci pour votre aide.

                          Je croyais avoir trouvé, mais en fait...
                          Mon script bug complètement.

                          Vous pouvez voir par vous-même : http://sylvain.sab.free.fr/autres/.
                          Que des erreurs.

                          Voici mes fichiers :

                          1 le fichier index.php

                          (celui que vous voyez quand vous cliquez sur le lien juste au dessus)

                          :


                          <?php include ('php.php')?>
                          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                          <html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
                          <head>
                          
                            <meta content="text/html; charset=ISO-8859-1"
                           http-equiv="content-type" />
                            <title>Sylvain.sab - Test du menu.</title>
                          <?php include ('phphead.php')?>
                          </head>
                          <body style="direction: ltr;">
                          <?php include ('phpmenu.php')?>
                          <p>Bonjour.</p>
                          </body>
                          </html>
                          


                          Parmis les trois fichiers qui sont inclus :
                          php.php :
                          <?php session_start()?>
                          //juste au cas ou on en aurait besoin
                          

                          phphead.php :
                          <?php { ?>
                          <link type="text/css" href="http://sylvain.sab.free.fr/autres/css/styledefaut.css" rel="stylesheet" />
                          <?php } ?>/*celui-ci inclut le style css. Je l'ai fait au cas ou j'aurais besoin d'ajouter autre chose dans l'en tête.*/
                          


                          Et enfin, celui qui nous interesse, c'est a dire phpmenu.php :


                          <?php
                            if(isset($_SESSION['menu'] == "phpinclude")
                              {//le visiteur veut le menu en include php
                              include ('http://ssylvainsab.free.fr/autres/menu/phpmenuhtml.php')
                              }
                            elseif(isset($_SESSION['menu'] == "pasdemenu")
                              {
                              //il ne faut rien mettre
                              }
                            else
                              {//le visiteur a activé JS ou c'est la première page qu'il visite.
                              include ('http://ssylvainsab.free.fr/autres/menu/noscript.php')
                              }
                          ?>
                          


                          Les fichiers qui sont inclus dans celui-ci :
                          1 phpmenuhtml.php
                          /* je ne mets pas le code, ca serait trop long, ce fichier contient le code html du menu entre les balises "<?php { ?>" et "<?php } ?>"*/
                          


                          2 noscript.php
                          <?php { ?>
                          
                          <!--le menu en JS si JS n est pas désactivé-->
                          <script language="JavaScript" type="text/javascript"
                           src="http://sylvain.sab.free.fr/autres/menu/menu.js"></script>
                          
                          <!-- et si c est désactivé on affiche les balises noscript pour demander si il veut voir le menu (en include php) ou pas -->
                          <noscript><p>Javascript est désactiv&eacute;.Si vous voulez voir le menu en html(chargement moins rapide),
                          cliquez <a href="http://sylvain.sab.free.fr/autres/jsmenu/1.php">ici</a>.<br />
                          Si vous ne voulez pas, cliquez <a href="http://sylvain.sab.free.fr/autres/jsmenu/2.php">ici</a>.<br />
                          Si vous voulez voir le menu en Javascript (chargement plus rapide), r&eacute;activez JavaScript.</p>
                          </noscript>
                          
                          <?php } ?>
                          



                          Et pour finir, les deux fichiers qui sont dans noscript.php :

                          1.php :
                          <?php session_start ();
                          $_SESSION['menu'] = 'phpinclude';
                          //on créée l variable avec la valeur phpinclude
                          { ?>
                           
                          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
                          <html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
                          <head>
                            <meta content="text/html; charset=ISO-8859-1"
                           http-equiv="content-type" />
                            <title>Sylvain.sab - Menu en php include.</title>
                            <meta content="moi" name="author" /><meta http-equiv=refresh content=10;URL=../../ /><!-- on redirige vers la page d'accueil en gardant la variable -->
                          </head>
                          <body style="direction: ltr;">
                          <p>Vous avez choisi de voir le menu.<br />
                          Vous serez redirig&eacute; vers la page d'accueil dans 10 secondes.</p></body>
                          </html>
                          
                          <?php } ?>
                          


                          Et en dernier (enfin) : 2.php

                          <?php session_start ();
                          $_SESSION['menu'] = 'pasdemenu';
                          { ?> /*on fait la même chose sauf que l'on met pasdemenu comme valeur a la variable*/
                          


                          Voila.
                          Bon c'est vrai que c'est assez tordu comme truc, pourtant j'ai l'impression que c'est bon.

                          Pourquoi mon script plante ?
                          • Partager sur Facebook
                          • Partager sur Twitter
                            31 août 2006 à 13:32:09

                            Tu as créé un répertoire appelé "sessions" sur ton FTP ? (à la racine)
                            Si non ça vient de là
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              31 août 2006 à 13:40:56

                              Ah, effectivement, je viens de créer un répertoire, il y a beaucoup moins d'erreurs, merci beaucoup.

                              Mais bon, ca ne s'affiche toujours pas, car d'après le srvuer il y a un apostrophe ou des guillemets qui ne devraient pas y être sur la ligne deux.

                              Pourtant, je vois pas ce qu'il a de mauvais mon code php !

                              Le voila :
                              <?php
                                if(isset($_SESSION['menu'] == 'phpinclude'))
                                  {//le visiteur veut le menu en include php
                                  include ('http://ssylvainsab.free.fr/autres/menu/phpmenuhtml.php')
                                  }
                                elseif(isset($_SESSION['menu'] == 'pasdemenu')
                                  {
                                  //il ne faut rien mettre
                                  }
                                else
                                  {//le visiteur a activé JS ou c'est la première page qu'il visite.
                                  include ('http://ssylvainsab.free.fr/autres/menu/noscript.php')
                                  }
                              ?>


                              alors ?
                              merci encore de votre aide, je progresse, je progresse ^^
                              • Partager sur Facebook
                              • Partager sur Twitter
                                31 août 2006 à 13:51:59

                                Alors je vais t'expliquer ce qu'on a voulu te dire avec la fonction "isset" un peu plus haut.

                                En fait ton système c'est que si le mec a JS activé tu appèle directement la page et sinon tu lui propose des choix qui vont créer une variable de session ($_SESSION['menu'])

                                Dans ta page principale tu vas faire un test sur cette variable pour savoir le choix que le visiteur a fait.

                                if($_SESSION['menu'] == 'phpinclude')
                                {
                                //blablabla
                                }


                                Le problème c'est que si le visiteur a JS ben la variable elle existera pas et donc quand il va passer sur le test juste au dessus il va crier !
                                La solution c'est, avant de passer dans le test, de vérifier que la variable existe.

                                if(isset($_SESSION['menu']))
                                {
                                //l'utilisateur a choisi ou pas d'afficher le menu
                                        if($_SESSION['menu'] == 'phpinclude')
                                        {
                                        //blablabla
                                        }
                                }
                                else
                                {
                                //l'utilisateur a rien choisi parce que son JS est activé
                                }



                                Tu comprends ?
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  31 août 2006 à 14:08:02

                                  Ah, d'accord.

                                  J'ai refait deux fichiers alors :
                                  celui ci (phpmenu.php) :
                                  <?php
                                  if(isset($_SESSION['menu']))
                                    {
                                      //l'utilisateur a choisi ou pas d'afficher le menu
                                        if($_SESSION['menu'] == 'phpinclude')
                                          {
                                          include ('http://ssylvainsab.free.fr/autres/menu/phpmenuhtml.php');
                                          }
                                        elseif($_SESSION['menu'] == 'pasdemenu')
                                          {
                                          /*rien du tout*/
                                          } 
                                    }
                                  else
                                  {
                                  include ('http://ssylvainsab.free.fr/autres/menu/noscript.php');
                                  }
                                  ?>


                                  et noscript.php :
                                  <?php echo "<script language=\"JavaScript\" type=\"text/javascript\"
                                   src=\"
                                  http://sylvain.sab.free.fr/autres/menu/menu.js\"></script>
                                   
                                  <noscript><p>Javascript est désactiv&eacute;.Si vous voulez voir le menu en html(chargement moins rapide),
                                  cliquez <a href=\"http://sylvain.sab.free.fr/autres/jsmenu/1.php\">ici</a>.<br />
                                  Si vous ne voulez pas, cliquez <a href=\"http://sylvain.sab.free.fr/autres/jsmenu/2.php\">ici</a>.<br />
                                  Si vous voulez voir le menu en Javascript (chargement plus rapide), r&eacute;activez JavaScript.</p>
                                  </noscript>" ?>


                                  j'ai mis celui la avec echo.

                                  Mais, ca bugge toujours !

                                  En tout cas, merci pour le mal que vous vous donnez pour moi.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    31 août 2006 à 15:01:09

                                    Citation : dark.link

                                    if(isset($ta_variable))
                                    {
                                    blabla
                                    }

                                    ca sert a voir si ta variable est pleine ;)

                                    tu peut aussi utilisé !empty ;)

                                    a+



                                    isset détermine si une variable est affectée et non si elle est remplie ou non!!!! essai de pas induire les nouveaus en erreur ^^.

                                    !empty par exemple vérifie si la variable est affectée et pleine.

                                    (affecté veux dire "existante" "créé")
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      31 août 2006 à 15:23:34

                                      Donc, je laisse isset ?
                                      Ou je mets Empty ?

                                      Et pourquoi ca marche pas, j'ai bien codé pourtant..
                                      Est ce que c'est parce que je mets <?php session_start () ?> sur chaque page (avant le code html bien entendu)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        31 août 2006 à 16:20:47

                                        ouais j'induit les nouveaux, j'induit les nouveaux, moi j'ai jamais compris la difference entre isset et !empty :p

                                        a+
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          31 août 2006 à 17:11:18

                                          Bon, mais alors je fais comment moi ??

                                          Quand je vais sur la page pour tester le script (http://sylvain.sab.free.fr/autres/),
                                          une erreur s'affiche :

                                          Citation : Erreur

                                          Warning: main(http://ssylvainsab.free.fr/autres/menu/noscript.php) [function.main]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /mnt/129/sdb/3/b/sylvain.sab/autres/phpmenu.php on line 16

                                          Warning: main() [function.include]: Failed opening 'http://ssylvainsab.free.fr/autres/menu/noscript.php' for inclusion (include_path='/mnt/129/sdb/3/b/sylvain.sab/include:.:/usr/php4/lib/php') in /mnt/129/sdb/3/b/sylvain.sab/autres/phpmenu.php on line 16



                                          Ah oui, il y a un autre truc que je comprends pas : pourquoi il y a marqué plein de sous-répertoires : /mnt/129/sdb/3/b/sylvain.sab/autres/phpmenu.php ?
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            31 août 2006 à 18:32:40

                                            Parce que tu es sur un hebergement mutualisé avec plusieurs utilisateurs et site. Ce qui explique qu'il faille classer tout les fichiers de ton site dans un repertoire distinct.

                                            Et puis ça tourne sous un système du même type qu'unix, ce qui explique le "/mnt/..."

                                            Pour ton message d'erreur, la réponse est dans ton message, tu as mis un s de trop à ssylvainsab.free.fr. Mais de toute façon, ta méthode pour inclure les fichiers est pas terrible,
                                            essaye plutôt:
                                            include("menu/noscript.php");
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              31 août 2006 à 18:51:41

                                              Moi je crois avoir trouvé ...

                                              Essaie de remplacer :

                                              include ('http://ssylvainsab.free.fr/autres/menu/phpmenuhtml.php');


                                              Par :

                                              include ('menu/phpmenuhtml.php');


                                              Dans :


                                              <?php
                                              if(isset($_SESSION['menu']))
                                                {
                                                  //l'utilisateur a choisi ou pas d'afficher le menu
                                                    if($_SESSION['menu'] == 'phpinclude')
                                                      {
                                                      include ('http://ssylvainsab.free.fr/autres/menu/phpmenuhtml.php');
                                                      }
                                                    elseif($_SESSION['menu'] == 'pasdemenu')
                                                      {
                                                      /*rien du tout*/
                                                      }
                                                }
                                              else
                                              {
                                              include ('http://ssylvainsab.free.fr/autres/menu/noscript.php');
                                              }
                                              ?>



                                              Si ça ne marche pas fais comme si je n'ai rien dit :euh:

                                              @++
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                31 août 2006 à 19:18:08

                                                Citation : Boo2M0rs0

                                                Parce que tu es sur un hebergement mutualisé avec plusieurs utilisateurs et site. Ce qui explique qu'il faille classer tout les fichiers de ton site dans un repertoire distinct.Et puis ça tourne sous un système du même type qu'unix, ce qui explique le "/mnt/..."


                                                OK

                                                Citation : Boo2M0rs0

                                                Pour ton message d'erreur, la réponse est dans ton message, tu as mis un s de trop à ssylvainsab.free.fr.



                                                Ah d'accord ca c'est parce que avant mon site était a cette adresse donc je me suis trompé. M'enfin c'est vraiment une erreur débile désolé...

                                                Citation : Boo2M0rs0

                                                Mais de toute façon, ta méthode pour inclure les fichiers est pas terrible,
                                                essaye plutôt:
                                                include("menu/noscript.php");



                                                Ouaip, mais c'est parce que je sais pas si le code est généré a partir de l'adresse du fichier "phpmenu.php" ou d'un quelconque autre fichier php ou il y a l'include de ce fichier "phpmenu.php".
                                                Donc apparement le code est généré a partir de phpmenu.php et je peux mettre les liens vers les autres fichiers qui sont inclus avec include php en relatif ?

                                                Maintenant, ca me met toujours une erreur :

                                                Citation : erreur


                                                Warning: main(http://sylvain.sab.free.fr/autres/menu/noscript.php) [function.main]: failed to open stream: Connection timed out in /mnt/129/sdb/3/b/sylvain.sab/autres/phpmenu.php on line 16

                                                Warning: main() [function.include]: Failed opening 'http://sylvain.sab.free.fr/autres/menu/noscript.php' for inclusion (include_path='/mnt/129/sdb/3/b/sylvain.sab/include:.:/usr/php4/lib/php') in /mnt/129/sdb/3/b/sylvain.sab/autres/phpmenu.php on line 16



                                                Apparement il y a un problème a la ligne 16 du fichier phpmenu.php :
                                                <?php
                                                if(isset($_SESSION['menu']))
                                                  {
                                                    //l'utilisateur a choisi ou pas d'afficher le menu
                                                      if($_SESSION['menu'] == 'phpinclude')
                                                        {
                                                        include ('menu/phpmenuhtml.php');
                                                        }
                                                      elseif($_SESSION['menu'] == 'pasdemenu')
                                                        {
                                                        /*rien du tout*/;
                                                        } 
                                                  }
                                                else
                                                {
                                                include ('menu/noscript.php');
                                                }
                                                ?>


                                                Croyant que l'erreur était le point-virgule, je l'ai enlevé. Maintenant il y a une autre erreur :

                                                Citation : erreur

                                                Parse error: syntax error, unexpected '}' in /mnt/129/sdb/3/b/sylvain.sab/autres/phpmenu.php on line 17


                                                Vu que la cause de l'erreur est '}', c'est que je dois mettre le point-virgule. Mais si je le met, il y a l'erreur d'avant... et ainsi de suite.
                                                Comment faire ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  31 août 2006 à 19:25:56

                                                  Utilise des fichiers templates...
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                  Anonyme
                                                    31 août 2006 à 19:33:34

                                                    EDIT : Ah ! enfin ! mon problème est résolu ! Un grand merci a tous ceux qui m'ont aidé.

                                                    Cependant, il me reste encore des problèmes :

                                                    1 Pour reconnaitre l'utilisateur, php lui envoie un cookie.
                                                    Or j'aimerais qu'il transmette les variables dans l'url (un truc du genre "index.php?menu=phpinclude") .
                                                    Est ce que c'est possible aussi avec les variables de session, ou je dois définir des variables normales (pas de session) ?

                                                    2 Un cookie est créé a chaque fois, même quand il n'y en a pas besoin (lorsque JS est activé par exemple), est-ce que ca pourrait s'arranger en regardant la variable, puis si il y a cette variable on fait "session_start()" ?

                                                    Je pense que oui, ca donnerait un truc du genre :
                                                    <?php
                                                    if (isset($_SESSION['menu']))/*on regarde si la variable existe*/
                                                         {
                                                         session_start();/*si oui on démarre la session pour récupérer la valeur de la variable*/
                                                         }
                                                    else
                                                         {//sinon on ne fait rien
                                                         }
                                                    ?>


                                                    C'est ca ?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      31 août 2006 à 20:19:10

                                                      Citation : Pas de titre

                                                      Ouaip, mais c'est parce que je sais pas si le code est généré a partir de l'adresse du fichier "phpmenu.php" ou d'un quelconque autre fichier php ou il y a l'include de ce fichier "phpmenu.php".



                                                      Oui, je comprend ce que tu veux, si le fichier qui inclu et celui qui est inclu ne sont pas dans le même repertoire. Les includes avec un chemin relatif dans le fichier inclu ne marcheront pas.

                                                      Utilise plutôt:

                                                      include (dirname(__FILE__) . 'menu/noscript.php');
                                                      include (dirname(__FILE__) . 'menu/phpmenuhtml.php');


                                                      Sinon, concernant les dernières erreurs de ton script, vu le message d'erreur "Failed opening 'http://sylvain.sab.free.fr/autres/menu/noscript.php'", j'ai l'impression que tu n'as pas modifié ton script.
                                                      Et puis ici, il y a un point virgule en trop ici:

                                                      /*rien du tout*/;

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        31 août 2006 à 22:20:35

                                                        Suite a ce que j'ai dit :

                                                        Citation : Ssylvainsab

                                                        EDIT : Ah ! enfin ! mon problème est résolu ! Un grand merci a tous ceux qui m'ont aidé.

                                                        Cependant, il me reste encore des problèmes :

                                                        1 Pour reconnaitre l'utilisateur, php lui envoie un cookie.
                                                        Or j'aimerais qu'il transmette les variables dans l'url (un truc du genre "index.php?menu=phpinclude") .
                                                        Est ce que c'est possible aussi avec les variables de session, ou je dois définir des variables normales (pas de session) ?

                                                        2 Un cookie est créé a chaque fois, même quand il n'y en a pas besoin (lorsque JS est activé par exemple), est-ce que ca pourrait s'arranger en regardant la variable, puis si il y a cette variable on fait "session_start()" ?

                                                        Je pense que oui, ca donnerait un truc du genre :

                                                        <?php
                                                        if (isset($_SESSION['menu']))/*on regarde si la variable existe*/
                                                             {
                                                             session_start();/*si oui on démarre la session pour récupérer la valeur de la variable*/
                                                             }
                                                        else
                                                             {//sinon on ne fait rien
                                                             }
                                                        ?>



                                                        C'est ca ?



                                                        Et suite a ce que Boo2M0rs0 m'a dit :

                                                        Citation : Boo2M0rs0

                                                        Citation : Pas de titre

                                                        Ouaip, mais c'est parce que je sais pas si le code est généré a partir de l'adresse du fichier "phpmenu.php" ou d'un quelconque autre fichier php ou il y a l'include de ce fichier "phpmenu.php".



                                                        Oui, je comprend ce que tu veux, si le fichier qui inclu et celui qui est inclu ne sont pas dans le même repertoire. Les includes avec un chemin relatif dans le fichier inclu ne marcheront pas.

                                                        Utilise plutôt:


                                                        include (dirname(__FILE__) . 'menu/noscript.php');
                                                        include (dirname(__FILE__) . 'menu/phpmenuhtml.php');


                                                        J'ai changé le fichier phpmenu.php :
                                                        <?php
                                                        if(isset($_SESSION['menu']))
                                                          {
                                                            //l'utilisateur a choisi ou pas d'afficher le menu
                                                              if($_SESSION['menu'] == 'phpinclude')
                                                                {
                                                                include (dirname(__FILE__) . 'menu/phpmenuhtml.php');
                                                                }
                                                              elseif($_SESSION['menu'] == 'pasdemenu')
                                                                {
                                                                /*rien du tout*/;
                                                                } 
                                                          }
                                                        else
                                                        {
                                                        include (dirname(__FILE__) . 'menu/noscript.php');
                                                        }
                                                        ?>


                                                        Maintenant, ca marche.


                                                        Mes deux seuls problèmes sont :

                                                        1.

                                                        PHP créée une session même quand la variable n'est pas encore créée. Je crois que ca vient du fait que j'ai mis le
                                                        <?php> session_start()?>
                                                        sur chaque page du site (avant le code html comme il se doit).

                                                        Est-ce que ca se reglerait en créant la session seulement si il y a une variable, c'est a dire en modifiant le code php de cette facon :
                                                        <?php
                                                        if (isset($_SESSION['menu']))/*on regarde si la variable existe*/
                                                             {
                                                             session_start();/*si oui on démarre la session pour récupérer la valeur de la variable*/
                                                             }
                                                        else
                                                             {//sinon on ne fait rien
                                                             }
                                                        ?>


                                                        2

                                                        A chaque fois que l'on a besoin de la variable, un cookie est créé. Or j'aimerais qu'aucun cookie ne soit créé, mais qu'a la place PHP utilise des sessions pour transmettre la variable avec des urls.
                                                        Par exemple qu'il rajoute ?menu=phpinclude a chaque url automatiquement selon le coix du visiteur (voir le menu ou pas).

                                                        Mais je ne sais pas si c'est possible avec des variables de session et sans cookies.

                                                        Si ce n'est pas possible - et seulement si - , est-ce que je pourrais remplacer la variable de session par une variable "normale", et sur chaque page dire
                                                        <?php $_GET['mavariable'];/*pour récupérer la variable qui vient des pages précédentes*/
                                                        $_POST['mavariable'];/*pour pouvoir utiliser la variable sur les pages suivantes*/
                                                        ?>

                                                        Ca serait possible ?

                                                        Encore merci pour votre aide.
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          31 août 2006 à 23:43:55

                                                          Euh... c'est a dire ?
                                                          De toute facon, c'est bon, j'ai réglé mon problème.

                                                          .....


                                                          Enfin, pas tout a fait >_< :

                                                          Il ya a encore certaines pages qui ne marchent pas, c'est les pages d'erreur :

                                                          404 : http://sylvain.sab.free.frautres/error/404.php
                                                          403 : http://sylvain.sab.free.frautres/error/403.php

                                                          La page 404 :
                                                          <?php include ('http://sylvain.sab.free.fr/autres/php.php') ?><!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" lang="fr">
                                                          <head>
                                                            <meta content="text/html; charset=ISO-8859-1"
                                                           http-equiv="content-type" />
                                                            <title>Sylvain.sab - Fichier Introuvable</title>
                                                            <meta content="Sylvain" name="author" />
                                                          <?php include ('http://sylvain.sab.free.fr/autres/phphead.php') ?>
                                                          </head>
                                                          <body style="direction: ltr;">
                                                          <?php include ('http://sylvain.sab.free.fr/autres/phpmenu.php') ?>
                                                          <table summary="fichier introuvable" style="width: 70%;" border="0"
                                                           cellpadding="0" cellspacing="0">
                                                            <tbody>
                                                              <tr>
                                                                <td colspan="2" rowspan="1">
                                                                <h1>erreur 404 : Fichier Introuvable</h1>
                                                                </td>
                                                              </tr>
                                                              <tr>
                                                                <td>
                                                                <div>Ce fichier est
                                                          introuvable. V&eacute;rifiez l'url que vous avez entr&eacute;e.</div>
                                                                <div style="text-align: right;">Retour a l'
                                                          accueil :</div>
                                                                <div>Le lien est
                                                          peut-&ecirc;tre p&eacute;rim&eacute;. Si vous trouvez un
                                                          lien p&eacute;rim&eacute;, <a href="http://sylvain.sab.free.fr/mail/">contactez-moi</a>.</div>
                                                                </td>
                                                                <td><a href="http://ssylvainsab.free.fr/"><img
                                                           style="width: 67px; height: 80px;" alt="S Retour a l'accueil."
                                                           title="Retour a l'accueil."
                                                           src="http://sylvain.sab.free.fr/img/autres/monimages.gif" /></a></td>
                                                              </tr>
                                                            </tbody>
                                                          </table>
                                                          <br />
                                                          <br />
                                                          <hr />
                                                          </body>
                                                          </html>


                                                          Et pour la page 403 c'est presque la même chose, donc je mets pas.



                                                          Mais sinon, comment je fais pour que PHP utilise les urls a la place des cookies ?
                                                          Et je fais comment pour qu'il ne fasse pas de cookie si JS est activé ?
                                                          (enfin, ca, je crois que j'ai trouvé ici, mais c'est bien ca ?)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Détecter si JavaScript est activé ou pas.

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown