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 :

multi include de variables identiques [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut multi include de variables identiques
    Bonjour,

    Je dois modifier une appli existante quelque peu bordélique.

    J'ai plusieurs fichiers php (disons 'cas1.php' 'cas2.php' 'cas3.php' ...) qui contiennent les définitions d'une même série de tableaux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    'cas1.php' :
    <?
    $data = array();
    $data["nom"] = "toto";
    $data["adresse"] = "1 rue de la ville";
    ...
    $other = array();
    $other["sys"] = "123";
    $other["br"] = "abc";
    ...
    ?>
    'cas2.php' :
    <?
    $data = array();
    $data["nom"] = "alice";
    $data["adresse"] = "36 avenue des chandelles";
    ...
    $other = array();
    $other["sys"] = "842";
    $other["br"] = "fds";
    ...
    ?>
    (Les valeurs sont plus complexes que celles proposées à titre d'exemple)

    Lorsque le client se connecte, un des fichiers 'casX.php' est inclus, celui qui lui correspond.

    Dans l'appli, il doit avoir la possibilité de voir (et éventuellement de modifier) les données contenus dans les autres 'casX.php'.

    Sous forme tabulaire, les données de deux fichiers 'casX.php' doivent être affichées en regard l'une de l'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    toto alice
    1 rue de la ville 36 avenue des chandelles
    ....
    Problème :
    il a déjà les tableaux définis (les siens quand il se connecte). Comment récupérer les données des autres définitions de tableaux ?
    Les noms des variables sont identiques dans chaque 'casX.php' ...

    Existe t-il un moyen plus direct que de parser chaque fichier 'casX.php' ? Si oui, lequel ? Avez-vous des idées ?


    J'avis pensé à des 'include' à l'intérieur d'une fonction pour en limiter la portée mais cela ne fonctionne pas.

    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    Aucun de vous n'a jamais été confronté à une problématique de ce genre ?

    Dit autrement, comment inclure des fichiers php qui contiennent des variables de même nom (mais de valeurs différentes) ? Et afficher ces différentes valeurs à un instant donné ?

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par _iri_ Voir le message
    J'avis pensé à des 'include' à l'intérieur d'une fonction pour en limiter la portée mais cela ne fonctionne pas.
    C'est aussi ce que j'aurais probablement fait. Mais en quoi cela ne fonctionne-t-il pas ? Bien évidemment tout est question de portée(s) après.

    Mais pour présenter plusieurs tableaux en une et même fois, ça veut dire qu'il faut les conserver quelque part et en dehors de cette fonction (une variable globale par exemple). Se pose aussi le problème de la structure des données elles-même : si elles étaient toutes regroupées dans un seul et même array, ce serait bien plus facile à manipuler car, a priori, il serait nécessaire de connaître les noms de vos variables.

    Et puis des fichiers, c'est bien beau, mais un script PHP accessible en écriture ça peut représenter une énorme faille sans parler des accès concurrents et d'erreurs qui pourraient faire planter votre application.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par julp Voir le message
    Mais en quoi cela ne fonctionne-t-il pas ?
    Cela dit, je m'y prend peut-être mal.

    -> Récupérer les valeurs :

    1- J'appelle une fonction 'GETarray($arrayName, $casY, $casZ)' pour les N tableaux

    les N $arrayName sont définis initialement à la connection du client dans le fichier 'casX.php' correspondant
    $casY et $casZ sont les fichiers qui contiennent les définitions à afficher

    2- Dans la fonction GETarray, je parcours le tableau fourni en argument
    Dans la boucle, j'appelle une seconde fonction 'GETincludeContentKey($arrayName, $key, $cas)' dans lequel je fais un include("$cas") qui me retourne la valeur associée à la clé $key du tableau $arrayName.

    L'ennui est que c'est toujours la valeur contenue dans le fichier 'casX.php' qui m'est retourné, jamais celle du fichier passé en argument.

    Voici le code simplifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    function GETincludeContentKey($arrayName, $key, $cas)
    {	
    	if (is_file($cas)) 
    	{
            	include $cas;
            	return $arrayName[$key];
    	}
        	return "";
    }
     
    function GETarray($arrayName, $casY, $casZ)
    {
        foreach ($arrayName as $key => $value)
        {
              echo GETincludeContentKey($arrayName, $key, $casY);
              echo GETincludeContentKey($arrayName, $key, $casZ);
              // j'obtiens la valeur de 'casX.php' dans les deux cas
        }
    }
     
    for ...
    {
         GETarray($arrayName, $casY, $casZ);
    }
    Ça me parait logique ce "mauvais" résultat puisque $arrayName donné en entrée dans GETarray est celui défini avec 'casX.php'.

    Mais comment l'appeler autrement ? Ou alors me suis-je pris une ornière et je n'arrive plus àvoir la solution ?

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par julp Voir le message
    car, a priori, il serait nécessaire de connaître les noms de vos variables.
    Oui, exactemnt.

    Et puis des fichiers, c'est bien beau, mais un script PHP accessible en écriture ça peut représenter une énorme faille sans parler des accès concurrents et d'erreurs qui pourraient faire planter votre application.
    Là aussi, je suis d'accord ! Je préférerais passer par une DB mais pour l'heure ce n'est pas à l'ordre du jour (cela supposerait une bonne reprise du code existant).

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Votre code est, a priori, faux/incohérent/incomplet, notamment au niveau de $arrayName et de son usage.

    Et il ne peut pas vous renvoyer les valeurs de casX.php sans variables globales puisque la portée est différente.

    Sinon pour faire simple, je pense qu'il est possible d'utiliser quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # Pour test
    $a = $b = $c = $toto = $data = $other = 'main';
     
    function source(&$__dest, $__file) {
        if (include($__file)) {
            $vars = get_defined_vars();
            unset($vars['__dest']);
            unset($vars['__file']);
            $__dest[$__file] = $vars;
        }
    }
     
    $dest = array();
    source($dest, 'cas1.php');
    source($dest, 'cas2.php');
     
    print_r($dest);

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 90
    Points : 92
    Points
    92
    Par défaut
    Exact, en trop simplifiant l'exemple, j'en avais oublié les globals. Cela dit, mon approche ne fonctionnait de toutes façons pas.

    Je suis donc reparti de votre suggestion et son adaptation s'est révélée payante

    Il me reste à optimiser les appels et à sécuriser les saisies qui pourraient être faites (du moins du côté du script, une autre personne s'occupera du reste). Je mets en résolu.

    Merci pour ce joli coup de pouce

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

Discussions similaires

  1. [Smarty] {include} avec variable
    Par Ikonic dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 16/11/2008, 20h43
  2. Réponses: 5
    Dernier message: 04/10/2006, 19h49
  3. include et variable $_GET (pas dur..) juste une info
    Par gretch dans le forum Langage
    Réponses: 11
    Dernier message: 04/08/2006, 17h08
  4. Réponses: 2
    Dernier message: 07/03/2006, 02h53
  5. [MySQL] Include avec variable
    Par stailer dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/10/2005, 16h06

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