Php: pb include

salut
un pti pb, dans une de mes pages(index.php) je fai un include du style:

include($www.'/public/seeCocktail.php?name='.$_GET['name']);

tout marche bien si name ne contient pas d espace, dans le cas contraire, php m affiche:

Warning: main(xxxxxxxx/public/seeCocktail.php?name=marche pas): failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in /home/xxxxxxx/index.php on line 62

Warning: main(): Failed opening 'xxxxxxxxx/public/seeCocktail.php?name=marche pas' for inclusion (include_path='.:/usr/local/lib/php') in /home/xxxxxxxxx/index.php on line 62

des sugestions?
Merci de votre attention

2 réponses

  1. Modérateur
    Salut,

    Il ne faut pas d'espace dans une url. Il faut donc adapter la chaine pour une url avec urlencode():

    include($www.'/public/seeCocktail.php?name='.urlencode($_GET['name']));


    Sinon tu arrives à passer une variable par url dans un include? Il ya quelqu'un qui n'y arrivait pas il ya quelques temps...
    0
    1. Bonjour,

      Je suis en train de monter mon site perso en php.
      J'ai créé une page "index.php" englobant des includes des zones: 'partie1.php' (haut) 'partie2.php' (bas) et, pour la partie centrale, elle est gérée par un include de sécurité.
      Voici le code:
      
      <body>
      
      <!-- -------------------------- haut ------------------------------ !-->
      <?php
      include("theme/partie1.php"); // on appelle le fichier
      ?>
      
      <!-- -------------------------- centre ---------------------------- !-->
      <?php
      // si votre site n'est pas à la racine du serveur, vous pouvez avoir besoin de dire OU se trouve la page index.php
      $_chemin = '/';
      
      // la page par defaut, si les valeurs fournies sont incorrect : 
      $page_defaut = 'theme/accueil';
      
      // on recupere la valeur passé dans l'url : 
      if(isset($_GET["page"]))
        $page=$_GET["page"];
      else
        $page=$page_defaut;
      
      //Enlevons les caractères html
      $page=htmlentities($page, ENT_QUOTES);
      
      //Si on a des répertoires que l'on ne veut pas accéder, un les liste ici :
      $repProteger=array('admin', 'commun', 'images', 'include', 'theme', 'popup');
      $temp=split('/',$page);
      if(in_array($temp[0],$repProteger)){ $page=$page_defaut; }
      
      //Si jamais qq tente de penetre dans le serveur en utilisant des ./ ou :/
      if(eregi("(:/)|(./)",$page)){ $page=$page_defaut; }
      
      //Testons si la page demandé existe bien en local
      if(file_exists($_SERVER["DOCUMENT_ROOT"].$_chemin.'/'.$page.'.php'))
        include($page.'.php');
      elseif(file_exists($page_defaut.'.php'))
        include($page_defaut.'.php');
      else
        exit("Erreur : La page par defaut n'existe pas.");
      ?>
      
      <!-- ------------------------ bas -------------------------------- !-->
      <?php
      include("theme/partie2.php"); // on appelle le fichier
      ?>  
           
      </body>
      
      


      Mon souci:

      La page 'accueil.php' apparaît bien dans la partie centrale dès l'ouverture du site. Cependant, lorsque je désire charger une autre page, à la place, rien ne se produit; le chemin étant bien spécifié dans la barre url du site.
      La page appelée est: "page1.php' (se situant à la racine du site dans le dossier "charger").
      Cette action d'appel est encodée dans 'partie1.php'; dont voici le code:

      
      <body>
      <div id="global">
        <div id="header"></div>
          <div id="barre">
            <div id="search">
                  zzz
            </div>
              <div id="menuhrzHaut">
                <ul id="menuhrz">
                  <li><a href="index.php" title="Accueil">Retour à l'accueil</a> - </li>
                      <li><a href="index.php?page=charger/page1" title="page1">Mon C.V.</a> - </li>
                  <li><a href="">Contact</a> - </li>
                      <li><a href="">Espace privé</a></li>
                  </ul>
              </div>
           </div>
           <div id="contentarea">
              <div id="coleft"><a href="">test 1</a></div>
      
      


      Ma question: Où se situe le problème ?

      Merci d'avance pour votre aide précieuse.

      Cordialement...
      0