Partage
  • Partager sur Facebook
  • Partager sur Twitter

javascript et le BBcode dans les news...

Sujet résolu
    9 janvier 2011 à 20:43:12

    Bonjour,
    j'ai réalisé un système de news (php, donc). Tout fonctionnait bien.
    J'ai ajouté le BBcode dedans. Même chose.
    Sachant que je ne serais pas le seul à poster des news, j'ai voulu mettre les balises du BBcode dans ma rediger_news.php
    J'ai donc pris un script sur internet, qui sur un index.php, marche parfaitement. J'ai voulu le mettre en pratique dans mon rediger_news.php, et la ca bug :s non seulement, rien n'apparait en cas de click sur une balise, mais en plus le bouton envoyer semble...désactiver :o

    voici mes codes :


    index.php(trouver sur internet)


    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
    <script language="Javascript">
    var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
    var regexp = new RegExp("[\r]","gi");
    
    function storeCaret(selec)
    {
    	if (isMozilla) 
    	{
    	// Si on est sur Mozilla
    
    		oField = document.forms['news'].elements['newst'];
    
    		objectValue = oField.value;
    
    		deb = oField.selectionStart;
    		fin = oField.selectionEnd;
    
    		objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
    		objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
    		objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );
    
    	//	alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");
    			
    		oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]" + objectValueFin;
    		oField.selectionStart = strlen(objectValueDeb);
    		oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]");
    		oField.focus();
    		oField.setSelectionRange(
    			objectValueDeb.length + selec.length + 2,
    			objectValueDeb.length + selec.length + 2);
    	}
    	else
    	{
    	// Si on est sur IE
    		
    		oField = document.forms['news'].elements['newst'];
    		var str = document.selection.createRange().text;
    
    		if (str.length>0)
    		{
    		// Si on a selectionné du texte
    			var sel = document.selection.createRange();
    			sel.text = "[" + selec + "]" + str + "[/" + selec + "]";
    			sel.collapse();
    			sel.select();
    		}
    		else
    		{
    			oField.focus(oField.caretPos);
    		//	alert(oField.caretPos+"\n"+oField.value.length+"\n")
    			oField.focus(oField.value.length);
    			oField.caretPos = document.selection.createRange().duplicate();
    			
    			var bidon = "%~%";
    			var orig = oField.value;
    			oField.caretPos.text = bidon;
    			var i = oField.value.search(bidon);
    			oField.value = orig.substr(0,i) + "[" + selec + "][/" + selec + "]" + orig.substr(i, oField.value.length);
    			var r = 0;
    			for(n = 0; n < i; n++)
    			{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
    			pos = i + 2 + selec.length - r;
    			//placer(document.forms['news'].elements['newst'], pos);
    			var r = oField.createTextRange();
    			r.moveStart('character', pos);
    			r.collapse();
    			r.select();
    
    		}
    	}
    }
    
    </script>
       </head>
    <body>
    <center>
    <form name="news">
    <input type="button" value="b" style="width:50px;font-weight:bold" onclick="storeCaret('b')">
    <input type="button" value="i" style="width:50px;font-style:italic" onclick="storeCaret('i')">
    <input type="button" value="u" style="width:50px;text-decoration:underline" onclick="storeCaret('u')">
    <input type="button" value="mail"style="width:50px" onclick="storeCaret('mail=noter_ladresse_ici')">
    <input type="button" value="centrer"style="width:50px" onclick="storeCaret('center')">
    <input type="button" value="justifié"style="width:50px" onclick="storeCaret('justify')">
    <input type="button" value="taille"style="width:50px" onclick="storeCaret('size=noter_la_taille_ici')">
    <input type="button" value="aligne à droite"style="width:50px" onclick="storeCaret('right')">
    <input type="button" value="color"style="width:50px" onclick="storeCaret('color=nom_de_la_couleur')">
    <input type="button" value="lien"style="width:50px" onclick="storeCaret('url=noter_lurl_ici')">
    <input type="button" value="img"style="width:50px" onclick="storeCaret('img')"><br>
    <textarea name="newst" id="newst" rows="10" wrap="virtual" cols="45"></textarea>
    </form>
    </center><noscript><a href="http://www.editeurjavascript.com/countus/">compteur live</a></noscript>
    </body>
    </html>
    



    ma rediger_news.php :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
       <head>
           <title>Rédiger une news</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <style type="text/css">
            h3, form
            {
                text-align:center;
            }
            </style>
    		<script language="javascript" type="text/javascript" src="bbs.js"></script>
        </head>
        
        <body>
    <h3><a href="liste_news.php">Retour à la liste des news</a></h3>
    <?php
    mysql_connect("******", "******", "*****");
    mysql_select_db("*****");
    if (isset($_GET['modifier_news'])) // Si on demande de modifier une news
    {
        // On protège la variable "modifier_news" pour éviter une faille SQL
        $_GET['modifier_news'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_news']));
        // On récupère les infos de la news correspondante
        $timestamp = $donnees['Timestamp'] + 21600;
        $retour = mysql_query('SELECT * FROM news WHERE id=\'' . $_GET['modifier_news'] . '\'');
        $donnees = mysql_fetch_array($retour);
        
        // On place le titre et le contenu dans des variables simples
        $contenu = stripslashes($donnees['contenu']);
    	$titre = stripslashes($donnees['titre']);
        $pseudo = stripslashes($donnees['pseudo']);
        $id_news = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification
    }
    else // C'est qu'on rédige une nouvelle news
    {
        // Les variables $titre et $contenu sont vides, puisque c'est une nouvelle news
        $titre = '';
        $contenu = '';
    	$pseudo = '';
        $id_news = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification
    }
    ?>
    <form action="liste_news.php" method="post">
    <p>Titre : <input type="text" size="30" name="titre" value="<?php echo $titre; ?>" /></p>
    <p>
        Pseudo : <input type="text" size="30" name="pseudo" value="<?php echo $pseudo; ?>" /><br />
    </p>
    <center>
    <form name="news">
    <input type="button" value="b" style="width:50px;font-weight:bold" onclick="storeCaret('b')">
    <input type="button" value="i" style="width:50px;font-style:italic" onclick="storeCaret('i')">
    <input type="button" value="u" style="width:50px;text-decoration:underline" onclick="storeCaret('u')">
    <input type="button" value="mail"style="width:50px" onclick="storeCaret('mail=noter_ladresse_ici')">
    <input type="button" value="centrer"style="width:50px" onclick="storeCaret('center')">
    <input type="button" value="justifié"style="width:50px" onclick="storeCaret('justify')">
    <input type="button" value="taille"style="width:50px" onclick="storeCaret('size=noter_la_taille_ici')">
    <input type="button" value="droite"style="width:50px" onclick="storeCaret('right')">
    <input type="button" value="color"style="width:50px" onclick="storeCaret('color=nom_de_la_couleur')">
    <input type="button" value="lien"style="width:50px" onclick="storeCaret('url=noter_lurl_ici')">
    <input type="button" value="img"style="width:50px" onclick="storeCaret('img')"><br>
    <p>    Contenu :<br />
        <textarea name="contenu" id="contenu" cols="50" rows="10" wrap="virtual">
        <?php echo $contenu; ?>
        </textarea><br />
    </p>
    </form>
    </center>
        <center><input type="hidden" name="id_news" value="<?php echo $id_news; ?>" />
        <input type="submit" value="Envoyer" /></center>
    </p>
    </form>
    </body>
    </html>
    


    et enfin bbs.js :

    var isMozilla = (navigator.userAgent.toLowerCase().indexOf('gecko')!=-1) ? true : false;
    var regexp = new RegExp("[\r]","gi");
    
    function storeCaret(selec)
    {
    	if (isMozilla) 
    	{
    	// Si on est sur Mozilla
    
    		oField = document.forms['news'].elements['contenu'];
    
    		objectValue = oField.value;
    
    		deb = oField.selectionStart;
    		fin = oField.selectionEnd;
    
    		objectValueDeb = objectValue.substring( 0 , oField.selectionStart );
    		objectValueFin = objectValue.substring( oField.selectionEnd , oField.textLength );
    		objectSelected = objectValue.substring( oField.selectionStart ,oField.selectionEnd );
    
    	//	alert("Debut:'"+objectValueDeb+"' ("+deb+")\nFin:'"+objectValueFin+"' ("+fin+")\n\nSelectionné:'"+objectSelected+"'("+(fin-deb)+")");
    			
    		oField.value = objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]" + objectValueFin;
    		oField.selectionStart = strlen(objectValueDeb);
    		oField.selectionEnd = strlen(objectValueDeb + "[" + selec + "]" + objectSelected + "[/" + selec + "]");
    		oField.focus();
    		oField.setSelectionRange(
    			objectValueDeb.length + selec.length + 2,
    			objectValueDeb.length + selec.length + 2);
    	}
    	else
    	{
    	// Si on est sur IE
    		
    		oField = document.forms['news'].elements['contenu'];
    		var str = document.selection.createRange().text;
    
    		if (str.length>0)
    		{
    		// Si on a selectionné du texte
    			var sel = document.selection.createRange();
    			sel.text = "[" + selec + "]" + str + "[/" + selec + "]";
    			sel.collapse();
    			sel.select();
    		}
    		else
    		{
    			oField.focus(oField.caretPos);
    		//	alert(oField.caretPos+"\n"+oField.value.length+"\n")
    			oField.focus(oField.value.length);
    			oField.caretPos = document.selection.createRange().duplicate();
    			
    			var bidon = "%~%";
    			var orig = oField.value;
    			oField.caretPos.text = bidon;
    			var i = oField.value.search(bidon);
    			oField.value = orig.substr(0,i) + "[" + selec + "][/" + selec + "]" + orig.substr(i, oField.value.length);
    			var r = 0;
    			for(n = 0; n < i; n++)
    			{if(regexp.test(oField.value.substr(n,2)) == true){r++;}};
    			pos = i + 2 + selec.length - r;
    			//placer(document.forms['news'].elements['contenu'], pos);
    			var r = oField.createTextRange();
    			r.moveStart('character', pos);
    			r.collapse();
    			r.select();
    
    		}
    	}
    }
    


    Quelqu'un peut m'aider ?

    Merci beaucoup amis zéro, et bonne année !
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      9 janvier 2011 à 21:18:31

      Ligne 44 de rediger_news.php ... Tun'a pas bien recopié le code d'origine et oublié le name="news" dont javascript a besoin. Du coup, ça ne peut pas fonctionner.
      • Partager sur Facebook
      • Partager sur Twitter

      javascript et le BBcode dans les news...

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown