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 :

Passage de variable par include


Sujet :

Langage PHP

  1. #1
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut Passage de variable par include
    Bonjour à tous,

    j'ai un problème qui je pense vient de le configuration de PHP.

    J'ai une page qui déclare une variable ($toto):

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $toto = "toto";
    ...
    include("page.php");
    ?>
    Cette variable est réutilisée dans page.php:
    page.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo $toto;
    ?>
    Et là, je me prend une belle erreur: Notice: Undefined variable: toto in page.php on line 3


    Pourtant les variables globales sont censées être utilisables de partout non?

    Quelqu'un aurait une idée de la cause du problème? Merci d'avance


    PS: versions: PHP4.4.2 / MySQL 5.0



  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Avril 2005
    Messages
    614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Turquie

    Informations forums :
    Inscription : Avril 2005
    Messages : 614
    Points : 502
    Points
    502
    Par défaut
    oui çà viens surement de la configuration de php, car logiquement meme si $toto n'est pas déclaré, il ne devrai meme pas t'afficher d'erreur.

  3. #3
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Oui, mais j'ai activé tous les warning & messages d'erreurs, donc il me vient le mess....

    Quelqu'un sait pourquoi mes variables ne sont pas passées à mes fichiers d'include?

  4. #4
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Et peut etre en mettant global devant ?

    c'est a dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $global toto = "toto";

  5. #5
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par SnakemaN
    et peut etre en mettant global devant ?
    j'ai essayé... même comportement...

  6. #6
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Mais je viens de percuter !

    Ca ne marchera jamais dans ce sens la,

    Je m'explique si tu declare ta variable dans index.php elle ne sera pas declarée dans page.php car elle est include apres.
    Ca ne marche que si tu declare une variable en global dans page.php et que tu y fait allusion dans index.php et encore APRES l'include !

    Donc dans ton cas la seule solution et de faire un petit GET si tu ne veux pas passer par un fomlaire ainsi ca donne :

    index.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $toto = "toto";
    ...
    include("page.php?toto=".$toto."");
    ?>
    Ainsi tu passe la variable $toto en parametre, puis

    puis dans page.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    //Un petit controle imposé par le PHP 4.4.2
    if(isset($_GET['toto']))
    $toto = $_GET['toto'];
    else
    $toto = "erreur";
     
    //Puis traitement affichage de toto °+°
    echo $toto;
    ?>
    Voila, comme ca ca devrait marcher !

  7. #7
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    En fait je reviens sur ce que j'ai dit, cela fonctionne, mais il faut mettre le global partout:

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php 
      global $toto = "toto";
      include "page.php";
    ?>

    page.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
      global $toto;
      echo $toto;
    ?>
    Le problème est en partie résolu... Si quelqu'un pourrait m'expliquer la raison de ce comportement, ce serait bien sympa


    EDIT >> SnakemaN: ha ouais ça pourrait aussi marcher comme cela, mais je trouve un poil bourrin (j'aurais pas mal de variables à passer!)

  8. #8
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    ton fichier inclus ne contient que ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    echo $toto;
    ?>
    Ou bien ce $toto est-il dans une fonction, auquel cas le global est requis ?

    petit exemple de code fonctionnant chez moi, dis moi si ça marche chjez toi aussi :
    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    	error_reporting(E_ALL);
    	$toto = 2;
    	include('affiche.php');
    	echo '<br>';
    	affiche_toto();
    ?>
    affiche.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    	function affiche_toto() {
    		global $toto;
    		echo $toto;
    	}
    	echo $toto;
    ?>
    Tu devrai obtenir ça comme renvoi :
    2
    2
    Si dans affiche.php tu commentes le global $toto; là tu obtiendra une erreur :
    2

    Notice: Undefined variable: toto in C:\wamp\www\test\PHP\passage de variable via include\affiche.php on line 4
    Il semble bien que ce soit un problème de portée des variables que tu rencontres... une variable définie dans une fonction n'est que locale, sauf indication du contraire (global $mavar; ou utilisation du tableau $GLOBALs['mavar'] )

    Plus d'infos sur la portée des variables : http://fr.php.net/global

  9. #9
    Membre éprouvé
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Points : 1 118
    Points
    1 118
    Par défaut
    Il faut egalement savoir que c'est un peu chaud de faire passer beaucoup de variable en global, aussi bien en terme de sécurité que de performance, pourquoi ne pas utiliser des variables de session l'avantage est qu'en plus c'est la meme pour tout le monde !

  10. #10
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    ...
    Ou bien ce $toto est-il dans une fonction, auquel cas le global est requis ?
    Non, ce toto n'est pas dans une fonction, il est simplement utilisé dans l'include en dehors de tout bloc. Concernant ton test, j'obtiens bien le résultat attendu, à savoir "2, 2".

    Citation Envoyé par SnakemaN
    Il faut egalement savoir que c'est un peu chaud de faire passer beaucoup de variable en global, aussi bien en terme de sécurité que de performance, pourquoi ne pas utiliser des variables de session l'avantage est qu'en plus c'est la meme pour tout le monde !
    J'en utilise aussi, des variables de session, mais plutôt pour des données persistantes à conserver de page en page (login, rang, adresse ip)... Les variables que je passe en global sont des résultats d'accès à des BDD, ou d'autres trucs destinés à modifier le chargement de la page (paramètre d'URL, de POST, ...).


    EDIT:
    J'ai identifié la cause du problème: l'include était réalisé avant la définition des variables (car vu qu'on utilise l'OO, il faut inclure toutes les classes avant de les utiliser) et le problème était causé par cela. En modifiant l'ordre d'inclusion, le problème est règlé

    Merci du coup de pouce

  11. #11
    Membre habitué Avatar de johnkro
    Étudiant
    Inscrit en
    Juin 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2006
    Messages : 276
    Points : 187
    Points
    187
    Par défaut
    niveau sécurité c'est tres moyen les variables globales, utilises plutot des variables de session...

  12. #12
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par johnkro
    niveau sécurité c'est tres moyen les variables globales, utilises plutot des variables de session...

    Merci du conseil, mais elles sont utilisées à bon escient

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

Discussions similaires

  1. [Tableaux] Passage de variables par <a href ...
    Par Jean_Benoit dans le forum Langage
    Réponses: 2
    Dernier message: 13/05/2006, 15h59
  2. problème de passage de variables par POST
    Par jeanfrancois dans le forum Langage
    Réponses: 7
    Dernier message: 03/05/2006, 14h36
  3. Probleme avec passage de variables par formulaires
    Par cortex007 dans le forum Langage
    Réponses: 5
    Dernier message: 17/12/2005, 15h08
  4. passage de variable par un formulaire (checkbox)
    Par artotal dans le forum Langage
    Réponses: 3
    Dernier message: 16/10/2005, 20h16
  5. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 18h03

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