aide sur preg_match

Eléphant du PHP | 76 Messages

08 déc. 2007, 15:46

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";

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 déc. 2007, 12:38

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 4674 Messages

10 déc. 2007, 18:31

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.
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 76 Messages

11 déc. 2007, 11:03

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> |*()

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 déc. 2007, 11:32

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";
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 76 Messages

11 déc. 2007, 16:51

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: