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 :

Problème de fonctions


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut Problème de fonctions
    Bonsoir à tous,

    Voici mon code :

    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
    function ConvertVariables($content) {
      preg_match_all('/\$(\w+)/i', $content, $matches);
      foreach($matches[1] as $match){
          global ${$match};
          $content = str_replace("$".$match,${$match},$content);
      }
      return $content;
    }
     
    function recup() {
    	$html = 'Bonjour $nom,<br />Ton adresse mail est : $email';
    	return $html;
    }
     
    function affichage() {
    	$nom = 'Pierre';
    	$email = 'pierre@domaine.com';
     
    	$message = ConvertVariables(recup());
     
    	return $message;
    }
     
    echo affichage();
    Les variables : $nom et $email sont obligatoirement définies dans la fonction "affichage()" !

    Le but étant que le echo affichage(); donne :

    Bonjour Pierre
    Ton adresse mail est : pierre@domaine.com

    Je bloque ... depuis cet après-midi !

    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    625
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 625
    Points : 673
    Points
    673
    Par défaut
    Bonjour,

    quel est le but en fait ?

    pourquoi ne pas faire ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function recup($nom,$email) {
    	$html = 'Bonjour $nom,<br />Ton adresse mail est : $email';
    	return $html;
    }
     
    function affichage() {
    	$nom = 'Pierre';
    	$email = 'pierre@domaine.com';
     
            return recup($nom, $email);
     
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Tout simplement parce que la fonction recup() ici est simplifiée !
    En réalité, il s'agit d'une fonction permettant de récupérer un élément dans une base de donnée en fonction d'une clé.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function recup($key) {
       $checkSQL = mysql_query("SELECT value FROM table WHERE key = '".$key."'", dbconnect());
       $row_checkSQL = mysql_fetch_assoc($checkSQL);
       return $row_checkSQL['value'];
    }
    La valeur retournée peut être différente en fonction de la clé.

    Le but étant de pouvoir convertir toutes les variables $quelquechose par sa valeur telle que définie dans la fonction affichage() !

    Par exemple, la fonction recup() retourne :
    Bonjour $nom, ton adresse mail est : $email !

    Et dans la fonction affichage(), après des requêtes SQL on a les variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nom = 'Pierre';
    $email = 'pierre@domaine.com';

    Mais on pourrait très bien avoir recup() qui retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ton adresse est : $adresse et ton numéro de téléphone : $telephone
    Donc là dans affichage(), les requêtes SQL auraient donnée les variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $adresse = 'mon adresse';
    $telephone = 'mon numéro';

    Pour au final avoir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bonjour Pierre, ton adresse mail est : pierre@domaine.com
    Ton adresse est : mon adresse et ton numéro de téléphone est mon numéro

    Je suis clair ?

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 255
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 255
    Points : 8 551
    Points
    8 551
    Billets dans le blog
    17
    Par défaut
    Autrement dit tu as :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $name = 'TitBen' ;
    $string = 'Salut $name, ça va ?' ;
    Et tu veux :

    Tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $name = 'TitBen' ;
    $string = 'Salut $name, ça va ?' ;
     
    eval('$result = "' . $string . '" ;') ;
     
    echo $result ;
    Mais je reste sceptique quant à la nécessité de faire ce genre de choses.

  5. #5
    Membre confirmé Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Points : 576
    Points
    576
    Par défaut
    Salut,
    Utilise un tableau ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    //$T['type']=Value;
    whyle($Col=mysql_fetch_array($Sql)){
        $T[$Col['VALUE']]='ee@ee.fr';
     
    //puis
    foreach($T as $K=>$V){
    switch($K){
       case 'adresse' : echo " mail : ".$V;break;
       defaut : break;
    }
    }

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    La nécessité de faire ce genre de chose ?
    Cela permet de créer des patterns de réponses !

    Je stocke tous mes patterns en base de données.
    Et lorsque j'en ai besoin je recup(key_pattern)

    Le problème n'est pas comment remplacer $variable par sa valeur, car ma fonction ConvertVariables($content) est opérationnelle.

    Faites :

    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
    function ConvertVariables($content) {
      preg_match_all('/\$(\w+)/i', $content, $matches);
      foreach($matches[1] as $match){
          global ${$match};
          $content = str_replace("$".$match,${$match},$content);
      }
      return $content;
    }
     
    $nom = 'Pierre';
    $email = 'pierre@domaine.com'
    $html = 'Bonjour $nom, ton adresse email est : $email !';
     
    echo ConvertVariables($html);
     
    // Donne
    Bonjour Pierre, ton adresse email est : pierre@domaine.com
    Le problème est que ça ne fonctionne pas lorsque les variables sont définies à l'intérieur d'une fonction :

    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
    26
    27
    function ConvertVariables($content) {
      preg_match_all('/\$(\w+)/i', $content, $matches);
      foreach($matches[1] as $match){
          global ${$match};
          $content = str_replace("$".$match,${$match},$content);
      }
      return $content;
    }
     
    function recup() {
    	$html = 'Bonjour $nom, ton adresse mail est : $email';
    	return $html;
    }
     
    function affichage() {
    	$nom = 'Pierre';
    	$email = 'pierre@domaine.com';
     
    	$message = ConvertVariables(recup());
     
    	return $message;
    }
     
    echo affichage();
     
    // Donne
    Bonjour , ton adresse mail est :
    Alors que :

    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
    function ConvertVariables($content) {
      preg_match_all('/\$(\w+)/i', $content, $matches);
      foreach($matches[1] as $match){
          global ${$match};
          $content = str_replace("$".$match,${$match},$content);
      }
      return $content;
    }
     
    function recup() {
    	$html = 'Bonjour $nom, ton adresse mail est : $email';
    	return $html;
    }
     
    $nom = 'Pierre';
    $email = 'pierre@domaine.com';
     
    echo ConvertVariables(recup());
     
    // Donne
    Bonjour Pierre, ton adresse mail est : pierre@domaine.com
    Vous comprenez mon problème.

    Je ne peux faire autrement que par fonction.
    Donc j'ai la fonction :
    - affichage() >> qui définit les bonnes variables et va faire appel à la fonction recup()
    - recup() >> qui va récupérer le bon pattern
    - ConvertVariables() >> qui va convertir les variables présentes dans le pattern par leur valeur respective.

  7. #7
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 477
    Points : 4 688
    Points
    4 688
    Par défaut
    Salut, je crois que tu as oublie l'histoire des portees des variables...
    de plus, je ne vois pas a quel moment tu fais appel a recup()...

    sinon, tu peux faire ca en object, ca sera surment plus simple

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    C'est surement une histoire de portée de variable !
    Tu as une idée pour une solution Doksuri ?

    Sinon la fonction recup() est appelée directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message = ConvertVariables(recup());
    dans la fonction affichage()

    Si tu as une solution je suis preneur !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bon bah je crois que j'ai trouvé !!

    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
    26
    27
    function ConvertVariables($content) {
      preg_match_all('/\$(\w+)/i', $content, $matches);
      foreach($matches[1] as $match){
          global ${$match};
          $content = str_replace("$".$match,${$match},$content);
      }
      return $content;
    }
     
    function recup() {
    	$html = 'Bonjour $nom, ton adresse mail est : $email';
    	return $html;
    }
     
    function affichage() {
    	$GLOBALS['nom'] = 'Pierre';
    	$GLOBALS['email'] = 'pierre@domaine.com';
     
    	$message = ConvertVariables(recup());
     
    	return $message;
    }
     
    echo affichage();
     
    // Donne
    Bonjour Pierre, ton adresse mail est : pierre@domaine.com
    Je vous confirme ça dès que j'ai intégré à mon code initial.
    Merci à vous

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 25
    Points : 10
    Points
    10
    Par défaut
    Bon bah c'est tout bon !!

    Merci pour votre aide.

    je passe en résolu

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

Discussions similaires

  1. C++ Problème de fonctions et pointeurs
    Par zmatz dans le forum C++
    Réponses: 3
    Dernier message: 01/10/2005, 16h20
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème de fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/05/2005, 20h30
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

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