begin process at 2012 05 31 00:24:10
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Divers

 > 

Débutant(e)

 > 

Insertion et convertion de balise dans une zone de texte.


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Insertion et convertion de balise dans une zone de texte.

vendredi 10 décembre 2010 à 18:19:18 | Insertion et convertion de balise dans une zone de texte.

Etix44

Bonjour, étant nouvelle dans le monde de la création de site, j'ai longtemps tourné sur le html et je me suis tournée récemment sur le php, grâce à ce que j'ai pu apprendre, j'ai créé un site avec un livre d'or, tout c'est bien passer et ça à bien marcher nickel, mais j'ai voulu ajouter une nouveauté, la possibilité au personne venant sur mon site, de personnaliser leurs messages, avec des mises en formes de textes et des ajouts de smiley et c'est à partir de la que les problèmes ont commencé.

Alors je vous explique, le message s'envoie bien dans le sql(nom, date, message), mais à l'endroit où tout doit apparaitre, je ne vois plus la date et le pseudo, mais que les messages à la suite et sans retour de ligne, la conversion des balises et des smiley ce passe bien.
Un screen pour illustrer montrera ce que j'aimerai obtenir(la forme que ça prenait quand tout marcher):
Ici.
Et ce que j'obtiens depuis l'ajout de mon code pour insérer les balises:
Et là.

Mais je pense que le code sera mieux pour tout voir, alors le voici:
Code PHP :
<?php

// Empêche que le message s'affiche 2 fois si l'on raffraichi la page
session_start();

if(!empty($_POST) OR !empty($_FILES))
{
    $_SESSION['sauvegarde'] = $_POST ;
    $_SESSION['sauvegardeFILES'] = $_FILES ;
    
    $fichierActuel = $_SERVER['PHP_SELF'] ;
    if(!empty($_SERVER['QUERY_STRING']))
    {
        $fichierActuel .= '?' . $_SERVER['QUERY_STRING'] ;
    }
    
    header('Location: ' . $fichierActuel);
    exit;
}

if(isset($_SESSION['sauvegarde']))
{
    $_POST = $_SESSION['sauvegarde'] ;
    $_FILES = $_SESSION['sauvegardeFILES'] ;
    
    unset($_SESSION['sauvegarde'], $_SESSION['sauvegardeFILES']);
}


// Connexion à la base de données
try
{
	$bdd = new PDO('mysql:host=localhost;dbname=etix', 'root', '');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

if (!empty($_POST['name']) && !empty($_POST['comment']))
{
    // Insertion du message à l'aide d'une requête préparée
    $req = $bdd->prepare('INSERT INTO livre_or (name, comment, date_post) VALUES(?, ?, NOW())');
    $req->execute (array($_POST['name'] , $_POST['comment']));
	}
else
{
   echo "<span class=\"clignotte\"> Vous n'avez pas rempli tous les champs !</span>"; 
}

?>




<div class="corps_lo" align="left" > 

  <form action="livredor.php" method="post">
<p>
        <label for="name"><span style="margin-left:50px">Nom ou pseudo :</span></label> <input type="text" name="name" id="name" />  <br /><br /> 
        <label for="comment"><span style="margin-left:50px">Message : </span> </label>


			
				<input type="button" value="G" onclick="insertTag('&lt;gras&gt;', '&lt;/gras&gt;', 'textarea')" />
				<input type="button" value="I" onclick="insertTag('&lt;italique&gt;', '&lt;/italique&gt;', 'textarea')" />
				<input type="button" value="Lien" onclick="insertTag('', '', 'textarea', 'lien')" />
				<input type="button" value="Image" onclick="insertTag('&lt;image&gt;', '&lt;/image&gt;', 'textarea')" />

				<input type="button" value="Citation" onclick="insertTag('', '', 'textarea', 'citation')" />
				
				<select onchange="insertTag('&lt;taille valeur=&quot;' + this.options[this.selectedIndex].value + '&quot;&gt;', '&lt;/taille&gt;', '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');" />
                <br /><br />
     	
	<textarea id="textarea" name="comment" tabindex="4" cols="60" rows="4" style="margin-left:50px"></textarea><br /><br />
    
	
	
  <center> <input type="submit" value="Envoyer" style="top:auto" /> </center>
	
    </form>
    
</p>

</div>



<div id="viewDiv" >

<?php

// Récupération des 10 derniers messages
$reponse = $bdd->query('SELECT name, comment, DATE_FORMAT(date_post, \'%d/%m/%Y %Hh%imin\') AS date_post_fr FROM livre_or ORDER BY ID DESC LIMIT 0, 10');



function parseZCode($donnees) {
	// Parsage des balises
	$zcode = array(  
		'`&lt;italique&gt;(.+)&lt;/italique&gt;`isU',  
		'`&lt;gras&gt;(.+)&lt;/gras&gt;`isU',
		'`&lt;barre&gt;(.+)&lt;/barre&gt;`isU',
		'`&lt;lien&gt;(.+)&lt;/lien&gt;`isU',
		'`&lt;lien url=&quot;(.+)&quot;&gt;(.+)&lt;/lien&gt;`isU',
		'`&lt;image&gt;(.+)&lt;/image&gt;`isU',
		'`&lt;citation&gt;(.+)&lt;/citation&gt;`isU',
		'`&lt;citation nom=&quot;(.+)&quot;&gt;(.+)&lt;/citation&gt;`isU',
		'`&lt;citation lien=&quot;(.+)&quot;&gt;(.+)&lt;/citation&gt;`isU',
		'`&lt;taille valeur=&quot;(.+)&quot;&gt;(.+)&lt;/taille&gt;`isU'
	);  
	
	$html = array(  
		'<em>$1</em>',  
		'<strong>$1</strong>',
		'<del>$1</del>', 
		'<a href="$1">$1</a>',
		'<a href="$1">$2</a>',
		'<img src="$1" alt="Image utilisateur" />',
		'<br /><span class="citation">Citation</span><div class="citation2">$1</div>',
		'<br /><span class="citation">Citation : $1</span><div class="citation2">$2</div>',
		'<br /><span class="citation"><a href="$1">Citation</a></span><div class="citation2">$2</div>',
		'<span class="$1">$2</span>'
	); 
	
	$donnees = htmlspecialchars($donnees['comment']);
	$donnees = preg_replace($zcode, $html, $donnees);
	
	// parsage des smilies
	$smiliesName = array(':magicien:', ':colere:', ':diable:', ':ange:', ':ninja:', '&gt;_&lt;', ':pirate:', ':zorro:', ':honte:', ':soleil:', ':\'\\(', ':waw:', ':\\)', ':D', ';\\)', ':p', ':lol:', ':euh:', ':\\(', ':o', ':colere2:', 'o_O', '\\^\\^', ':\\-°');
	$smiliesUrl  = array('magicien.png', 'angry.gif', 'diable.png', 'ange.png', 'ninja.png', 'pinch.png', 'pirate.png', 'zorro.png', 'rouge.png', 'soleil.png', 'pleure.png', 'waw.png', 'smile.png', 'heureux.png', 'clin.png', 'langue.png', 'rire.gif', 'unsure.gif', 'triste.png', 'huh.png', 'mechant.png', 'blink.gif', 'hihi.png', 'siffle.png');
	$smiliesPath = "http://www.siteduzero.com/Templates/images/smilies/";
	
	for ($i = 0, $c = count($smiliesName); $i < $c; $i++) {
		$donnees = preg_replace('`' . $smiliesName[$i] . '`isU', '<img src="' . $smiliesPath . $smiliesUrl[$i] . '" alt="smiley" />', $donnees);
	}
	
	// Rtours à la ligne
	$donnees = preg_replace('`\n`isU', '<br />', $donnees); 
	
	return $donnees;

}

if (isset($_POST['comment'])) {
	$donnees = $_POST['comment'];
	
	if (get_magic_quotes_gpc()) {
		$donnees = stripslashes($donnees);
	}
}




// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)
while ($donnees = $reponse->fetch())
{
	echo parseZCode($donnees); '<p style="margin-left:100px"><strong style="font-size:15px">' 
	
	. htmlspecialchars($donnees['name']) . '</strong> (<em>' 
	. htmlspecialchars($donnees['date_post_fr']) . '</em>) :<br /> '
	. nl2br(htmlspecialchars($donnees['comment'])) . '</p>';
		
}



$reponse->closeCursor();



?>

</div>


Code Javascript :
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;



                       case "citation":
        endTag = "</citation>";
        if (currentSelection) { // Il y a une sélection
                if (currentSelection.length > 30) { // La longueur de la sélection est plus grande que 30. C'est certainement la citation, le pseudo fait rarement 20 caractères
                        var auteur = prompt("Quel est l'auteur de la citation ?") || "";
                        startTag = "<citation nom=\"" + auteur + "\">";
                } else { // On a l'Auteur, on demande la citation
                        var citation = prompt("Quelle est la citation ?") || "";
                        startTag = "<citation nom=\"" + currentSelection + "\">";
                        currentSelection = citation;    
                }
        } else { // Pas de selection, donc on demande l'Auteur et la Citation
                var auteur = prompt("Quel est l'auteur de la citation ?") || "";
                var citation = prompt("Quelle est la citation ?") || "";
                startTag = "<citation nom=\"" + auteur + "\">";
                currentSelection = citation;    
        }
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;     
}


function getXMLHttpRequest() {
	var xhr = null;
	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest();
		}
	} else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}
	
	return xhr;
}


function view(textareaId, viewDiv){
	var field = textareaId.value;
	if (document.getElementById(viewDiv).field)
	
	var donnees = encodeURIComponent(document.getElementById(viewDiv).value);
	var xhr = getXMLHttpRequest();
	
	if (xhr && xhr.readyState != 0) {
		xhr.abort();
		delete xhr;
	}
	
	xhr.onreadystatechange = function() {
		if (xhr.readyState == 4 && xhr.status == 200){
			document.getElementById(viewDiv).innerHTML = xhr.responseText;
		} else if (xhr.readyState == 3){
			document.getElementById(viewDiv).innerHTML = "<div style=\"text-align: center;\">Chargement en cours...</div>";
		}
	}
		
	xhr.open("POST", "livredor.php", true);
	xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xhr.send("comment=" + donnees);
}




Voilà j'espère que vous pourrez m'aider en m'expliquant le comment du pourquoi de ce problème d'affichage, car sa fait 3 jours que je suis dessus, à toucher et modifier par-ci par-là en essayant de trouver la logique du problèmes, mais mes connaissances de débutante m'ont vite rattrapé pour me bloquer, et je viens à vous car je sais vraiment plus quoi faire.

Cordialement.
vendredi 10 décembre 2010 à 20:56:47 | Re : Insertion et convertion de balise dans une zone de texte.

cod57

bonsoir

while ($donnees = $reponse->fetch())
{
echo parseZCode($donnees); '<p style="margin-left:100px"><strong ...

ça serait pas

while ($donnees = parseZCode($reponse->fetch()) )
{

echo '<p style="margin-left:100px"><strong style="font-size:15px">

a++
vendredi 10 décembre 2010 à 21:44:30 | Re : Insertion et convertion de balise dans une zone de texte.

Etix44

Merci beaucoup de ta réponse maintenant tout ce met dans le bon ordre, mais on voit seulement la première lettre de mon champ 'comment' et malheureusement dans chaque champs.
Une photo expliquera mieux je pense, car je sais pas trop comment expliquer:
Par ici.

J'ai essayé de modifier un peux, j'ai trouvé un truc en supprimant ça:
Code PHP :
$donnees = htmlspecialchars($donnees['comment']);

Et à part faire apparaitre les commentaires, pseudo et date dans le bonne ordre en entier, il y a plus de mise en forme:
Et par là.

Je sais vraiment plus quoi faire, je sens que ce sont des petites erreurs de débutants que je fais, mais je coince vraiment ^^



Cette discussion est classée dans : donnees, var, xhr, if, currentselection


Répondre à ce message

Sujets en rapport avec ce message

php rafraichissement d'une ligne de code avec ajax [ par speedylol ] Bonjour,une aidez pour la partie ajax qui devrais rafraichire automtiquement et qui de fonctionne pas quand le fait appel par un include dans mon gaba Pb rajout saut de page [ par Falcon074 ] Bonjour, Je cherche un moyen de rajouter un saut de page à la fin de tous les 6 enr La donnée récupérée ne se met pas à jour par l'Ajax [ par majong ] Bonjour, quelqu'un pourra t-il me dire pourquoi le changement ne s'effectue uniquement en ouvrant la page html (un changement par phpadmin ne se réper Probleme avec connexion mysql [erreur page] [ par bmxman25 ] Bonjour à tous et à toutes, Je suis venu vous voir car j'ai un probléme avec ma base de donnée :Je suis en train de mettre en place un espace membre.J probleme login/redirect avec IE mais pas avec FF [ par stooff ] Bonjour a tout le site,Pour vous expliquer brievement le sujet ... je developpe une interface web client, dans celle ci le client doit etre redirigé v SPIP, php et javascript soucis défilement informations [ par oceane751 ] bonjour (encore moi, oui je sais ;) )j'ai du code qui me permet de faire défiler des informations j'utilise : du phpdu spipdu javascript mon code Affichage d'un div AJAX [ par soker1 ] Bonjour à tousje me mets tranquilement à ajax et je recontre deja une difficulté :j'ai 2 liens sur mon index qui appelle un scirpt et qui affiche un m id [ par Homeros ] Bonjour, je demande une si vous pouvez. ce que je suis entraine de fair c'est crée un site pour recrutement, dans la page "annonnce.php" j'ai fait p php et ajax [ par drogba86 ] salut svp, j'ai un code javascript pour rafraichir une div de ma page.mais après cette div la ya d'autres div qui s'executent mais n'aparaissent pas.s Intégrer un champ pièce jointe à un formulaire de contact [ par adilboy2001 ] Bonjour, Je souhaiterais pouvoir intégrer un champ pièce jointe à un formulaire de contact. J'ai effectué plusieurs recherches mais toutes ont été in


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales