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 :

include en relatif avec variable d'url


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut include en relatif avec variable d'url
    dans la page test.php je dois faire un include de la page zozo.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include("zozo.php?toto=$var"); ?>
    ou $var est une variable de la page test.php ( j'affiche un texte de la page zozo.php que si la valeur toto est egale à $var )

    mais ça marche pas , apparemment pas possible de faire un include avec une variable d'url ?

    si je met Allow_url_include à On est que j'appelle l'include en absolue ça marche mais parait que c'est dangereux

    y'a t'il une solution svp ?

    merci !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu recupreres comment ta variable dans zozo.php ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    bonjour,

    et bien dans la page zozo.php je fait une requet avec variable url

    par exemple ça va me donner ça

    exemple zozo.php?varauteur=zola

    dans ma page test.php j'ai ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ecrivain = htmlentities($_GET['ecrivain']);
    je voudrais faire cette inclusion dans la page test.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include("zozo.php?toto=$ecrivain"); ?>
    quant je fait ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include("http://www.lesite.com/dossier/zozo.php?toto=$ecrivain"); ?>
    ça marche
    ( si bien sur dans la config php, Allow_url_include est à On )

    mais il parait que c'est pas indiqué de faire des inclusions d'url externe

    y'a t'il un moyen pour résoudre ce problème , de faire un include en relatif.

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    La question à savoir en 1er, c'est où se trouve le fichier zozo.php ?
    Sur ton serveur ou un tout autre serveur distant ? (je ne parle pas de domaine)

    Si ce fichier ce trouve sur ton serveur, alors utiliser une URL est inutile y compris un paramètre (toto=$ecrivain).

    Si c'est un fichier distant, inclure un fichier php d'un autre serveur est un manque de sécurité en toute évidence.
    Imagine un instant que ce fichier intègre un code Php qui s'amuse à supprimer tous les fichiers du répertoire courant.
    Et bien ton serveur va l'exécuter et ça va l'faire
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci runcode

    le fichier zozo.php se trouve sur le même serveur


    utiliser une URL est inutile y compris un paramètre (toto=$ecrivain).
    mais comment faire alors pour afficher dans test.php , les résultats de la requette zozo.php?toto=$ecrivain ?

    dois je récupérer en get la variable url de zozo.php ?

    exemple si je tape l'url zozo.php?toto=zola je vais avoir l'affichage d'un texte concernant cet écrivain ( résultat d'une requet sur la table "ecrivain" )

    dans test.php?tutu=zola j'ai l'affichage d'une autre requet ( autre table, table "littérature" ) qui va m'afficher un ensemble de texte concernant zola

    j'aimerais inclure dans test.php le texte sur zola affiché dans zozo.php

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    en bidouillant

    dans test.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $_GET['ecrivain'] = 'machin';
    include 'zozo.php';

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci
    à quoi correspond 'machin' dans ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $_GET['ecrivain'] = 'machin';
    include 'zozo.php';
    j'ai essayé mais ça marche pas

    à partir du moment ou c'est sur le même serveur est ce bien dangereux de faire une inclusion en absolue ?

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    à partir du moment ou c'est sur le même serveur est ce bien dangereux de faire une inclusion en absolue ?
    Si les fichiers sont sur le même serveur, il y a vraiment aucun intérêt à inclure un fichier avec une URL, donc aucun intérêt à activer allow_url_fopen.
    Puis ce n'est pas une question de chemin absolu, c'est surtout inclure un fichier de manière distant en utilisant une URL, le protocole HTTP.


    A mon sens tu ne visualise pas bien ce que fait un include().
    C'est très simple : ça récupère l'intégralité du contenu/code (peu importe son contenu : HTML, Php, les 2, etc ...) et ça le place à l'endroit même où ce trouve la ligne de code include().
    En définitive, ça revient strictement au même que de supprimer le include et faire un copier/coller du contenu à l'endroit où on souhaite le placer.


    En pratique, admettons que j'ai un fichier index.php dans le (www), donc à la racine du site Web :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ecrivain = 'toto';
     
    echo $ecrivain;
    Ca va afficher : toto.

    Maintenant, je crée un fichier toto.php toujours dans le www avec comme code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ecrivain = $salut.'toto';
    J'inclus cette fois toto.php dans index.php en modifiant le code ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $salut = 'Salut ';
     
    include('toto.php');
     
    echo $ecrivain;
    Ceci affichera : Salut toto

    Pour finir, je supprime le include ce trouvant dans le index.php, je le remplace par son contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $salut = 'Salut ';
     
    $ecrivain = $salut.'toto';
     
    echo $ecrivain;
    Ca affichera la même chose que précédemment : Salut toto

    Je ne sais pas si ce petit exemple te permettra de conclure ce qu'il y a à conclure, mais il a 2 choses :
    1/ Faire un include revient au même que de mettre le code.
    Faut vraiment imaginer comme si tout le code du toto.php ce trouvait à l'endroit même où ce trouve le include().

    2/ Il est nullement utile de "passer" un paramètre à un include vu que ça veut dire que le couple nom/valeur du paramètre doit être connu avant d'inclure.
    En somme, ça fait doublon, ce n'est pas logique de vouloir le faire.
    Dans cet exemple, le fichier toto.php inclus, exploite une variable $salut.
    Cette variable doit exister sinon le code va planter.
    Pour que le code ne plante pas, suffit donc de la créer juste avant le include().
    Sinon, il faut gérer le cas.


    Mais vois tu mieux comment fonctionne le include et pourquoi vouloir "passer" un paramètre n'est pas utile ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    je savais que include incruste le code de la page appelé mais ton explication est claire.


    donc j'ai une page
    index.php ou j'ai un moteur de recherche qui pointe sur test.php

    mettons je cherche le mot clé Dumas

    dans la page test.php?ecrivain=dumas il va m'afficher un texte résultat d'une requête sur la table "ecrivain"


    j'ai par ailleurs une page zozo.php ou j'ai une requête qui extrait de la table "litterature " un autre texte sur Dumas

    exemple : zozo.php?style=dumas

    dans test.php?ecrivain=dumas j'aimerais inclure

    zozo.php?style=dumas

    ce que j'ai fait c'est dans test.php j'ai mis

    $ecrivainstyle = $varstyle['style'];

    et je fait juste cette include

    ça marche mais y'a juste ce message d'erreur

    Notice: Undefined variable: varstyle in Z:\wamp\www\monsite\test.php on line ...
    bien sur en mettant display error à off ça roule mais c'est pas tres propre , mais enfin si ça marche

    encore merci des explications

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Dans ton exemple on ne sait pas d'où sortce tableau $varstyle['style'] ?
    C'est d'ailleurs ce qu'informe l'erreur.

    dans la page test.php?ecrivain=dumas il va m'afficher un texte résultat d'une requête sur la table "ecrivain"


    j'ai par ailleurs une page zozo.php ou j'ai une requête qui extrait de la table "litterature " un autre texte sur Dumas

    exemple : zozo.php?style=dumas

    dans test.php?ecrivain=dumas j'aimerais inclure

    zozo.php?style=dumas
    Si tu as une page qui attend un paramètre dont le nom est "ecrivain", cette donnée sera obtenue est stockée dans $_GET, soit $_GET['ecrivain'].
    Cette donnée sera dispo, donc exploitable dès la 1ère ligne de code, donc bien avant tout tes code est particulièrement le include().

    On peut à ce stade initialiser une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ecrivain = $_GET['ecrivain']; // Sa valeur -> Dumas
    Ensuite, si je me tiens à ton exemple, la valeur du style Css aurait la même valeur que le paramètre "ecrivain", soit Dumas.
    Ca support qu'il faille quelque part avoir créé autant de styles Css que de valeur qu'il soit possible d'obtenir. M'enfin, pourquoi pas.

    Du coup, pourquoi vouloir transmettre au fichier include() style=dumas vu que Dumas sera connu ?
    Je l'avais déjà précise, la valeur devra être connue avant de faire un include().
    Du coup, créer une 2ème variable $ecrivainstyle devient inutile aussi car $ecrivain contient déjà la valeur du style (Dumas).

    Admettons par exemple que tu prévois de stocker dans un tableau tous les styles, alors peut être faudrait il faire une recherche dans celui-ci (fonction in_array(), ou autre), afin de trouver son nom et le contenu du style correspondant.
    J'en sais rien, faut voir.


    Il faudrait en savoir plus ce que ce include() contient comme code.
    Tu ne donne pas de code du coup on ne peu faire que des suppositions, ce qui est loin d'être évident.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    autant pour moi j'ai du t'induire d'erreur avec le nom de la variable style , il ne s'agit pas du tout de css la je faisais référence au style de littérature ,c'est juste un exemple

    comme je te l'ai dit plus haut sur la page test.php avant de faire l'include j'ai mis ceci ( j'ai changé le nom de la variable pour ne pas faire de confusion )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ecrivaintoto = $vartoto['toto'];
    ou $vartoto['toto'] est le produit d'une requette sur une table , cette requette je la fait dans la page zozo.php

    en faisant juste sur la page test.php

    ça marche il m'affiche bien le résultat escompté mais avec ce message d'erreur qui je pense n'est pas trop important.

    encore merci

  12. #12
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    On s'en fiche un peu que ce soit du Css ou un genre d'écrivain, le principe est le même.

    Ce qui est certain c'est si Php averti qu'il y a une erreur, c'est qu'il y a une erreur, et laisser courir n'est pas forcément la meilleur chose à faire.
    Les retours d'erreurs d'erreur de Php sont essentiellement là pour nous aider à les réparer.

    Toujours est il que tu ne donne pas de code, alors on ne pourra pas deviner pourquoi cette erreur.
    Des explications ddans la plupart du temps ça ne suffit pas, c'est l'ensemble des 2 qui pourrait éventuellement aider à comprendre d'où vient cette erreur.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  13. #13
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    maintenant quant je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include("zozo.php?trucmuche=$nomtoto"); ?>
    ça marche sans code d'erreur
    Que ça marche ou pas, avec ou sans erreur, donc peu importe c'est qu'il n'est pas logique de vouloir transmettre un paramètre au include() -> ceci trucmuche=$nomtoto
    Si tu le fais toujours, c'est que tu n'as pas saisie le truc.


    Si tu espère transmettre un paramètre avec comme nom (trucmuche) qui aura comme valeur celle de la variable $nomtoto, c'est qu'en toute logique zozo.php exploite :
    - soit $_GET['trucmuche']
    - Ou alors directement $trucmuche (ça sous entend ici que le register_global serait à On).
    Sinon, tout ceci ne servirait définitivement à rien.
    Peu importe que ce soit l'un ou l'autre.

    Le truc, c'est que la valeur désirée on l'a déjà, c'est $nomtoto, ça ne sert donc à rien de la transmettre.
    Suffit d'initialiser la variable qui est exploiter dans zozo.php juste avant de l'inclure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Soit : $_GET['trucmuche'] = $nomtoto;
    Soit : $trucmuche = $nomtoto;

    Mais si on est un poil plus pointilleux, on se rend compte qu'on se retrouvera avec 2 variables ayant exactement la même valeur.
    A la limite, ça ne sert à rien, ça fait doublon.
    On pourrait alors exploiter directement $nomtoto dans zozo.php.


    [EDIT]
    Oups ...
    ça été supprimer

    Tant pis, les explications restent toujours valables.
    [/EDIT]
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. [EasyPHP] impossible de faire des URLS avec variable
    Par SandraG dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 9
    Dernier message: 30/03/2006, 17h38
  2. http_referer et url avec variable
    Par yaka2 dans le forum Langage
    Réponses: 3
    Dernier message: 02/03/2006, 14h41
  3. [MySQL] Include avec variable
    Par stailer dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/10/2005, 15h06
  4. [HTML] URLs avec variable et validation W3C
    Par pirouette_07 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 11/10/2005, 11h27
  5. Cacher Variable Url avec Variable Globale
    Par danuz dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/09/2003, 17h20

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