Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pas mal d'erreur dans mon système d'inclusion...

Je vois vraiment pas o_O

Sujet résolu
Anonyme
    18 août 2006 à 21:25:01

    Bonjour :)

    Je suis en train de construire la nouvelle version de mon site, alors j'ai mis un nouveau système d'inclusion de fichier automatique qui sais si il doit mettre ../ ou pas ^^ mais voilà sa plante (sinon je serait pas là :p ) voici le fonctionnement de mon système :

    Au début de ma page PHP, juste après la balise <body> ouvrante je place cette ligne de code PHP :
    <?php include("include.php"); ?>

    Ensuite tout en haut de mon fichier PHP je déclare la variable $inf, et je lui donne 0 comme valeur.
    Pourquoi 0 ? et c'est quoi cette variable ?

    En faite la variable $inf se trouve en haut de toute les pages, c'est elle qui va détermine si la page se trouve à la racine du site (dans le dossier root) ou dans un dossier (root/dossier) voici la page include.php vous allez comprendre ;)
    <?php
    if($inf != 'A') // Si on est pas de le panneau d'admin
    {
            if($inf == 1) // Si on se trouve dans un dossier
            {
                    $include = '../'; // On doit rajouter ../
            }
            elseif($inf == 0) // Si on se trouve à la racine
            {
                    $include = '';
            }
            // On inclue les fichiers !
            include(''.$include.'include/logo.html');
            include(''.$include.'include/bonjour.php');
            include(''.$include.'include/menu_gauche.php');
            include(''.$include.'include/menu_droite.php');
    }
    elseif($inf == 'A') // Cas particulier : on est dans le panneau d'admin
    {       // Inclusion spéciale
            include('../include/logo.html');
            include('../include/bonjour.php');
            include('menu-admin.php');
            include('../include/menu_droite.php');
    }
    else // Une erreur grave s'est produite : la variable a été modifiée ! (impossible mais on sait jamais)
    {
            echo 'FATAL ERROR';
    }
           
    ?>

    Mais voilà dans toutes les pages qui sont à la racine j'ai ca :

    Citation : Erreur

    Warning: main(../include/logo.html): failed to open stream: No such file or directory in c:\\informactif\\include.php on line 20

    Warning: main(): Failed opening '../include/logo.html' for inclusion (include_path='.;C:/Program Files/Easy-PHP1-8\\php\\pear\\') in c:\\informactif\\include.php on line 20

    Warning: main(../include/bonjour.php): failed to open stream: No such file or directory in c:\\informactif\\include.php on line 21

    Warning: main(): Failed opening '../include/bonjour.php' for inclusion (include_path='.;C:/Program Files/Easy-PHP1-8\\php\\pear\\') in c:\\informactif\\include.php on line 21

    Warning: main(menu-admin.php): failed to open stream: No such file or directory in c:\\informactif\\include.php on line 22

    Warning: main(): Failed opening 'menu-admin.php' for inclusion (include_path='.;C:/Program Files/Easy-PHP1-8\\php\\pear\\') in c:\\informactif\\include.php on line 22

    Warning: main(../include/menu_droite.php): failed to open stream: No such file or directory in c:\\informactif\\include.php on line 23

    Warning: main(): Failed opening '../include/menu_droite.php' for inclusion (include_path='.;C:/Program Files/Easy-PHP1-8\\php\\pear\\') in c:\\informactif\\include.php on line 23


    Quelqu'un peut m'aider SVP :D

    Merci beaucoup d'avance :)
    • Partager sur Facebook
    • Partager sur Twitter
      18 août 2006 à 21:28:52

      C'est clairement un problème de localisation des fichiers alors je te conseil de faire de cette façon :

      <?php
      include('http://www.monsite.com/includes/fichier.php');
      ?>


      Si avec ca ca marche alors tu peux essayer de raccourcir avec des "../" mais essaye comme ca déjà ;)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        18 août 2006 à 21:34:09

        Ben non je suis en local est justement je voudrais que mon système sois automatique donc pas besoin de le changer à chaque fois ce qui implique d'utiliser uniquement des liens relatifs et non absolu ;) , si il y a bien une erreur dans la localisation du fichier ok, mais il faut régler la régler :p

        EDIT : Je viens de tester la condition et elle rentre dans la deuxième sois celle pour les Admins, pas normale car $inf ne vaut pas 'A' :-°

        Mais ca na aucun sens :colere2: Ma condition est bonne, et la variable vaut bien 0, la c'est très bizarre !
        • Partager sur Facebook
        • Partager sur Twitter
          18 août 2006 à 22:22:02

          Tu devrais faire un echo sur ta variable juste avant le test. Parfois on oublie qu'on l'a modifiée, ou alors elle est déclarée 2 fois, et on s'acharne à modifier la 1ère valeur (Alors que la 2ème l'écrase, et on comprend pas ^^ )

          Sinon, petit HS :


          if($inf != 'A')
          {
          }
          elseif($inf == 'A')
          {
          }
          else
          {
          }


          Effectivement, c'est pas près d'arriver, que ta variable ne soit ni == 'A' ni !='A' :p

          Je suppose que tu voulais tester les cas $inf > 1 ou $inf < 0 par exemple. Mais puisque ces tests sont à l'intérieur du premier test, ton else est mal placé.

          Il serait utile uniquement après ton elseif($inf == 0){}
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            18 août 2006 à 22:26:30

            Bon j'ai fait un echo est la variable vaut bien 0 !! :o

            Pour le HS : Ca marche parfaitement comme ca, bon je pourrais enlevé le dernier else et remplacé le elseif par un else mais c'est pas ca qui cause le bug ;)
            • Partager sur Facebook
            • Partager sur Twitter
              18 août 2006 à 22:33:01

              Petit test amusant :

              if (0 == 'A')
                      echo 'B';


              => Affiche B -_- (En clair, 0 = 'A', selon PHP :p )

              Tu peux donc mettre ça :

              if (strval($inf)!='A')
              {
                  if (intval($inf)==0)
                  {
                     
                  }
                  elseif (intval($inf)==1)
                  {
                     
                  }
              }
              elseif (strval($inf)=='A')
              {
                     
              }


              PS : Pour le HS, comme son nom l'indique, c'est un HS :p Donc il t'aide pas à résoudre ton bug ^^ Mais ton Else, il est <b>strictement impossible</b> d'entrer dedans, même si la variable est modifiée. Quelle que soit sa valeur initiale, quel que soit le contenu du if et du elseif, il est impossible d'y entrer... Parce que le if teste quelque chose, et le elseif teste son complémentaire.
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                18 août 2006 à 22:37:41

                C'est quoi ces strval o_O ? Bon j'ai mis 'admin' et ca fait pareil et me dit pas que 0 == 'admin' :-°:lol:

                EDIT : Pas vue ton post Pierre, bon j'ai mis 10 pour remplacer Admin et ca marche :D

                Merci :)

                ++
                • Partager sur Facebook
                • Partager sur Twitter
                  18 août 2006 à 22:38:51

                  @Veldryn : dans le cas
                  if('A' == o)

                  Tu demande au code php de comparé le lettre A et le chiffre 0 on ne peut pas comparer une lettre avec un chiffre. De plus pour php une lettre (ou une suite de lettre) vaut toujours 0 pour comparer la valeurs mais aussi le "type" (chiffre ou lettres pour faire simple) de deux variable il faut utiliser le triple égale.

                  Donc la fait plutôt :
                  if('A' === 0)
                  et tu verra que ce ne sera spas égale.

                  Voilà si tu ne le savais pas tu aras appris quelque chose :p

                  Bonne soirée.

                  Pierre
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 août 2006 à 22:46:36

                    Citation : Pierre

                    Tu demande au code php de comparé le lettre A et le chiffre 0 on ne peut pas comparer une lettre avec un chiffre.



                    Je n'ai fait que reprendre le code qui buggait et y mettre des valeurs. C'est vrai qu'en y réfléchissant (Chose que je n'avais pas vraiment faite ^^ ), c'est évident.

                    Toujours est-il que le code que je propose fonctionne :p

                    Citation : Bilbax

                    C'est quoi ces strval



                    Comme l'a dit Pierre, tu compares 'A' (La chaîne) avec 0 (Le nombre). Ce qui est toujours vrai.

                    strval(0) te permet de comparer 'A' (La chaîne) avec '0' (La chaîne). Ce qui retourne le résultat souhaité.

                    'A' === 0 te permet également de faire cette comparaison, puisqu'il compare les variables en tenant compte de leur Type.

                    Citation : Bilbax

                    me dit pas que 0 == 'admin'



                    Comme l'a dit Pierre, une chaîne, lorsqu'elle est comparée à un nombre, vaut toujours 0. Donc si, 'admin' == 0 ^^ En revanche, 'admin' !== 0 (Comparaison en tenant compte du type), et 'admin' != strval(0)

                    'admin' == 0 est équivalent à intval('admin') == 0
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      18 août 2006 à 22:50:14

                      Haaa ok maintenant je vois c'est quoi les === et les !== que j'ai déjà pu voir dans d'autre code :p
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Pas mal d'erreur dans mon système d'inclusion...

                      × 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