[PROBLEME] boucle et preg_replace

Résolu
azumi13 Messages postés 14 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 7 décembre 2009 - 7 déc. 2009 à 17:08
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 - 7 déc. 2009 à 21:34
Bonjour à tous!

Aprés une journée de galère, je viens vous demander un coup de mains car je commence a peter un cable...

Je suis en train de créer une sorte de mini-cms, j'utilise la fonction preg_replace, pour pouvoir afficher mes menus.
La boucle se fait bien, mais le souci c'est que je n'arrive pas a utiliser de fonctions dans ma fonction.
Pour faire plus clair, voici le code de test:
$str = '
<CW_MENUS>


#MENU_NOM


</CW_MENUS>
';

$chaine = preg_replace('#<CW_MENUS>(.+)</CW_MENUS>#sU',menu('$1'),$str);	
echo $chaine;

function menu($str){
$retour = "";

$sql = "SELECT * FROM cw_menus WHERE visible='1' ORDER BY ordre ASC";
$req = mysql_query($sql);

while ($data = mysql_fetch_assoc($req)){
$temp = str_replace('#MENU_NOM',$data['nom'],$str);
$temp = str_replace('#MENU_LIEN','http://www.aaaa.fr/'.$data['page_id'].'.php',$temp);
$temp = str_replace('#MENU_TITLE',$data['title'],$temp);
$retour .= $temp;
}

return $retour;
}


la fonction str_replace, n'est pas prise en compte et je ne comprend pas pourquoi.

Cordialement.

8 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 déc. 2009 à 18:44
Salut,

Tu n'utilises pas la bonne fonction. Jette plutôt un oeil du côté de preg_replace_callback()

Rappel : la fonction preg_replace() admet comme paramètre de remplacement une chaîne ou un tableau de chaînes, contenant éventuellement une référence \\n ou $n.

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
7 déc. 2009 à 18:58
Salut Azumi,

la fonction str_replace, n'est pas prise en compte

Qu'est ce qui te laisse penser cela ?
La première chose à faire est de mettre en place des echo, print_r et autres var_dump afin de cibler le pb.
En faisant un "echo $str;" au tout début de ta fonction, tu t'apercevrais que $str n'a pas le résultat escompté, et pour cause, preg_replace n'accepte pas de fonction. Pour cela il y a preg_replace_callback()

<?php
$chaine = preg_replace_callback('#<CW_MENUS>(.+)</CW_MENUS>#sU', "menu",$str);

function menu($str){
  print_r($str); // $str[1] étant la string que tu attends

  // je te laisse le soin de continuer ...
}
?>



Cordialement,

Kohntark -
3
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
7 déc. 2009 à 18:59
tu ne pouvais pas rester en week end plutôt que de me griller Neige ?




Kohntark -
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 déc. 2009 à 19:03
J'suis décalqué, 2 jours de déménagement du frangin, + 2x 6h30 de trajet...
Mais réveille toi, t'as répondu 14 minutes plus tard... rhalalalala...

Bon mais on s'en fout, hein, on fait pas la course...
Mais quand même... des fois, j'ai l'impression que tu me suis et que tu réponds justement là où je réponds...
Arf.

Cela dit, ta réponse est plus complète que la mienne, moi, j'ai eu grave la flemme...

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
7 déc. 2009 à 19:16
Mais quand même... des fois, j'ai l'impression que tu me suis et que tu réponds justement là où je réponds...
Arf.

on pourrait le croire c'est vrai, mais en fait c'est juste ma lenteur, et le fait que je ne réactualise pas toujours le thread avant d'y répondre.

promis je te gratte à la prochaine


Cordialement,


Kohntark -
0
azumi13 Messages postés 14 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 7 décembre 2009
7 déc. 2009 à 20:45
mdr merci les gars ça marche impecable
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
7 déc. 2009 à 21:27
Je t'en pris, n'oublie pas de valider MA REPONSE
(et accessoirement celle de Neige )
afin de clore le sujet et que ça puisse profiter à tout le monde.


j'te l'avais dit Neige : "j'te gratte à la prochaine " !!!


Bonne soirée,


Kohntark -
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
7 déc. 2009 à 21:34
Mouarf, tu m'fais marrer... Je cherche pas la gloire, moi au moins... hum... hein, bon...


P.S. pour azumi : n'oublie pas de valider ma réponse, et si le coeur t'en dis, celle de Kohntark, mais bon, il a pas besoin de ça...


--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
Rejoignez-nous