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 :

preg_replace [RegEx]


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut preg_replace
    Bonjour,

    Je cherche une solution à mon problème depuis 1 heure et la je craque... Voici mon code, je cherche à isoler les variable $1 du pref_replace pour chercher dans une bdd. En gros, je rédige des fiches produits, je veux ajouter une balise type <p1234>nom du produit</end> dans mes descriptions pour que lors de l'affichage ca aille chercher le produit par son id (1234) dans ma base et me sorte le bon lien vers le produit sur mon site.

    exemple : cette voiture rouge se nettoie avec un <p123>polissoir<end> et des <p222>gants</end>

    Ce qui devrait donner : cette voiture rouge se nettoie avec un <a href="http://monsite.com/chiffons/polissoirs/p123.html">polissoir</a> et des <a href="http://monsite.com/accessoires/protection/p222.html">gants</a>

    Voici mon code, je n'arirve pas à isoler les variables $1 du preg_replace et je ne comprend rien aux fonctions. J'ai essayé preg_replace_callback mais sans succès...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?
    include('inc/connect.php');
    $text = 'exemple avec <p2315>chablons<end> et sinon c\'est <p2316>génial<end>';
     
    $text = str_replace('<end>','</a>',$text);
    $pattern = '`<p([^>]+)>`';
    $replace = '<a href="${1}">$2';
    $req = mysql_query("SELECT nom FROM pd_descr WHERE id='$1'");
    $nom = mysql_result($req,0,nom);
    echo$nom;
    $final = preg_replace($pattern,$replace,$text);
    echo$final;
    mysql_close();
    ?>

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans un preg_replace "$1" represente seulement une chaine capturée, ce n'est pas une variable PHP que tu pourrais utiliser ensuite comme tu le fais ici dans ta requête.

    Est-ce que "http://monsite.com/chiffons/polissoirs/p123.html" c'est un vrai fichier sur ton site ou est-ce qu'il n'y aurait pas plutôt un url_rewrite derrière tout ça avec la vraie page qui serait du genre http://monsite.com/unepage?product=p123

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Merci J'avais bien compris pour le $1. Mes pages sont bien evidemment en url_rewriting et le nom des repertoires est stocké dans la table produit. Si je tag l'id du produit je peux donc sortir le bon lien pour que ce soit bien propre... Une idée ?

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu as vraiment besoin d'interroger ta bdd, il faut que tu captures l'id avec preg_match.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Je cherche je cherche... Tu peux m'en dire un peu plus ? Ou un exemple serait parfait. Je suis un peu à la ramasse la dessus

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne vois pas pourquoi tu aurais besoin du nom des rubriques.
    Tu dois bien pouvoir appeller ta page directement avec seulement le nom du produit du genre http://monsite.com/unepage.php?product=p123

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Et bien le développement est une chose, le référencement une autre. BRef, je cherche juste une solution la, excuse moi mais je n'ai pas posté un message pour parler toute la nuit de la structure de mon site

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Non c'est le même problème : si tu peux écrire un lien http://monsite.com/unepage.php?product=p123, tu peux passer directement de "<p1234>" à ton lien, sans passer par la base de données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $pattern = '#<(p[0-9]+)>(.+)<end>#U';
    $replace = '<a href="page.php?product=$1">$2</a>';
    $final = preg_replace($pattern,$replace,$text);

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Oui mais ca ne me servira a rien pour mon referencement et cela fera des pages dupliqués ... Je vais faire autrement je pense

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut alors commencer par un preg_match() pour capturer les id de produit.
    Lire dans la base de données pour chacun le repertoire.
    Puis avec un preg_replace, remplacer pour chacun par le lien.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $text = 'exemple avec <p2315>chablons<end> et sinon c\'est <p2316>génial<end>';
    preg_match_all('#<p([0-9]+)>#U', $text, $matches);
    $req = mysql_query('SELECT id, nom FROM pd_descr WHERE id IN (' . implode(',', $matches) . ')');
    while( $row = mysql_fetch_assoc($req)) {
           $text =  preg_replace('#<p' . $row['id'] . '>(.+)<end>#U','<a href="' . $row['nom'].'">$1</a>', $text);
    }
    echo $text;

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    T'es un génie, j'te kiffe, ca fonctionne !!!! Il manquait juste un [1] dans le matches de la requete ...

    Merci beaucouppppppp

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

Discussions similaires

  1. [RegEx] Remplacer une chaîne avec preg_replace
    Par GregPeck dans le forum Langage
    Réponses: 3
    Dernier message: 08/12/2005, 13h21
  2. [RegEx] preg_replace assez complexe
    Par Info-Rital dans le forum Langage
    Réponses: 2
    Dernier message: 25/11/2005, 14h28
  3. [RegEx] problème avec preg_replace
    Par carlos20 dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 11h29
  4. [RegEx] Preg_replace et affichage de variable
    Par xperienss dans le forum Langage
    Réponses: 6
    Dernier message: 13/10/2005, 14h26
  5. [RegEx] preg_replace : explications sur les caractères spéciaux
    Par Anduriel dans le forum Langage
    Réponses: 6
    Dernier message: 05/10/2005, 22h35

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