Problème de retour à la ligne.
RésoluMax747 Messages postés 258 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Dans le but d'améliorer la présentation de mon chat concernant la disposition des phrases, je vous présente ci dessous en image ce dont il s'agit:
Rédaction d'un message:
Présentation du message précédemment écrit:
Nous pouvons constater qu'il n'y a pas de retour à la ligne et que la deuxième phrase se place à la suite de la première.Se serait le cas pour d'autres si il y en avait d'avantage.
Voici le fichier chat.php comportant dans sa partie la plus technique les codes javascript:
<?php ?> <!doctype html> <html lang="FR-fr"> <head> <title>Chat</title> <meta charset="UTF-8"><!--En HTML5--> <link rel="stylesheet" href="chat.css"/> </head> <body><!--chat.php--> <?php if (!empty ($username)) { ?> <table id="body"> <tr> <td> </td> </tr> <tr > <td style="height:320px"> <div id="chat_aff"></div> </td> </tr> <tr > <td id="form" valign="top"> <table id="form2"> <tr> <td style="text-align: center;font-size:16px;width:90%"> <label for="message" style="color:blue;font-family:Comic Sans MS;font-size:18px;">Ecrire les messages ci dessous.</label> </td> <td></td> </tr> <tr> <td> <textarea id="message" rows="3" cols="33"> </textarea> </td> <td> <button id="submit">Envoi</button> </td> </tr> </table> </td> </tr> </table> <?php } ?> <script src="https://code.jquery.com/jquery.min.js"></script> <script> setInterval(function() { /*alert ("Bonjour");*/ $("#chat_aff").load("chat_control.php",function(){}); //$("#chat").load("chat_control.php",function(){}); },1000); $("#submit").click(function() { var name = $("#name").val(); var message = $("#message").val(); $("#message").val(""); $.ajax({ async: false , type: 'GET', url: 'chat_control.php?name='+name+'&message='+message }); }); </script> </body> </html>
Je pense que le problème pour améliorer la disposition des phrases suite à un retour à la ligne par la touche enter doit se situer dans le script javascript si je ne me trompe.
Merci d'avance pour votre aide si vous le pouvez.
Cdlt.
Windows / Firefox 121.0
- Retour à la ligne google chat
- Coco chat - Accueil - Réseaux sociaux
- Remplaçant de Coco : quelles solutions pour tchater gratuitement en ligne ? - Accueil - Réseaux sociaux
- Google maps satellite - Guide
- Dns google - Guide
- Google maps - Guide
6 réponses
Bonjour
NL2BR
En Js:
https://gist.github.com/yidas/41cc9272d3dff50f3c9560fb05e7255e
En php
https://www.php.net/manual/fr/function.nl2br.php
Merci pour cette possibilité avec NL2BR que j'ai inséré dans ce script à la ligne 17 ci dessous.
<script> setInterval(function() { /*alert ("Bonjour");*/ $("#chat_aff").load("chat_control.php",function(){}); //$("#chat").load("chat_control.php",function(){}); },1000); $("#submit").click(function() { var name = $("#name").val(); var message = $("#message").val(); var message = nl2brJS(message); $("#message").val(""); $.ajax({ async: false , type: 'GET', url: 'chat_control.php?name='+name+'&message='+message }); }); </script>
Cependant les retours à la ligne dans la zone de lecture du chat ne se réalisent toujours pas.(Alors qu'elles sont visibles dans celle présentée pour rédiger un message.)
Serait il possible que tu puisses m'indiquer plus précisément comment utiliser la fonction NL2BR dans mon fichier chat.php ?
Merci.
Bonjour.
Oui ça je savais.
Ce qui m'a amené sur le fichier suivant (chat_control.php) que voici:
<?php session_start(); require_once("chat_modele.php"); $bdd = bdd(); if (!empty($_GET['message'])) { // Récupération du contenu brut $rawMessage = $_GET['message']; // Convertir les retours à la ligne en balises <br> $formattedMessage = nl2br($rawMessage); } @$messag = htmlspecialchars($_GET['message']); if (isset($_GET['name']) && isset($messag)) { // Convertir les retours à la ligne en balises <br> et éviter les attaques XSS $messag = nl2br($messag); $messag = html_entity_decode($messag); // Enregistrement du message dans la base de données ajout_message($bdd, $_GET['name'], $messag); } else { // Expire les messages (si nécessaire) expire_message($bdd); // Récupérer les messages de la base de données $message = message($bdd); // Afficher la vue require_once("chat_vue.php"); } ?>
Où l'on peut voir en lignes 12 et 19 la conversion des retours à la ligne.
Cependant avec tout le mal que je me suis donné, je n'ai pas de chance car actuellement cela ne fonctionne qu'en mode local!
Alors que sur mon serveur distant les retours à la ligne ne se réalisent pas.
Sans doute qu'une petite amélioration de ce script me permettrait d'aboutir à un fonctionnement optimal sur serveur distant?
Je crois que l'on y est presque si tu veux bien me fournir un dernier "coup de pouce" ?
Quand cela fonctionnera parfaitement, je pourrai te donner tous les fichiers permettant d'utiliser ce chat en adaptant celui permettant de se connecter à ton serveur bien sure. Ainsi que les fichiers CSS et la table pour la base de donnée.
Tout un programme.....
Alors ....
Les fonctions nl2br .... , html_entity_decode, et htmlspecialchars.. sont des fonctions à utiliser EXCLUSIVEMENT pour faire l'affichage ... et JAMAIS pour traiter les chaines de caractères avant leur insertion en BDD !
Les données, en BDD, s'ajoutent "brutes"... et c'est seulement lors de l'affichage des données que tu les mets dans le format que tu souhaites.
Le traitement devrait donc se trouver dans le fichier
"chat_vue.php"
Bonjour.
Ainsi si je comprends bien, les injections SQL peuvent être insérées dans une tables. Pourvu qu'ensuite elles soient traitées par htmlspecialchars après la sélection des données de cette table par SELECT par exemple.
Et cela sans danger pour l'intégrité de la table ou de la base de donnée?
Si c'est cela, merci pour l'info qui permettrait d'obtenir un bonne précision une bonne fois pour toute!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPardon, mais à ce que j'ai appris, htmlspecialchars qui fait partie d'une fonction que tu m'as cité, sert à éviter les attaques XSS (Cross-Site Scripting) par injection de codes dans la partie écriture de mon chat!
J'utilise en plus des requêtes préparées pour éviter d'autres injections (SQL) telles que ci dessous:
function ajout_message($bdd,$username,$message) { $bdd = bdd(); $req = ("INSERT INTO annonce(Pseudo,Message,Date) VALUES(:Pseudo,:Message,NOW())"); $datas = array(":Pseudo"=>$_SESSION['username'],":Message"=>$message); //Execution de la requete try{ $requete = $bdd -> prepare($req) ; $requete->execute($datas) ; }catch(Exception $e){ // en cas d'erreur : echo " Erreur ! ".$e->getMessage(); echo " Les datas : " ; print_r($datas); } } function message($bdd) { // Préparez votre requête SQL $requete = $bdd->prepare("SELECT ID, Pseudo, Message, Date FROM annonce ORDER BY Date DESC"); // Exécute la requête $requete->execute(); // Retourne le résultat de la requête (objet PDOStatement) return $requete; }
La fonction message est utilisée dans le fichier chat_deux_vue.php que voici:
<?php require_once("chat_deux_modele.php"); $messages = message($bdd); ?> <!DOCTYPE html> <html lang="fr"> <head> <meta charset="utf-8" /> <title>chat_vue</title> </head> <body> <table id="table_message"> <?php while ($don = $messages->fetch()) { if (pair($don['ID'])) { $color = ""; } else { $color = "#EDEDED"; } ?> <tr style="background-color:<?php echo $color; ?>"> <td class="info_message" valign="top"> <span style="font-size:small"><?php echo 'De ' . $don['Pseudo']; ?></span></br> <?php $_SESSION['joueur'] = $don['Pseudo']; sscanf($don['Date'], "%4s-%2s-%2s %2s:%2s", $annee, $mois, $jour, $heure, $minute); $heure = $heure + 1; echo $jour.'/'.$mois.'/'.$annee.' '.$heure.':'.$minute; ?> </td> <td class="message" > <div class="message2" > <?php // Applique les transformations nécessaires au message $message = htmlspecialchars($don['Message']); $message = nl2br($message); $message = html_entity_decode($message); // Affiche le message echo $message; ?> </div> </td> </tr> <?php } ?> </table> </body> </html>
Tout cela me permet désormais de faire fonctionner correctement mon chat aussi bien en local qu'en serveur distant!
Quand aux fonctions réservées pour l'affichage elles sont désormais utilisées pour afficher les textes avec les retours à la ligne.
Enfin, les retours à la ligne sont présents dans ma table par <br> qui séparent les phrases tout en restant sur la même ligne dans le champ Message de la table.
Il me reste une question à te poser:
Y aurait il, à ton avis, encore une amélioration à apporter aux scripts que je te présente aujourd'hui ?