Accueil > Forum > > > > Insertion et convertion de balise dans une zone de texte.
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('<gras>', '</gras>', 'textarea')" />
<input type="button" value="I" onclick="insertTag('<italique>', '</italique>', 'textarea')" />
<input type="button" value="Lien" onclick="insertTag('', '', 'textarea', 'lien')" />
<input type="button" value="Image" onclick="insertTag('<image>', '</image>', 'textarea')" />
<input type="button" value="Citation" onclick="insertTag('', '', 'textarea', 'citation')" />
<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');" />
<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(
'`<italique>(.+)</italique>`isU',
'`<gras>(.+)</gras>`isU',
'`<barre>(.+)</barre>`isU',
'`<lien>(.+)</lien>`isU',
'`<lien url="(.+)">(.+)</lien>`isU',
'`<image>(.+)</image>`isU',
'`<citation>(.+)</citation>`isU',
'`<citation nom="(.+)">(.+)</citation>`isU',
'`<citation lien="(.+)">(.+)</citation>`isU',
'`<taille valeur="(.+)">(.+)</taille>`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:', '>_<', ':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
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|