[PHP] Problème avec script


link182
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 474
Inscription: 26 Juil 2005

[PHP] Problème avec script

Message le Mar Nov 07, 2006 9:10

Bonjour à tous,

je suis en train de faire un forum pour mon site, et j'ai inclu des citations de ce style la :

[.quote="nico"]Ceci est un petit test[/quote.]

et j'aimerais bien le transformer via php en çà :

<div style='...'><span style='...'>nico :</span>
Ceci est un petit test
</div>

Mais je n'arrive à extraire l'auteur (nico) et le message ("ceci est un petit test") de la chaine...

Merci du coup de pouce :roll:
Dernière édition par link182 le Mar Nov 07, 2006 9:29, édité 1 fois.


Bacteries
WRInaute passionné
WRInaute passionné
 
Messages: 1369
Inscription: 27 Mai 2004

Message le Mar Nov 07, 2006 9:16

Tes données sont enregistrée comment à la base? Sous un format phpbb?


link182
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 474
Inscription: 26 Juil 2005

Message le Mar Nov 07, 2006 9:20

Je ne sais pas, jamais utiliser PhpBB.
le message est enregistré comme ceci :

mysql_real_escape_string($_POST['message']);

oxman
WRInaute discret
WRInaute discret
 
Messages: 118
Inscription: 21 Juin 2004

Message le Mar Nov 07, 2006 9:34

Code: Tout sélectionner
$tonmessage = '[quote="nico"]Ceci est un petit test[/quote]';
ereg("\[quote=\"([^\"]+)\"\](.+)\[/quote\]$", $tonmessage, $args);
$args[1] == "nico"
$args[2] == "Ceci est un petit test"


Si je n'ai pas fait d'erreur ;)


Leonick
WRInaute accro
WRInaute accro
 
Messages: 19595
Inscription: 8 Aoû 2004

Message le Mar Nov 07, 2006 9:51

quoique, pour récupérer le contenu, ne faut-il pas
Code: Tout sélectionner
([^\[]+)
au lieu de
Code: Tout sélectionner
(.+)
pour éviter, en cas de multiples citations, qu'il ne prenne tout le texte entre le premier
et le dernier
?


link182
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 474
Inscription: 26 Juil 2005

Message le Mar Nov 07, 2006 9:52

Merci à toi oxman cela marche, mais seulement si on ne rajoute pas de texte après [/quote] (avant [quote]pas de problème).

oxman
WRInaute discret
WRInaute discret
 
Messages: 118
Inscription: 21 Juin 2004

Message le Mar Nov 07, 2006 9:53

J'ai pensé qu'il n'y avait qu'une quote, et que c'était dans une colonne spéciale ou tu stockais le quote.

Sinon j'aurais fait comme Leonick le précise, ce qui donne :
Code: Tout sélectionner
ereg("\[quote=\"([^\"]+)\"\]([^\[]+)\[/quote\]", $tonmessage, $args);
Dernière édition par oxman le Mar Nov 07, 2006 10:27, édité 1 fois.


link182
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 474
Inscription: 26 Juil 2005

Message le Mar Nov 07, 2006 10:26

Merci, cela marche, mais je ne sais pas si la façon dont j'implémente mes citations est correcte.

Dans ma BD, je stocke tous dans un seul champ, je ne sépare donc pas le message et les citations. D'ailleurs, je crois que je ne pourrais pas faire de citations imbriquées ?


Et encore un chtite question (j'aime pô les regexp !) : comment remplacer mes quotes par mon div fraichement créé (je n'arrive pas à delimiter les balises QUOTE) ?

Code: Tout sélectionner

functon replace_quote($str)
{
   ereg("\[quote=\"([^\"]+)\"\]([^\[]+)\[/quote\]", $str, $args);
   $new_div = "<div>".args[1]." a dit :<br />".$args[2]."</div>";   
   
   $str = str_replace(...) // Comment remplacer les balises QUOTES ?

   return $str;
}


oxman
WRInaute discret
WRInaute discret
 
Messages: 118
Inscription: 21 Juin 2004

Message le Mar Nov 07, 2006 10:30

Non ta façon est correcte, mais j'ai vu quelques trucs farfelus sur le forum, alors je me suis dit que j'étais peut-être en train d'en voir une de plus =')

Je ne comprends pas ta question, ni ce que tu as besoin de remplacer.
Tu as déjà ton message (de la quote) supprimé de toutes balises. Donc tu peux faire ensuite <quote>$message_du_quote</quote> par exemple.


link182
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 474
Inscription: 26 Juil 2005

Message le Mar Nov 07, 2006 10:42

Il faut bien remplacer quelque part dans la string les balises QUOTES par des DIV (pour avoir une bordure et un style particulier, comme sur le forum PhpBB par exemple)

Le regexp que tu m'a donné me permets jsute d'extraire l'auteur et le message de la quote (dans le tableau $arg). Ensuite je dois normalement remplacer toutes la quote par mon div formaté (avec l'auteur et le texte) pour qu'il puisse être affiché...et ça je sais pas faire. j'espère être clair lol

oxman
WRInaute discret
WRInaute discret
 
Messages: 118
Inscription: 21 Juin 2004

Message le Mar Nov 07, 2006 10:47

Ah oué donc en fait ce que tu as demandé au début ne te sert à rien :p

C'est donc pour ça que je pensais que tu gérais tes quotes différemment.

Pour info la doc php donne :
Code: Tout sélectionner
echo $bodytag = str_replace("%body%", "black", "<body text='%body%'>");


Transposé à toi ça donne quelque chose du genre (pour une partie du replace) :
Code: Tout sélectionner
$msg = str_replace("[quote]", "<span style=\"bidule\">", $msg);
$msg = str_replace("[/quote]", "</span>", $msg);


link182
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 474
Inscription: 26 Juil 2005

Message le Mar Nov 07, 2006 11:04

Oui, c'est cela qu'il me fallait, merci.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité