Page 1 sur 2

fonction str_replace pas selective

Posté : 28 mars 2012, 22:01
par ifate
Bonsoir a tous.Voila j'ai un petit problème avec la fonction str_replace : je veux changer la liste sortie d'une BDD ( echo $liste['cm']; ) qui est une suite de " oui " et de " non ". Je veux changer les " oui " en " yes " mais comme il y a des " non " dans cette liste la fonction str_replace me mets des " yes " même a la place des " non " . Donc ce que je voudrais c'est que la fonction ignore les " non " et remplace les " oui " par des " yes ".
voici la formule que j'ai mis :

<td width="50"><?php
$liste['cm']= 'oui';
$liste['cm']= str_replace('oui' ,'yes ',$liste['cm']);
echo $liste['cm'];
?>
</td>

merci a vous :) :) :)

Re: fonction str_replace pas selective

Posté : 29 mars 2012, 00:22
par Calimero
Bonjour,

Ton problème n'a rien à voir avec le code que tu nous présentes, qui ne contient aucun "non" :)

Mais en tout cas, str_replace ne fait que ce qu'on lui dit de faire : si tu lui dis de remplacer "oui", il n'y a aucune chance qu'il aille s'occuper d'un "non". Peut-être que ton problème se trouve ailleurs...

Re: fonction str_replace pas selective

Posté : 29 mars 2012, 07:22
par ifate
Bonjour . La liste de " oui " et de " non " sort d'une base de donnée ( array ) et str_replace me remplace tout , " oui " et " non " sans discernement . A moins qu'il ne faille mettre un code pour qu'il ignore les " non " mais la je ne vois pas .
Voici le code complet peut etre comprendra tu mieux :

<?php
while($liste = mysql_fetch_array($requete))

{ ?>
<table width="895">
<tr>
<td width="171"><?php echo $liste['nom'];?></td>
<td width="116"><?php echo $liste['prenom'];?></td>
<td width="44"><?php echo $liste['ne'];?></td>
<td width="30"><?php echo $liste['sexe'];?></td>
<td width="47"><?php echo $liste['pays'];?></td>
<td width= "58"><?php echo $liste['dept'];?></td>
<td width="291"><?php echo $liste['club'];?></td>
<td width="48"><?php echo $liste['paye'];?></td>
<td width="50"><?php
$liste['cm']= 'oui';
$liste['cm']= str_replace('oui' ,'yes ',$liste['cm']);
echo $liste['cm'];
?>
</td>
</tr>
</table>
<?php } ?>

Re: fonction str_replace pas selective

Posté : 29 mars 2012, 09:41
par xTG
Pas non plus de non dans ce code et aucune donnée en provenance de la bdd qui est modifiée hormi $liste['cm'] dont la valeur est écrasée si elle existait.

fonction str_replace fonctionne à merveille

Posté : 29 mars 2012, 10:09
par sirakawa
Halluciné-je?
Non seulement, comme le notent Calimero et xTg, les exemples fournis ne correspondent pas à la question, mais la fonction fonctionne parfaitement et le bout d'exemple produit donne aussi le résultat attendu.
Elle est tellement sélective que
<?PHP
   $origine = "Oui, je l'aime, Seigneur. Non, je ne vous dirai pas 'oui' lorsque je pense 'non'";
   $cible = str_replace ("oui", "yes", $origine);
   print "$origine <br />devient <br />$cible";
?>
sort, à juste titre, ceci:
Oui, je l'aime, Seigneur. Non, je ne vous dirai pas 'oui' lorsque je pense 'non'
devient
Oui, je l'aime, Seigneur. Non, je ne vous dirai pas 'yes' lorsque je pense 'non'

et qu'il faut passer par ceci:
<?PHP
$origine = "Oui, je l'aime, Seigneur. Non, je ne vous dirai pas 'oui' lorsque je pense 'non'";
$a_remplacer = array("oui", "Oui");
$remplacants = array("yes", "Yes");
$cible = str_replace ($a_remplacer, $remplacants, $origine);
print "$origine <br />devient <br />$cible";
?>
pour qu'elle remplace les deux Oui et oui, ou utiliser str_ireplace...

Re: fonction str_replace pas selective

Posté : 29 mars 2012, 20:57
par ifate
Bonsoir . J'ai essayé pas mal de solutions mais tout ce qui sort de la table " $liste['cm'] " est transformé en " yes " , les " oui " comme les " non ". Je continu a chercher . Merci tout de même . :? :? :?

Re: fonction str_replace pas selective

Posté : 29 mars 2012, 20:59
par xTG
Si c'est le code fourni plus haut (ou voir plus bas) c'est normal vu que comme je te l'ai expliqué tu écrases la valeur de la variable...
Donc il y a toujours la même valeur dedans ! La valeur "oui".
<?php
while($liste = mysql_fetch_array($requete))

{ ?>
<table width="895">
<tr>
<td width="171"><?php echo $liste['nom'];?></td>
<td width="116"><?php echo $liste['prenom'];?></td>
<td width="44"><?php echo $liste['ne'];?></td>
<td width="30"><?php echo $liste['sexe'];?></td>
<td width="47"><?php echo $liste['pays'];?></td>
<td width= "58"><?php echo $liste['dept'];?></td>
<td width="291"><?php echo $liste['club'];?></td>
<td width="48"><?php echo $liste['paye'];?></td>
<td width="50"><?php
$liste['cm']= 'oui'; // BOUUUUUUUUUH !
$liste['cm']= str_replace('oui' ,'yes ',$liste['cm']);
echo $liste['cm'];
?>
</td>
</tr>
</table>
<?php } ?>

Re: fonction str_replace pas selective

Posté : 29 mars 2012, 21:28
par ifate
Oui c'est vrai tu as raison j'y avais pensé par la suite , j'ai donc fait quelques modifications mais je ne trouve toujours pas , je ne dois pas être assez futé , t'aurais pas une idée ? :wink: :wink:

Re: fonction str_replace pas selective

Posté : 30 mars 2012, 07:02
par xTG
Bah si le champ cm provient bien de la BDD dans ce cas il faut supprimer cette ligne...
A moins que tu lui trouves un intérêt ? :roll:

Re: fonction str_replace pas selective

Posté : 30 mars 2012, 08:19
par sirakawa
//$liste['cm']= 'oui'; BOUUUUUUUUUH ! ça remplace tout ce qui était dans le champ 'cm' du tableau liste par le mot "oui"
$liste['cm']= str_replace('oui' ,'yes ',$liste['cm']);
echo $liste['cm'];

Re: fonction str_replace pas selective

Posté : 31 mars 2012, 21:12
par ifate
Bonsoir , ben non cela ne marche toujours pas . :( :( :(

Re: fonction str_replace pas selective

Posté : 31 mars 2012, 21:53
par xTG
Quel est le code modifié ?
Et quel est le code généré par le navigateur ?

Re: fonction str_replace pas selective

Posté : 31 mars 2012, 22:31
par ifate
En fait j'ai supprimé la ligne qui posait problème ( $liste['cm']= 'oui'; ) et je n'ai rien mis a la place , donc cela ne peut marcher . De plus echo $liste['cm']; m'affiche la liste sous ma liste de nom mais ça ce n'est pas important pour le moment , le plus important est la fonction str_replace . mais la je cale j'ai pourtant essayé plusieurs possibilités , je ne suis pas encore assez bon cela ne fait aucun doute. :( :( :( :( j’arrête pour ce soir je m'y remettrais demain . bonne soirée et merci encore.

Re: fonction str_replace pas selective

Posté : 09 avr. 2012, 10:45
par ifate
Bonjour ; Finalement en me creusant un peu les méninges #-o j'ai trouvé une formule pas mal que voici :

<td width ="36"><?php $liste=$liste['paye'];$liste=str_replace('oui','yes',$liste);echo $liste['paye'];?></td>

Mais bon petit souci le ' oui ' n'est remplacé que par une seule lettre qui est le ' y ' :?: . Comment cela se fait il ? avez vous une suggestion ? merci et joyeuses Pâques :lol: :lol: :lol:

Re: fonction str_replace pas selective

Posté : 10 avr. 2012, 22:17
par ifate
Bonsoir. Finalement j'ai trouvé la solution :
<td width ="36"><?php $liste['paye']=str_replace('oui','yes',$liste['paye']);echo $liste['paye'];?></td>

Bon ben voila il suffisait de reflechir un peu : :^o :^o
par contre je voudrais que le ' yes ' sorte en couleur verte et la je ne trouve pas .Avez vous une piste ou pouvez vous me mettre sur une piste svp ? merci .