fonction str_replace pas selective

Eléphant du PHP | 62 Messages

28 mars 2012, 22:01

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 :) :) :)

ViPHP
ViPHP | 2287 Messages

29 mars 2012, 00:22

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...
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 62 Messages

29 mars 2012, 07:22

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 } ?>

ViPHP
xTG
ViPHP | 7331 Messages

29 mars 2012, 09:41

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.

Mammouth du PHP | 2278 Messages

29 mars 2012, 10:09

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...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 62 Messages

29 mars 2012, 20:57

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 . :? :? :?

ViPHP
xTG
ViPHP | 7331 Messages

29 mars 2012, 20:59

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 } ?>

Eléphant du PHP | 62 Messages

29 mars 2012, 21:28

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:

ViPHP
xTG
ViPHP | 7331 Messages

30 mars 2012, 07:02

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:

Mammouth du PHP | 2278 Messages

30 mars 2012, 08:19

//$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'];
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Eléphant du PHP | 62 Messages

31 mars 2012, 21:12

Bonsoir , ben non cela ne marche toujours pas . :( :( :(

ViPHP
xTG
ViPHP | 7331 Messages

31 mars 2012, 21:53

Quel est le code modifié ?
Et quel est le code généré par le navigateur ?

Eléphant du PHP | 62 Messages

31 mars 2012, 22:31

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.

Eléphant du PHP | 62 Messages

09 avr. 2012, 10:45

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:

Eléphant du PHP | 62 Messages

10 avr. 2012, 22:17

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 .