Rechercher/remplacer avec php+mySQL


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Rechercher/remplacer avec php+mySQL

Message le Lun Juin 11, 2007 12:39

Hello,

Je suis confronté à une petite difficulté, mais je pense qu'il y'a du monde ici qui saura comment faire.

J'ai d'une part une table de plusieurs centaines de lignes, sur deux colonnes:

[ champ1 | champ2 ]

J'ai d'autre part un texte, contenu dans $texte

Je voudrais pouvoir faire l'output de $texte_mod sachant que $texte_mod correspond à $texte, duquel chaque string qui correspond à une valeur de "champ1" aura été remplacé par l'équivalent de "champ2".

D'avance merci pour votre aide.


e-kiwi
Modérateur
Modérateur
 
Messages: 15618
Inscription: 23 Déc 2003

Message le Lun Juin 11, 2007 12:52

mettre champ1 dans un tableau, champ2 dans un autre, et faire un str_replace de tableau1 par tableau2 dans texte tout simple ne marche pas ?


siddhy
WRInaute discret
WRInaute discret
 
Messages: 163
Inscription: 20 Sep 2004

Message le Lun Juin 11, 2007 13:05

Salut,
et avec un strtr ?
Code: Tout sélectionner
<?php
$trans = array("bonjour" => "salut", "salut" => "bonjour");
echo strtr("salut à tous, j'ai dit bonjour", $trans);
?>


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Message le Lun Juin 11, 2007 13:17

J'ai une fonction existante, comme ceci:

Code: Tout sélectionner
function makechanges($text) {
   $changes= array(
      'this' => 'that',
      'here' => 'there'
   );

   return str_replace( array_keys($corrections), array_values($changes), $text );
}


...fonctionne bien, mais je ne sais pas comment alimenter $changes à la suite d'une requête, plutôt que comme ici "statique"... :roll:

ACth
WRInaute impliqué
WRInaute impliqué
 
Messages: 795
Inscription: 11 Nov 2006

Message le Lun Juin 11, 2007 13:29

Pour un truc temporaire, vite fait ...

Tu déclare en haut ta variable en global :

Code: Tout sélectionner
global $changes;


Ensuite tu gère la modification de ta variable et y a plus cas !

Code: Tout sélectionner
// début du script (du moins avant la "boucle")
global $changes;

// ta fonction
function makechanges($text) {

   return str_replace( array_keys($corrections), array_values($changes), $text );
}

// requete
........

// modification de la variable $changes

   $changes= array(
      'this' => 'that',
      'here' => 'there'
   );

// appel de la fonction
....

// et on recommence
....


Sinon, tu peux aussi passer $changes en paramètre, tout comme $text.


DreamJap
WRInaute discret
WRInaute discret
 
Messages: 114
Inscription: 6 Mai 2005

Message le Lun Juin 11, 2007 13:49

Essaye ça :

Code: Tout sélectionner
$changes = array();
req = mysql_query("SELECT champ1, champ2 FROM table");
while( $donnees = mysql_fetch_assoc($req) ) {
    $champ1 = $donnees['champ1'];
    $changes[$champ1] = $donnees['champ2'];
}

$text_mod = str_replace( array_keys($corrections), array_values($changes), $text );


HawkEye
WRInaute accro
WRInaute accro
 
Messages: 17013
Inscription: 23 Fév 2004

Message le Lun Juin 11, 2007 21:04

Merci pour votre aide, encore un peu "fine tuning" et ça marchera nickel ;)

Merci!

NextGeneration
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 428
Inscription: 27 Sep 2006

Message le Lun Juin 11, 2007 21:15

lis la doc php sur ces fonctions :

ob_start();
ob_end_*();

notemment, tu peux leur passer une fonction filtrante.
Ca me parait le plus adapté à ton cas.

NextGeneration
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 428
Inscription: 27 Sep 2006

Message le Lun Juin 11, 2007 21:16

tiens, un exemple tout cuit:


<?php

function callback($buffer)
{
// remplace toutes les pommes par des carottes
return (ereg_replace("pommes de terre", "carottes", $buffer));
}

ob_start("callback");

?>

<html>
<body>
<p>C'est comme comparer des carottes et des pommes de terre.</p>
</body>
</html>

<?php

ob_end_flush();

?>

NextGeneration
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 428
Inscription: 27 Sep 2006

Message le Lun Juin 11, 2007 21:24

Solution prete a l'emploi ( mélange de la méthode ob_ et de posts plus haut )

<?php

$changes = array();
req = mysql_query("SELECT champ1, champ2 FROM table");
while( $donnees = mysql_fetch_assoc($req) ) {
$champ1 = $donnees['champ1'];
$changes[$champ1] = $donnees['champ2'];
}


function callback($buffer)
{
// remplace toutes les pommes par des carottes
return str_replace( array_keys($corrections), array_values($changes), $buffer );
}


// a partir de cette instruction, tous les mots seront replacés
ob_start("callback");

?>

<?php

ob_end_flush();
// fin du remplacement
?>


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités