Page 1 sur 1

aide sur preg_match

Posté : 08 déc. 2007, 15:46
par jobart
Bonjour,
petit problème 2 preg_match en meme , il me prend le premier mais pas le second
je les met pas ensemble car des fois le premiers et tout seul ,le second tout seul ou les 2 en même temps.
une petite aide pour la bonne direction serait necessaire :oops:
	while($val=mysql_fetch_array($re))
   {  
	 $article=$val['idarticle'];
	if(preg_match('`chaussure`',$article)){
	 $idarticle=str_replace("<img src=\'image/location/chaussure.gif\'align=\'middle\'>","chaussure",$article) ;}
	 
if(preg_match('`iscone-casque`',$article)){
	 $idarticle=str_replace("<img src=\'image/location/iscone-casque.gif\'align=\'middle\'>","casque",$article) ;}
   
$message .="".stripslashes(ucfirst(str_replace("é","e",$idarticle)))."\n";

Posté : 10 déc. 2007, 12:38
par Ryle
Le problème ne viendrait-il pas de "iscone" ?

Sinon quitte à faire un str_replace() après ton preg_match(), autant faire directement un preg_replace() :)

Et puis, cela évitera aussi que si les deux sont renseigné, ta variable $idarticle ne contienne que la seconde modif. Dans ton code, si le second if() est vrai, alors $idarticle est écrasé par le replace, sans se soucier de savoir si une valeur avait déjà été affectée par le premier if() puisque ton remplacement se fait de nouveau sur $article et pas sur $idarticle :)

Enfin, dans une chaine délimitée par des guillemets, il n'est pas utile de protéger tes apostrophes d'un antislash. Ca allourdit ton code inutillement :)

Posté : 10 déc. 2007, 18:31
par Hywan
Enfin, dans une chaine délimitée par des guillemets, il n'est pas utile de protéger tes apostrophes d'un antislash. Ca allourdit ton code inutillement :)
Tu as raison, il devrait directement mettre des simples quotes, au lieu de ces doubles quotes pas beau (ouh qu'ils sont vilains). Pour une raison simple : les doubles quotes sont plus longs à interpréter par PHP que les simples. On ne tient pas compte ici du temps que prend la concaténation, on le néglige car on travaille sur de faibles chaînes de caractères, et que dans ton cas, tu n'utilises pas de concaténations.

Posté : 11 déc. 2007, 11:03
par jobart
Bonjour :D

alors j'ai fait si j'ai bien compris Ryle
while($val=mysql_fetch_array($re))
   {  
	 $article=stripslashes($val['idarticle']);
	$idarticle=preg_replace("<img src='image/location/chaussure.gif'align='middle'>","chaussure",$article) ;
	 $idarticle=preg_replace("<img src='image/location/iscone-casque.gif'align='middle'>","casque",$article) ;
   
$message .="".ucfirst(str_replace("é","e",$idarticle))."\n";
}

ça me fait <img src='image/location/chaussure.gif'align='middle'>+ <casque> |*()

Posté : 11 déc. 2007, 11:32
par Ryle
Procède par étape.. affiche tes valeurs.. comprends tes résultats... PHP est bête et discipliné, il ne fait que ce que tu lui demandes. A toi de t'assurer que ce que tu lui demandes correspond bien à ce que tu attends de lui :) :
$article=stripslashes($val['idarticle']);
echo $article; // supposons que cela affiche "chaussure et casque"

// remplace la chaine "chaussure" dans la variable $article et stoque le résultat dans $idarticle
$idarticle=preg_replace("<img src='image/location/chaussure.gif'align='middle'>","chaussure",$article) ; 
echo $article; // affiche toujours "chaussure et casque"
echo $idarticle; // affiche "<img src='image/location/chaussure.gif'align='middle'> et casque"

// remplace la chaine "casque" dans la variable $article et stoque le résultat dans $idarticle
$idarticle=preg_replace("<img src='image/location/iscone-casque.gif'align='middle'>","casque",$article) ; 
echo $article; // affiche toujours "chaussure et casque"
echo $idarticle; // affiche "chaussure et <img src='image/location/iscone-casque.gif'align='middle'>"
Si à chaque fois tu fais le remplacement dans $article et que tu écrases la valeur de $idarticle, tu ne pourras jamais avoir de résultat contenant les deux.
// récupère $article
$article=stripslashes($val['idarticle']); 
// remplace dans la chaine $article et met à jour la chaine $article
$article=preg_replace("<img src='image/location/chaussure.gif'align='middle'>","chaussure",$article) ; 
// remplace dans la chaine $article et met à jour la chaine $article
$article=preg_replace("<img src='image/location/iscone-casque.gif'align='middle'>","casque",$article) ; 

$message .="".ucfirst(str_replace("é","e",$article))."\n";

Posté : 11 déc. 2007, 16:51
par jobart
merci j'avais pas vu que tu m'avais donné la réponse :oops:

=D> =D> c'est que ça chauffe #-o la dedans :lol: :lol: