Problème avec BB-code et smileys

Répondre
fran6
le 17/04/2009 à 15:46
fran6
Bonjour,

Avec le livre d'or de lephpfacile, j'ai réussi à ajouter un système de BB-code et smileys.
Cependant lorsque je veux changer le BB-code et le code du smileys en images j'ai un problème.

La page affiche l'erreur suivante :
Fatal error: Cannot redeclare bbcode() (previously declared in C:\wamp\www\site_1\fr\livre_dor\index.php:438) in C:\wamp\www\site_1\fr\livre_dor\index.php on line 438

A signaler que j'ai déjà suivi le forum sur ce problème http://www.lephpfacile.com/forum/1-php-mysql/132-systeme-de-smileys-ds-news.

J'ai deux questions :
1/ Où faut-il mettre la fonction bbcode. Est-ce toujours à la 4e place comme le dit le forum:
1) preparation de la requete SQL ($sql = 'select ....')
2) execution de cette requette ($req = mysql_query($sql))
3) recuperation des donnees (while ($data = mysql_fetch_array($req)) {)
4) affichage des données (echo $news)

Alors pour afficher tes smiley, entre l'etape 3 et l'etape 4 il faut utiliser la fonction str_replace.

Si oui; càd j'ai mis le code au bon endroit.
Est-ce qu'il y a un problème avec la fonction bbcode ?? Lequel ??? Pouvez-vous m'aider s'il vous plaît ???
Voici le code du livre d'or:
<?php

// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', 'mypass');
mysql_select_db ('mybdd', $base);

// on prépare une requête permettant de calculer le nombre total d'éléments qu'il faudra afficher sur nos différentes pages
$sql = 'SELECT count(*) FROM livre_or';

// on exécute cette requête
$resultat = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on récupère le nombre d'éléments à afficher
$nb_total = mysql_fetch_array($resultat);

// on teste si ce nombre de vaut pas 0
if (($nb_total = $nb_total[0]) == 0) {
echo 'Aucune réponse trouvée';
}
else {
echo '<div class="message">';

// sinon, on regarde si la variable $debut (le x de notre LIMIT) n'a pas déjà été déclarée, et dans ce cas, on l'initialise à 0
if (!isset($_GET['debut'])) $_GET['debut'] = 0;

$nb_affichage_par_page = 5;

// Préparation de la requête avec le LIMIT
$sql = 'SELECT * FROM livre_or ORDER BY id DESC LIMIT '.$_GET['debut'].','.$nb_affichage_par_page;

// on exécute la requête
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());

// on va scanner tous les tuples un par un
while ($data = mysql_fetch_array($req)) {

// on affiches les résultats dans la <table>
echo '<div class="en-tete_message"><table border="1"><tr><td width="250"><p class="titre_message">Par : ' , htmlentities(trim($data['name'])) , '</p></td><td width="233"><p class="titre_message">Le : ' , htmlentities(trim($data['date'])) , '</p></td><td width="100"><p class="titre_message">Note : ' , htmlentities(trim($data['note'])) , '/10</p></td></tr></table></div>
<div class="corps_message"><table border="1" width="583"><tr><td><p class="texte_message">' , htmlentities(trim($data['message'])) , '</p></td></tr></table></div><br /><br />';
}

// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
echo '</div><br /><br />';

// on affiche enfin notre barre
echo '<div class="nbr_pages">'.barre_navigation($nb_total, $nb_affichage_par_page, $_GET['debut'], 3).'</div>';
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultat);
// on ferme la connexion à la base de données.
mysql_close ();
echo '</table><br />';
?>


Voici également le bb-code:
<?php

function bbcode($text)
{
$text = nl2br($text);

$text = str_replace("[b]", "<strong>", $text);
$text = str_replace("[/b]", "</strong>", $text);

$text = str_replace("[u]", "<u>", $text);
$text = str_replace("[/u]", "</u>", $text);

$text = str_replace("[i]", "<em>", $text);
$text = str_replace("[/i]", "</em>", $text);

$text = str_replace("[center]", "<center>", $text);
$text = str_replace("[/center]", "</center>", $text);

$text = str_replace(" ", "&nbsp;&nbsp;", $text);

$text = str_replace('}()','<img src="images/smileys/smiley1ani.gif" alt="" style="border:0"/>',$text);
$text = str_replace('8o','<img src="images/smileys/smiley2ani.gif" alt="" style="border:0"/>',$text);
$text = str_replace(':D','<img src="images/smileys/smiley3ani.gif" alt="" style="border:0"/>',$text);
$text = str_replace(':))','<img src="images/smileys/smiley4ani.gif" alt="" style="border:0"/>',$text);
$text = str_replace('z|','<img src="images/smileys/smiley5ani.gif" alt="" style="border:0"/>',$text);
$text = str_replace(':(','<img src="images/smileys/smiley6ani.gif" alt="" style="border:0"/>',$text);
$text = str_replace(';)','<img src="images/smileys/smiley7ani.gif" alt="" style="border:0"/>',$text);
$text = str_replace('8|','<img src="images/smileys/smiley9ani.gif" alt="" style="border:0"/>',$text);
$patterns = array();
$replacements = array();

$patterns[] = "#\[img\](.*?)\[/img\]#si";
$replacements[] = "<img src=\"\\1\" border=\"0\" />";

$patterns[] = "#\[url\]([a-z0-9]+?://){1}([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\[/url\]#is";
$replacements[] = "<a href=\"\1\2\" target=\"_blank\" class=\"postlink\">\1\2</a>";

$patterns[] = "#\[url\]((www|ftp)\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*?)?)\[/url\]#si";
$replacements[] = "<a href=\"http://\\1\" target=\"_blank\" class=\"postlink\">\\1</a>";

$patterns[] = "#\[url=([a-z0-9]+://)([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*?)?)\](.*?)\[/url\]#si";
$replacements[] = "<a href=\"\\1\\2\">\\6</a>";

$patterns[] = "#\[url=(([\w\-]+\.)*?[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\](.*?)\[/url\]#si";
$replacements[] = "<a href=\"http://\\1\">\\5</a>";

$patterns[] = "#\[email\]([a-z0-9\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\[/email\]#si";
$replacements[] = "<a href=\"mailto:\\1\">\\1</A>";

return preg_replace($patterns, $replacements, $text);
}

echo bbcode($truc);
?>


J'attends votre aide.
fran6
le 17/04/2009 à 15:48
fran6
J'ai déjà mis la fonction bbcode avant la 4e étape echo et il affiche une erreur. Si je met un peu plus bas càd après echo il ne fait rien. Où est l'erreur ???
LA GLOBULE
le 17/04/2009 à 15:50
LA GLOBULE
Fatal error: Cannot redeclare bbcode()


A priori, tu fais plusieurs fois un include du fichier contenant la fonction.

Corrige le problème (en ne faisant qu'un seul include), ou bien utiliser include_once.
LA GLOBULE
le 17/04/2009 à 15:54
LA GLOBULE
Ah oui aussi, je ne vois pas où est ce que tu utilises la fonction bbcode().

Tu ne ferais pas par hasard un include du fichier en espérant que le BB-Code se fasse ?

En fait, tu dois inclure le fichier une fois avant le while, puis, quand tu affiches tes données, tu dois utiliser la fonction sur le texte que tu veux "bbcode'ifier".
fran6
le 20/04/2009 à 09:21
fran6
Une chose est claire: Je dois mettre la fonction avant le WHILE.

Mais La Globule, peux-tu m'aider à utiliser la fonction sur le texte que je veux "bbcode'ifier" ??? Je suis perdu là.
fran6
le 20/04/2009 à 09:24
fran6
Je n'ai même pas utilisé include ; j'ai juste mis cette fonction après while. Et là il a fait une erreur.
Quelqu'un peut m'aider là.
fran6
le 20/04/2009 à 09:26
fran6
Même déconnecté, je suis toujours là. Il me faut cette réponse pour faire fonctionner mon livre d'or avec smileys et BB-code
fran6
le 20/04/2009 à 09:47
fran6
En fait j'ai déjà remplacé $texte par $data mais ça ne marche toujours pas.

<?php

function bbcode($data)
{
$data = nl2br($data);

$data = str_replace("[b]", "<strong>", $data);
$data = str_replace("[/b]", "</strong>", $data);

$data = str_replace("[u]", "<u>", $data);
$data = str_replace("[/u]", "</u>", $data);

$data = str_replace("[i]", "<em>", $data);
$data = str_replace("[/i]", "</em>", $data);

$data = str_replace("[center]", "<center>", $data);
$data = str_replace("[/center]", "</center>", $data);

$data = str_replace(" ", "&nbsp;&nbsp;", $data);

$data = str_replace('}()','<img src="images/smileys/smiley1ani.gif" alt="" style="border:0"/>',$data);
$data = str_replace('8o','<img src="images/smileys/smiley2ani.gif" alt="" style="border:0"/>',$data);
$data = str_replace(':D','<img src="images/smileys/smiley3ani.gif" alt="" style="border:0"/>',$data);
$data = str_replace(':))','<img src="images/smileys/smiley4ani.gif" alt="" style="border:0"/>',$data);
$data = str_replace('z|','<img src="images/smileys/smiley5ani.gif" alt="" style="border:0"/>',$data);
$data = str_replace(':(','<img src="images/smileys/smiley6ani.gif" alt="" style="border:0"/>',$data);
$data = str_replace(';)','<img src="images/smileys/smiley7ani.gif" alt="" style="border:0"/>',$data);
$data = str_replace('8|','<img src="images/smileys/smiley9ani.gif" alt="" style="border:0"/>',$data);
$patterns = array();
$replacements = array();

$patterns[] = "#\[img\](.*?)\[/img\]#si";
$replacements[] = "<img src=\"\\1\" border=\"0\" />";

$patterns[] = "#\[url\]([a-z0-9]+?://){1}([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\[/url\]#is";
$replacements[] = "<a href=\"\1\2\" target=\"_blank\" class=\"postlink\">\1\2</a>";

$patterns[] = "#\[url\]((www|ftp)\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*?)?)\[/url\]#si";
$replacements[] = "<a href=\"http://\\1\" target=\"_blank\" class=\"postlink\">\\1</a>";

$patterns[] = "#\[url=([a-z0-9]+://)([\w\-]+\.([\w\-]+\.)*[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*?)?)\](.*?)\[/url\]#si";
$replacements[] = "<a href=\"\\1\\2\">\\6</a>";

$patterns[] = "#\[url=(([\w\-]+\.)*?[\w]+(:[0-9]+)?(/[^ \"\n\r\t<]*)?)\](.*?)\[/url\]#si";
$replacements[] = "<a href=\"http://\\1\">\\5</a>";

$patterns[] = "#\[email\]([a-z0-9\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\[/email\]#si";
$replacements[] = "<a href=\"mailto:\\1\">\\1</A>";

return preg_replace($patterns, $replacements, $data);
}

echo bbcode($truc);
?>
LA GLOBULE
le 20/04/2009 à 10:34
LA GLOBULE
Cela ne sert à rien de renommer des variables de la fonction.

L'erreur dis que tu as déjà inclus la fonction plus haut dans ton code.
Donc regarde ton code, et vire les trucs foireux.

La fonction, tu dois l'inclure (ou la copier coller dans le code) une seule fois, avant le while, et tu dois l'utiliser sur ton texte dans le while.
Répondre
LoadingChargement en cours