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 :

Remplacer #email# par $email et ainsi avoir la valeur [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut Remplacer #email# par $email et ainsi avoir la valeur
    bonjour

    dans le cadre d'un mailing ... J'ai besoin de remplacer les chaines #xxx# présentent dans un texte par les valeurs $xxx.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	$specialite='menuiserie';
    	$email ="totolariflette@orange.fr";
     
    	$entete='... Il est spécialiste en #specialite# et son email est #email#. Par prudence .... ';
            echo $entete=preg_replace('`#(.*)#`', '$1', $entete);
    Je voudrait obtenir au final le changement des chaines #specialite# et #email# par les variable $specialite et $mail ... et ainsi avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ... Il est spécialiste en menuiserie et son email est totolariflette@orange.fr. Par prudence ....
    je n'y parviens pas malgré moule tentative !
    est-ce la bonne fonction ?

    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $dyn['specialite'] = 'menuiserie';
    $dyn['email'] = "totolariflette@orange.fr";
    function dyn_value($matches)
    {
      global $dyn;
      return ( !empty($dyn[$matches[1]]) )? $dyn[$matches[1]] : $matches[1];
    }
     
    $entete='... Il est spécialiste en #specialite# et son email est #email#. Par prudence .... ';
    echo $entete = preg_replace_callback('/#([^#]*)#/', 'dyn_value', $entete);

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    Ta proposition marche bien ...mais elle oblige à changer les données initiales.

    j'ai des variables :

    $specialite='menuiserie';
    et non des

    $dyn['specialite'] = 'menuiserie';
    j'ai essayé avec des variables de variables $$1 mais pas mieux.

    si tu as une autre solution ...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    si cela peut aider ... voilà comment se présente les données ... et mon exemple était une simplification extrême ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    foreach($tabdata AS $c=>$d)   # boucle dans un array ayant les coordonnées des clients
    {
        foreach($_POST as $c=>$idmed)   # boucle dans une sélection de qq clients répondant à certains critères ... selection via formulaire 
        {
            if($d['id_med']==$idmed)   # si id du client retenu vaut celui du gros array contenant TOUS les clients
            {		
                $entete=preg_replace('`(#.*#)`', '$d[$1]', $entete);    # c'est la que ca merdouille ...
                #...suite du script
            } 
        }
    }

  5. #5
    Invité
    Invité(e)
    Par défaut
    1- il y a des choses bizarres dans ton code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($_POST as $c=>$idmed)
    {
       if($d['id_med']==$idmed)
    à remplacer par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       if( in_array( $d['id_med'], $_POST['idmed'])
      {
    2- En effet... je ne vois pas comment appliquer la fonction si $dyn (qui correspond à ton $d !) est dynamique (change à chaque tour du foreach).
    Dernière modification par Invité ; 23/04/2019 à 15h01.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Par contre, je ne vois pas ce qui t'empêche de mettre tes données dans un array $dyn !?
    mon inexpérience :-)

  7. #7
    Invité
    Invité(e)
    Par défaut
    DONC, CHANGEONS de STRATÉGIE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function replace_value( $string, $arr=[] )
    {
      foreach( $arr as $idx => $val )
      {
    	$string = str_replace('#'.$idx.'#', $val, $string);
      }
      return $string;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach($tabdata => $d)
    {
        if( in_array( $d['id_med'], $_POST['idmed'] ) )
    	{	
    		$entete = replace_value( $entete, $d );
        }
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    oh oh ... tu as un plan B...merci

    je vais tenter d' adapter ton code avec mon gros array $tabdata dont le print_r est le suivant :

    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
     
    Array
    (
        [0] => Array
            (
                [id_med] => 75
                [nom] => AAAA
                [prenom] => tom
                [specialite] => menuiserie
                [email] => totolariflette@orange.fr
     
            )
     
        [1] => Array
            (
                [id_med] => 75
                [nom] => BBB
                [prenom] => TAM
                [specialite] => patisserie
                [email] => gugusse@orange.fr
    ...
    merci ++++

    le $tabdata = gros array avec l'ensemble des clients ... issu d'une requête dans bdd
    le $_POST = sélection de id_med ... issue de la validation d'un formulaire ne retient que qq un des clients du $tabdata.

    il me faut bien boucler dans mon $_POST ...pour scriner les clients retenus et leur appliquer la formule qui transforme les chaines #mot# par la valeur de la variable correspondant $mot.

  9. #9
    Invité
    Invité(e)
    Par défaut
    le $tabdata = gros array avec l'ensemble des clients ... issu d'une requête dans bdd
    le $_POST = sélection de id_med ... issue de la validation d'un formulaire ne retient que qq un des clients du $tabdata.
    Justement, ça aussi c'est un peu bizarre...
    Il n'y a aucun intérêt à ressortir TOUS les clients.

    Normalement, on fait une requête SQL en FILTRANT sur ces id (issus du $_POST)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php 
    $list_ids = implode(',',$_POST['id_med']; 
    // requête filtrée :
    $sql = "SELECT............. WHERE id_med IN (" . $list_ids . ") ......"

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    exact ...mais ne voulant pas refaire la requête avec IN ( ... ) par la validation du formulaire ... juste après avec fait la requête pour tout afficher ... j'ai mis en session le gros $tabdata.
    je peux améliorer cela si tu penses que c'est moins fatiguant pour le serveur.

    j'aimera bien avant arriver à la solution de substitution

  11. #11
    Invité
    Invité(e)
    Par défaut
    Pour la "solution de substitution", je t'ai donné TOUT le 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    $_POST['idmed'] = [75,76]; // pour TEST
     
    $tabdata = [ // pour TEST
        0 => [
                'id_med' => 75,
                'nom' => 'AAAA',
                'prenom' => 'tom',
                'specialite' => 'menuiserie',
                'email' => 'totolariflette@orange.fr',
            ],
        1 => [
                'id_med' => 76,
                'nom' => 'BBB',
                'prenom' => 'TAM',
                'specialite' => 'patisserie',
                'email' => 'gugusse@orange.fr',
            ],
    ];
     
    $entete = '... #nom# #prenom# est spécialiste en #specialite# et son email est #email#. Par prudence .... ';
     
    foreach($tabdata as $d)
    {
    //    var_dump($d);
    	if( in_array( $d['id_med'], $_POST['idmed']) )
    	{	
    		echo '<p>'.replace_value( $entete, $d ).'</p>';
        }
    }
    function replace_value( $string, $arr=[] )
    {
      foreach( $arr as $idx => $val )
      {
    	$string = str_replace('#'.$idx.'#', $val, $string);
      }
      return $string;
    }

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    alors la chapeau !!
    ca marche ... j'ai modifié mon filtre en refaisant la requête avec le IN (...) pour ne pas avoir un $tabdata énormisime.

    JE TE REMERCIE UNE FOIS DE PLUS BIEN VIVEMENT

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 27/01/2017, 12h28
  2. Remplacer null par...
    Par HichamK dans le forum Oracle
    Réponses: 4
    Dernier message: 17/01/2006, 13h56
  3. Réponses: 2
    Dernier message: 14/11/2005, 13h33
  4. [Configuration] remplacement des é par des i
    Par illegalsene dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 18/10/2005, 16h37
  5. [ASP] include remplacer chemin par variable
    Par damn dans le forum ASP
    Réponses: 3
    Dernier message: 01/10/2004, 15h27

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