Problème de retour à la ligne.

Résolu
Max747 - 3 janv. 2024 à 09:55
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024 - 11 janv. 2024 à 17:01

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

6 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
3 janv. 2024 à 11:52
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
5 janv. 2024 à 10:19

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.

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
5 janv. 2024 à 11:58

Bonjour,

Comme indiqué dans le lien que je t'ai donné

<?php

$foo = nl2br($tavariable);
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
6 janv. 2024 à 10:24

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.....

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
6 janv. 2024 à 10:40

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"
0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
7 janv. 2024 à 09:00

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!

0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
7 janv. 2024 à 12:17

Les failles d'injection sql sont gérées via les requêtes préparées ....   pas par les fonctions que je t'ai cité qui ne doivent servir qu'à de l'affichage ( je me répète.. )

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
8 janv. 2024 à 07:50

Pardon, 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 ?

0
Max747 Messages postés 258 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 11 janvier 2024
11 janv. 2024 à 17:01

Bonjour.

Voyant qu’apparemment il n'y a plus d'amélioration possible à ce script, je déclare ce sujet résolu.

Cdlt.

0