Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2012
    Messages : 8
    Points : 0
    Points
    0

    Par défaut 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 !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : avril 2009
    Messages : 19
    Points : 24
    Points
    24

    Par défaut

    ça ne sert à rien de donner le code de tous les fichiers. Le mieux est d'isolé le problème et donner juste un exemple pour l'expliquer. Cela va nous permettre au moins de tester la solution avant de la poster.

  3. #3
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2012
    Messages : 8
    Points : 0
    Points
    0

    Par défaut

    Voilà concrètement le problème. Quand je mets en forme mon article grâce à mon BBCode personnalisé comme ci-dessous :

    Code :
    1
    2
    3
    [gras]a[/gras]
    [soulign]b[/soulign]
    [it]c[/it]
    J'obtiens ceci dans ma table articles de ma base de données :

    Code :
    1
    2
    3
    [gras]a[/gras]<br />
    [soulign]b[/soulign]<br />
    [it]c[/it]
    Quand je poste mon article dans la page d'accueil, j'obtiens ceci :

    Code :
    1
    2
    3
    [gras]a[/gras]
    [soulign]b[/soulign]
    [it]c[/it]
    Autrement dit, à l'affichage de mon texte grâce à la fonction afficherArticles, le texte n'est pas parsé. Voici pour information la fonction me permettant de parser mon texte et celle me permettant de l'afficher :

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
    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;
    }
     
    ?>
    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();
    }
     
    ?>

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro Vincent
    Inscrit en
    juillet 2005
    Messages
    21 412
    Détails du profil
    Informations personnelles :
    Nom : Homme Vincent

    Informations forums :
    Inscription : juillet 2005
    Messages : 21 412
    Points : 31 205
    Points
    31 205

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    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>', $misEnForme );
      $misEnForme = preg_replace('#\[it\](.+)\[/it\]#isU', '<span style="font-style:italic">$1</span>', $misEnForme );
     
      return $misEnForme;
    }
    sinon tu n'executes que la dernière ligne

  5. #5
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Dordogne (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : décembre 2012
    Messages : 8
    Points : 0
    Points
    0

    Par défaut

    Merci beaucoup sabotage ! Ca marche impeccable

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •