Bonjour,
Je poste ce thread car pour mon site web perso j'ai décidé de mettre en place une forme de BBCode afin de mettre en forme les articles que tout membre inscrit à mon site web peut poster.
Voilà les fichiers qui me servent à rédiger un article (en tant que membre connecté), le stocker dans la base de données et l'afficher dans la section que le membre connecté a sélectionné :
- ecrire_article.php
- article_traitement.php
- php/connexion_bdd.php
- php/fonctions_caracteres_speciaux.php
- php/affichage_articles.php
php/connexion_bdd.php
php/fonctions_caracteres_speciaux.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?php function connexionBdd() { try { $bdd = new PDO('mysql:host=localhost;dbname=ma_base', 'root', ''); return $bdd; } catch(Exception $e) { die('Erreur : '.$e->getMessage()); } } ?>
php/affichage_articles.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 <?php function securiserContenu($contenuArticle) { $contenuSecurise = stripslashes($contenuArticle); $contenuSecurise = htmlspecialchars($contenuArticle); $contenuSecurise = nl2br($contenuArticle); return $contenuSecurise; } function miseEnForme($contenuArticle) { $misEnForme = preg_replace('#\[soulign\](.+)\[/soulign\]#isU', '<span style="text-decoration:underline">$1</span>', $contenuArticle); $misEnForme = preg_replace('#\[gras\](.+)\[/gras\]#isU', '<span style="font-weight:bold">$1</span>', $contenuArticle); $misEnForme = preg_replace('#\[it\](.+)\[/it\]#isU', '<span style="font-style:italic">$1</span>', $contenuArticle); return $misEnForme; } ?>
ecrire_article.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 <?php require_once('connexion_bdd.php'); require_once('fonctions_caracteres_speciaux.php'); function afficherArticles($section) { $bdd = connexionBdd(); $req = $bdd->prepare("SELECT id, nomMembre, prenomMembre, titre, dateParution, contenu, dateParution, section FROM articles WHERE section=? ORDER BY id DESC"); $req->execute(array($section)); while($datas = $req->fetch()) { $datas['contenu'] = miseEnForme($datas['contenu']); ?> <article class="article"> <p class="titre_article"><strong><?php echo $datas['titre']; ?></strong></p> <?php echo '<span class="contenu_article">'.$datas['contenu'].'</span>'; ?> <p class="infos_article">Publié le <?php echo $datas['dateParution']; ?>, par <?php echo $datas['prenomMembre'].' '.$datas['nomMembre']; ?></p> </article> <hr /> <?php } $req->closeCursor(); } ?>
article_traitement.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 <?php require_once('debut_page.php'); ?> <section> <!-- Texte du formulaire --> <form method="post" action="article_traitement.php" class="articles"> <p> <label for="titre_article">Titre de l'article <em>(obligatoire)</em></label> <input type="text" name="titre_article" id="titre_article" size="65"><br /> <label for="contenu_article">Contenu de l'article <em>(obligatoire)</em></label> <br /> <textarea name="contenu_article" id="contenu_article" rows="15" cols="115"></textarea> <br /> <label for="publier_dans">Publier dans <em>(obligatoire)</em>... </label> <br /> <select name="publier_dans" id="publier_dans"> <option value="accueil">Accueil</option> <optgroup label="Actualités"> <option value="evenements">Evénements</option> </optgroup> <optgroup label="Historique"> <option value="actions_menees">Actions menées</option> <option value="dates_reperes">Quelques dates repères</option> </optgroup> <optgroup label="Articles thématiques"> <option value="culture">Culture</option> <option value="economie">Economie</option> <option value="education">Education</option> ... </optgroup> </select> <input type="submit" value="Publier !" /> </p> </form> </section> <?php require_once('fin_page.php'); ?>
Voici une des pages censées afficher mes articles, par thème (index.php)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 <?php require_once('debut_page.php'); require_once('php/connexion_bdd.php'); require_once('php/fonctions_caracteres_speciaux.php'); ?> <section> <?php $titreArticle = $_POST['titre_article']; $contenuArticle = $_POST['contenu_article']; $publierDans = $_POST['publier_dans']; if(!isset($titreArticle) || !isset($contenuArticle) || !isset($publierDans)) { ?> <p>Texte d'erreur</p> <?php } else { $bdd = connexionBdd(); $contenuArticle = securiserContenu($contenuArticle); // ... $dateActuelle = date('d/m/Y, H:i'); $req = $bdd->prepare('INSERT INTO articles (idMembre, nomMembre, prenomMembre, titre, contenu, dateParution, section) VALUES (:a, :b, :c, :d, :e, :f, :g)') or die(print_r($req->errorInfo())); $req->execute(array('a' => $_SESSION['id'], 'b' => $_SESSION['nom'], 'c' => $_SESSION['prenom'], 'd' => $titreArticle, 'e' => $contenuArticle, 'f' => $dateActuelle, 'g' => $publierDans)); $req->closeCursor(); } ?> </section> <?php require_once('fin_page.php'); ?>
Voilà. Concrètement, le problème que j'ai est que le BBCode n'est transformé que sur la dernière ligne en HTML. (les balises comme [gras], [soulign]... restent telles qu'elles)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <?php include ("debut_page.php"); require_once('php/fonctions_caracteres_speciaux.php'); require_once('php/affichage_articles.php'); ?> <section> <!-- Contenu --> <?php afficherArticles('accueil'); ?> </section> <?php include ("fin_page.php"); ?>
Auriez-vous des pistes pour m'aider à résoudre ce problème ? En tout cas pour moi ça n'a pas été évident jusqu'ici, je pense que le nombre de fichiers que j'ai utilisés et l'utilisation d'une BDD compliquent les choses. En tout cas, merci d'avance !
Partager