vue Le BBcode : pour un livre d'or
Kommunauty
Connexion
Inscription

Le BBcode : pour un livre d'or


trolx Messages : 274

Bonjours a tous, je ne me suis pas connecté depuis longtemps mais aujourd’hui je suis entrain de finalisé un site ( j'améliore mes module ) et je bloc sur le bbcode de mon livre d'or, plus précisément sur le fonction : preg_replace.

Voici mon code :

Livreor.php :


<?php include('includes/haut.php'); ?>
<?php include('includes/menu.php'); ?>
<?php include('includes/fonction.php'); ?>
<div id="texte"><div id="overflow">
<div class="cadre"><div class="titre">Livre d'or</div><div class="marge_interne">
<div align="center">
<form method="post" action="livreor.php">

            Pseudo : <input name="pseudo" value="<?php if(isset($_SESSION['username'])){echo ' '.htmlentities($_SESSION['username'], ENT_QUOTES, 'UTF-8');} ?>"/><br />

            Message :<br />
<p><center>
<input type="button" value="Gras" onclick="insertTag('<gras>','</gras>','textarea');" />
<input type="button" value="Italique" onclick="insertTag('<Italique>','</Italique>','textarea');"/>
<input type="button" value="Lien" onclick="insertTag('<Lien>','</Lien>','textarea');"/>
<input type="button" value="Image" onclick="insertTag('<Image>','</Image>','textarea');"/>
<select onchange="insertTag('<taille valeur="' + this.options[this.selectedIndex].value + '">', '</taille>', 'textarea');">
<option value="none" class="selected" selected="selected">Taille</option>
<option value="ttpetit">Très très petit</option>
<option value="tpetit">Très petit</option>
<option value="petit">Petit</option>
<option value="gros">Gros</option>
<option value="tgros">Très gros</option>
<option value="ttgros">Très très gros</option>
</select>
<img src="http://users.teledisnet.be/web/mde28256/smiley/smile.gif" alt=":)" onclick="insertTag(':)', '', 'textarea');" />
<img src="http://users.teledisnet.be/web/mde28256/smiley/unsure2.gif" alt=":euh:" onclick="insertTag(':euh:', '', 'textarea');" />


</center>
</p>
<fieldset><textarea name="message" id="textarea" cols="90" rows="10"></textarea></fieldset>
<?php
//Si lutilisateur est connecte, on lui donne un lien pour modifier ses informations, pour voir ses messages et un pour se deconnecter
if(isset($_SESSION['username']))
{
//On compte le nombre de nouveaux messages que lutilisateur a
$nb_new_pm = mysql_fetch_array(mysql_query('select count(*) as nb_new_pm from pm where ((user1="'.$_SESSION['userid'].'" and user1read="no") or (user2="'.$_SESSION['userid'].'" and user2read="no")) and id2="1"'));
//Le nombre de nouveaux messages est stoque dans la variable $nb_new_pm
$nb_new_pm = $nb_new_pm['nb_new_pm'];
//On affiche les liens
?>
            <input type="submit" value="Envoyer" />
<input type="reset" name = "Effacer" value = "Effacer"/>

<?php
}
else
{
//Sinon, on lui donne un lien pour sinscrire et un autre pour se connecter
?>
<b> Vous ne pouvez pas signer le livre d'or si vous nete pas connécter </b>
<?php
}
?>
     
    </form>
 
    <p class="pages">
 
<?php
// --------------- Étape 1 -----------------
// Si un message est envoyé, on l'enregistre
// -----------------------------------------
 
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
    $pseudo = mysql_real_escape_string(htmlspecialchars($_POST['pseudo'])); // On utilise mysql_real_escape_string et htmlspecialchars par mesure de sécurité
    $message = mysql_real_escape_string(htmlspecialchars($_POST['message'])); // De même pour le message
    $message = nl2br($message); // Pour le message, comme on utilise un textarea, il faut remplacer les Entrées par des <br />
 
    // On peut enfin enregistrer :o)
    mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $message . "')");
}
 
// --------------- Étape 2 -----------------
// On écrit les liens vers chacune des pages
// -----------------------------------------
 
// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 10; // Essayez de changer ce nombre pour voir :o)
// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor');
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages  = ceil($totalDesMessages / $nombreDeMessagesParPage);
// Puis on fait une boucle pour écrire les liens vers chacune des pages
echo 'Page : ';
for ($i = 1 ; $i <= $nombreDePages ; $i++)
{
    echo '<a href="livreor.php?page=' . $i . '">' . $i . '</a> ';
}
?>
 
</p>
 
<?php
 
 
// --------------- Étape 3 ---------------
// Maintenant, on va afficher les messages
// ---------------------------------------

if (isset($_GET['page']))
{
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
        $page = 1; // On se met sur la page 1 (par défaut)
}
  
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
 
$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
 
while ($donnees = mysql_fetch_array($reponse))
{
        $message = parsage($donnees['message']);
        echo '<p><strong>' . $donnees['pseudo'] . '</strong> a écrit :<br />' . $message . '</p>';
}

 
mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o)
?>
</div>
</div></div>
</div></div>

<?php include('includes/bas.php'); ?>

fonction.php


<?php
    function parsage($message)
    {
        $message = preg_replace("#<gras>(.+)</gras>#isU", "<strong>$1</strong>", $message);
        $message = preg_replace("#<italique>(.+)</italique>#isU", "<em>$1</em>", $message);
        // D'autre balise ...
        
        return $message;
    }
?>

Script java :


<script>
function insertTag(startTag, endTag, textareaId, tagType) {
        var field  = document.getElementById(textareaId);
        var scroll = field.scrollTop;
        field.focus();
        
        /* === Partie 1 : on récupère la sélection === */
        if (window.ActiveXObject) {
                var textRange = document.selection.createRange();            
                var currentSelection = textRange.text;
        } else {
                var startSelection   = field.value.substring(0, field.selectionStart);
                var currentSelection = field.value.substring(field.selectionStart, field.selectionEnd);
                var endSelection     = field.value.substring(field.selectionEnd);               
        }
        
        /* === Partie 2 : on analyse le tagType === */
        if (tagType) {
                switch (tagType) {
case "lien":
        endTag = "</lien>";
        if (currentSelection) { // Il y a une sélection
                if (currentSelection.indexOf("http://") == 0 || currentSelection.indexOf("https://") == 0 || currentSelection.indexOf("ftp://") == 0 || currentSelection.indexOf("www.") == 0) {
                        // La sélection semble être un lien. On demande alors le libellé
                        var label = prompt("Quel est le libellé du lien ?") || "";
                        startTag = "<lien url="" + currentSelection + "">";
                        currentSelection = label;
                } else {
                        // La sélection n'est pas un lien, donc c'est le libelle. On demande alors l'URL
                        var URL = prompt("Quelle est l'url ?");
                        startTag = "<lien url="" + URL + "">";
                }
        } else { // Pas de sélection, donc on demande l'URL et le libelle
                var URL = prompt("Quelle est l'url ?") || "";
                var label = prompt("Quel est le libellé du lien ?") || "";
                startTag = "<lien url="" + URL + "">";
                currentSelection = label;                     
        }
break;

                }
        }
        
        /* === Partie 3 : on insère le tout === */
        if (window.ActiveXObject) {
                textRange.text = startTag + currentSelection + endTag;
                textRange.moveStart("character", -endTag.length - currentSelection.length);
                textRange.moveEnd("character", -endTag.length);
                textRange.select();     
        } else {
                field.value = startSelection + startTag + currentSelection + endTag + endSelection;
                field.focus();
                field.setSelectionRange(startSelection.length + startTag.length, startSelection.length + startTag.length + currentSelection.length);
        }

        field.scrollTop = scroll;     
}


</script>

Les balise s'affiche dans le message mais se mette pas en gras par exemple ...

pouriez vous m'aidé s'il vous plait ? merci d'avence

mercredi 7 septembre 2011

trolx Messages : 274

Personne pour m'aidé ?

ps : je voulait mettre pour un livre do'r dans le titre

vendredi 9 septembre 2011

SiMax Messages : 7572

Hé ! Ca faisait longtemps

Quand tu dis "Les balise s'affiche dans le message mais se mette pas en gras par exemple", c'est quelles balises ? Ca t'affiche des balises "gras" ou les balises transformées "bold" ?

vendredi 9 septembre 2011

trolx Messages : 274

Non enfaîte dans la zone de texte sa affiche bien montexteengras mais quand le message est afficher sa reste montexteengras .... enfaîte c'est la fonction preg_replace que j'ai rien compris :/

ps: sinon sa va ? quoi de neuf  ?

vendredi 9 septembre 2011

SiMax Messages : 7572

Aaaah ok !

$message = preg_replace("#<gras>(.+)</gras>#isU", "<strong>$1</strong>", $message);

Là le problème c'est ton (.+). PHP traduit ça en "n'importe quoi après la balise gras", ce qui inclut aussi la balise /gras. Il faut donc comme instruction "tout sauf le début d'une nouvelle balise" : ([^<]*)

$message = preg_replace("#<gras>([^<]*)</gras>#isU", "<strong>$1</strong>", $message);
vendredi 9 septembre 2011

trolx Messages : 274

merci de ta réponse mais cela ne fonctionnent pas :/

vendredi 9 septembre 2011

SiMax Messages : 7572

Hum, ça devient bizarre.

Essaye ça :

$message = preg_replace("/[b](.*?)[/b]/is", "<strong>$1</strong>", $message)

Avec des balises comme le forum de Kommunauty. Et enlève les autres preg_replace. Si ça marche pas, ça veut dire que le problème ne vient pas du preg_replace, parce que ce code fonctionne, c'est sûr

vendredi 9 septembre 2011

trolx Messages : 274

Sa me met sa : Parse error: syntax error, unexpected T_RETURN in C:wampwwwteam-pubincludesfonction.php on line 7

vendredi 9 septembre 2011

SiMax Messages : 7572

Ah oui, il manque le ; non ?

vendredi 9 septembre 2011

trolx Messages : 274

non c'est bon j'ai trouver et merci beaucoup cela marche parfaitement !

vendredi 9 septembre 2011

Page suivante »