Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/12/2010, 23h05   #1
Invité de passage
 
Inscription : mai 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 25
Points : 2
Points : 2
Par défaut Problème de fonctions

Bonsoir à tous,

Voici mon code :

Code :
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.
TitBen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 23h11   #2
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,

quel est le but en fait ?

pourquoi ne pas faire ?

Code php :
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);
 
}
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2010, 23h43   #3
Invité de passage
 
Inscription : mai 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 25
Points : 2
Points : 2
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 :
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 :
1
2
$nom = 'Pierre';
$email = 'pierre@domaine.com';

Mais on pourrait très bien avoir recup() qui retourne :
Code :
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 :
1
2
$adresse = 'mon adresse';
$telephone = 'mon numéro';

Pour au final avoir :
Code :
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 ?
TitBen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 00h05   #4
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

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

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Autrement dit tu as :

Code :
1
2
$name = 'TitBen' ;
$string = 'Salut $name, ça va ?' ;
Et tu veux :

Tu peux faire :

Code :
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.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 01h44   #5
Membre éprouvé
 
Avatar de guigo
 
Inscription : juin 2006
Messages : 606
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 606
Points : 479
Points : 479
Salut,
Utilise un tableau ?

Code :
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;
}
}
guigo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 08h04   #6
Invité de passage
 
Inscription : mai 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 25
Points : 2
Points : 2
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 :
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 :
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 :
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.
TitBen est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 03/12/2010, 08h33   #7
Membre Expert
 
Avatar de Doksuri
 
Tiger Scott
Développeur Web
Inscription : juin 2006
Messages : 1 245
Détails du profil
Informations personnelles :
Nom : Tiger Scott
Âge : 42

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : juin 2006
Messages : 1 245
Points : 1 502
Points : 1 502
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
__________________
La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

N'oubliez pas le Le tag resolu.

Need_!
Doksuri est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 08h47   #8
Invité de passage
 
Inscription : mai 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 25
Points : 2
Points : 2
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 :
$message = ConvertVariables(recup());
dans la fonction affichage()

Si tu as une solution je suis preneur !
TitBen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 09h01   #9
Invité de passage
 
Inscription : mai 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 25
Points : 2
Points : 2
Bon bah je crois que j'ai trouvé !!

Code :
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
TitBen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2010, 09h18   #10
Invité de passage
 
Inscription : mai 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 25
Points : 2
Points : 2
Bon bah c'est tout bon !!

Merci pour votre aide.

je passe en résolu
TitBen est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h35.


 
 
 
 
Partenaires

Hébergement Web