Capture et remplacement ne se font pas sur plusieurs lignes
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
Code:
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/fonctions_caracteres_speciaux.php
Code:
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;
}
?> |
php/affichage_articles.php
Code:
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();
}
?> |
ecrire_article.php
Code:
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');
?> |
article_traitement.php
Code:
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');
?> |
Voici une des pages censées afficher mes articles, par thème (index.php)
Code:
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"); ?> |
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)
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 ! :)