8797 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai un champs de texte "postcontent" et une fonction ci-dessous.
Je souhaite que $a et $b entoure seulement 1234 ou abcd et pas tout le "post content".

Car par exemple, si j'écris dans mon champs de texte : <je m'appelle 1234>,
je vais avoir ça comme résultat: <111je m'appelle 1234222>
Hors moi je voudrais ceci comme résultat : <je m'appelle 1111234222>

Et voir (encore mieux), ceci comme résultat si j'écris:
<Je suis 1234 et abcd>
Résultat: <Je suis 1111234222 et aaaabcdbbb>


Une idée ?

<code>if(strstr($postcontent, '1234'))
{
$a = '111';
$b = '222';
}
elseif(strstr($postcontent, 'abcd'))
{
$a = 'aaa';
$b = 'bbb';
}
else
{
$content = "";
}

$content = "$a$postcontent$b"; </code>


Merci !!
Je n'ai pas vraiment compris ce que tu cherchais à faire, mais à priori tu dois te diriger vers preg_replace ou str_replace.

$post = str_replace('1234','1111234222',$post);
$post = str_replace('abcd','aaaabcdbbb',$post);


Ce bout de code donnera le résultat que tu cherches.
Merci pour ta réponse !

Je vais mieux m'expliquer:

J'ai un textarea (à plusieurs colonnes et lignes). Dans ce textarea, je mets du texte (le texte n'est jamais le même mais contiendra montpellier et morgane par exemple).

Hors je souhaite qu'en inscrivant dans ce textarea ce qui suit :
<début textarea>
bonjour, je vais à montpellier mais je pense à morgane
<fin textarea>

cela devienne:

bonjour, je vais à 111montpellier222 mais je pense à aaamorganebbb

D'où la fonction suivante. Sauf que du moment qu'il y a le mot "montpellier" dans la phrase (dans le textarea), il va appliquer le premier "strstr" à toute la phrase (textarea)

if(strstr($postcontent, 'montpellier'))
{
$a = '111';
$b = '222';
}
elseif(strstr($postcontent, 'morgane'))
{
$a = 'aaa';
$b = 'bbb';
}
else
{
$content = "";
}

$content = "$a$postcontent$b";


J'avoue que ma première fonction n'était pas très explicite.

Merci de ton aide !
Ok, je comprends bien pourquoi tu m'as donné cette fonction.
Je ne me suis pas bien exprimé encore une fois.

Car en fait le 1234 peut être suivi d'un mot ou chiffre qui doivent être également pris dans 111 et 222.
Est-ce qu'il est possible de définir une fonction comme ce qui suit ?

Si 1234 est présent dans le texte area alors prendre toute la phrase tant qu'il n'y a pas d'espace ?
Par exemple: 1234/maphrasesansespace
deviendra: 1111234/maphrasesansespace222
sachant que maphrasesansespace n'est pas défini, elle sera différente à chaque fois.

Par contre, il ne faut pas qu'il prenne tout le textarea car il y aura d'autre 1234 ou abcd

Merci de ton aide !
Bonjour Matidou34,

As-tu pensé à la fonction explode: en utilisant l'espace comme caractère séparateur, tu obtiens un array, puis tu boucles dessus pour vérifier la présence de ta chaine clé et tu remplaces l'élément de ton array par 111+ton array[n]+222

par exemple:

$chaine = 'bonjour, je vais à montpellier mais je pense à morgane';
$tableau = explode(" ",$chaine);
while($i < count($tableau)){
   if(strstr($tableau[i], 'montpellier')){
      $tableau[i] = '111' & $tableau[i] & '222';
   }
}

ou quelque-chose comme ça

[/i][/i][/i]
Merci pour votre réponse.
Je pense que c'est ça. Par contre, je pense qu'il y a une erreur dans le code car la page ne charge pas.

Si j'ai bien compris:

Je peux adapter votre fonction de cette façon: (sachant que $postcontent est mon formulaire)
$chaine = "$postcontent";
$tableau = explode(" ",$chaine);
while($i < count($tableau)){
if(strstr($tableau, 'montpellier')){
$tableau = '111' & $tableau[i] & '222';
}
}

Je fais une erreur quelque part ?
[/i]
Salut,

j'ai compris l'idée de sylvain pour l'explode
mais les & comme "concaténateur" ça me laisse perplexe. erreur ou astuce d'utilisation des "et binaire"?

sinon boucle infini puisque $i n'est pas incrémenté.

une correction du code

$chaine = $postcontent;
$tableau = explode(" ",$chaine);
$i = 0;
while($i < count($tableau)){
  if(strstr($tableau[$i], '1234')){
    $tableau[$i] = '111' .$tableau[$i] . '222';
  }
    $i++;
 }

 $chaine= implode($tableau," ");


sinon j'aimais bcp l'idée d'utiliser preg_replace.

je pense que ceci fait comme le code ci-dessus

$chaine = preg_replace ('!\S*1234\S*!','111${0}222',$chaine);

(\S signifie tous sauf des trucs comme l'espace mais aussi la tabulation des machins
comme ça.. c'est l'inverse \s )

et devient

$chaine = preg_replace ('!\S*1234\S*!','111${0}222',$chaine,1);
si tu veux remplacé qu'une fois.

ensuite pour faire
$chaine = preg_replace ('!\S*1234\S*!','111${0}222',$chaine,1);
$chaine = preg_replace ('!\S*abcd\S*!','aaa${0}bbb',$chaine,1);


y a peut-être un soucis sur un nom qui contiendrait et 1234 et abcd collé...



Pascal
Modifié par CPascal (03 Nov 2011 - 00:23)
@CPascal
a écrit :
erreur ou astuce d'utilisation des "et binaire"?

Pardon, il s'agit d'une erreur. Ca fait 3 ans que je ne fais plus de php.