IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Des balises "br" appraissent dans la zone texte


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Des balises "br" appraissent dans la zone texte
    Bonjour tout le monde,

    J'ai une zone de texte.

    J'y entre par exemple ce texte :

    Le ministère de la culture et de la communication fête cette année son 50ème anniversaire. Pour marquer cette date emblématique, la Fête de la musique célébrera, le dimanche 21 juin prochain, 50 ans de chanson française.

    Retrouvez toutes les informations pour participer et vous informer sur la 28ème édition de l\'événement.
    Vous voyez donc que les deux paragraphes sont séparés par un retour à la ligne.

    Afin que le retour à la ligne soit visible par les lecteurs de mon site, j'ai utilisé la fonction ln2br.

    Quelques personnes ont la possibilité de mettre à jour les informations.

    Le problème est que si je veux remettre le texte ci-dessus à jour, j'obtiens ceci :

    Le ministère de la culture et de la communication fête cette année son 50ème anniversaire. Pour marquer cette date emblématique, la Fête de la musique célébrera, le dimanche 21 juin prochain, 50 ans de chanson française.<br />
    <br />
    Retrouvez toutes les informations pour participer et vous informer sur la 28ème édition de l\'événement.<br />
    La personne corrige, ne touche pas au <br /> mais dans le résultat final, les <br /> sont présent

    Je me demandais comment je pouvais faire pour ne plus voir <br /> mais pour que mes retours à la ligne soit toujours exécutés après une modification.

    Voici le code de modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if($_POST['type_insertion'] != "nouveau")
    {
    	$_POST['corps'] = JsToDb($_POST['corps']);
    	$_POST['titre'] = JsToDb($_POST['titre']);
    	$_POST['auteur'] = JsToDb($_POST['auteur']);
    	$_POST['annee'] = JsToDb($_POST['annee']);
    	$_POST['piecejointe'] = JsToDb($_POST['piecejointe']);
     
    	//$ok = verif_champs();
    //je ne passe aucun parametre, je prfere travailler avec les $_POST[]
    //if ($ok)
    //{
     
    		//cette page met a jour la base de donnes avec les changements dans une information
    		$sql = "UPDATE messages SET Date = now(),Annee = '".$_POST['annee']."',Date_validite = '".$_POST['validite']."',Titre = '".$_POST['titre']."', Corps = '".$_POST['corps']."', Piece_jointe = '".$_POST['piecejointe']."', Auteur = '".$_POST['auteur']."', Lien = '".$_POST['lien']."' WHERE ID = ".$_POST['id']."";
    		//echo $sql;
    		$req = mysql_query($sql);
    ainsi que le code de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    function JsToDb($msg)
    {
    	$msg = addslashes($msg);
     
    	$msg = htmlentities($msg);
     
    	$msg = str_replace("&Atilde;&copy;", "&eacute;", $msg);
     
    	$msg = str_replace("&Atilde;&uml;", "&egrave;", $msg);
     
    	$msg = str_replace("&Atilde;&ordf;", "&ecirc;", $msg);
     
    	$msg = str_replace("&Atilde;&laquo;", "&euml;", $msg);
     
    	$msg = str_replace("&Atilde;&nbsp;", "&agrave;", $msg);
     
    	$msg = str_replace("&Atilde;&curren;", "&auml;", $msg);
     
    	$msg = str_replace("&Atilde;&cent;", "&acirc;", $msg);
     
    	$msg = str_replace("&Atilde;&sup1;", "&ugrave;", $msg);
     
    	$msg = str_replace("&Atilde;&raquo;", "&ucirc;", $msg);
     
    	$msg = str_replace("&Atilde;&frac14;", "&uuml;", $msg);
     
    	$msg = str_replace("&Atilde;&acute;", "&ocirc;", $msg);
     
    	$msg = str_replace("&Atilde;&para;", "&ouml;", $msg);
     
    	$msg = str_replace("&Atilde;&reg;", "&icirc;", $msg);
     
    	$msg = str_replace("&Atilde;&macr;", "&iuml;", $msg);
     
    	$msg = str_replace("&Atilde;&sect;", "&ccedil;", $msg);
     
    	$msg = str_replace("&amp;", "&amp;", $msg);
     
    	return $msg;
     
    }
    Comme je vous l'ai dis avant, l'insertion fonctionne nikel avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    else
    {
    		$_POST['corps'] = JsToDb($_POST['corps']);
    		$_POST['titre'] = JsToDb($_POST['titre']);
    		$_POST['auteur'] = JsToDb($_POST['auteur']);
    		$_POST['annee'] = JsToDb($_POST['annee']);
    		$_POST['piecejointe'] = JsToDb($_POST['piecejointe']);
     
     
    		//nl2br Insere un retour a la ligne HTML a chaque nouvelle ligne
    		$_POST['corps'] = nl2br($_POST['corps']);
     
    		//pas de quote entre le nom de la table
    		//laisser l'ID vide car numro auto
    		//pas besoin de mettre des " et des . pour le nom()
    		$sql = "INSERT INTO messages (ID,Date,Annee,Date_validite,Titre,Corps,Piece_jointe,Auteur,Lien) VALUES ('',now(),\"".$_POST['annee']."\",'',\"".$_POST['titre']."\",\"".$_POST['corps']."\",'',\"".$_POST['auteur']."\",\"".$_POST['lien']."\")";
    		//echo 'ici ' . $sql;
    		$req_sql = mysql_query($sql);
    Merci d'avance pour votre aide.

    beegees

  2. #2
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Il suffit de rajouter une ligne qui reconvertira tes "<br>" en "\n" au moment ou tu ouvres en édition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str = str_replace('<br />', "\n", $row['crops'])
    Par contre, concernant ta fonction JsToDb, tu te complique la vie...

    je te propose d'utiliser plutot cette méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $mon_texte = $_POST['mon_texte'];
     
    mysql_query('insert into matable (corps, ...) values ("'.mysql_real_escape_string($mon_texte).'", ...)');
    et au moment de le restituer, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $r = mysql_query(etc...)
    $rows = mysql_fetch_assoc($r);
    $texte_a_afficher = htmlentities($row['corps']);

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonsoir,

    Merci pour ta réponse.

    J'ai fait ce que tu m'as dit (première partie de ton message) mais sans succès.

    J'ai donc ajouté la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$msg = str_replace("<br />", "\n", $msg);
    Ce qui me donne ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    function JsToDb($msg)
    {
    	$msg = addslashes($msg);
     
    	$msg = htmlentities($msg);
     
    	$msg = str_replace("&Atilde;&copy;", "&eacute;", $msg);
     
    	$msg = str_replace("&Atilde;&uml;", "&egrave;", $msg);
     
    	$msg = str_replace("&Atilde;&ordf;", "&ecirc;", $msg);
     
    	$msg = str_replace("&Atilde;&laquo;", "&euml;", $msg);
     
    	$msg = str_replace("&Atilde;&nbsp;", "&agrave;", $msg);
     
    	$msg = str_replace("&Atilde;&curren;", "&auml;", $msg);
     
    	$msg = str_replace("&Atilde;&cent;", "&acirc;", $msg);
     
    	$msg = str_replace("&Atilde;&sup1;", "&ugrave;", $msg);
     
    	$msg = str_replace("&Atilde;&raquo;", "&ucirc;", $msg);
     
    	$msg = str_replace("&Atilde;&frac14;", "&uuml;", $msg);
     
    	$msg = str_replace("&Atilde;&acute;", "&ocirc;", $msg);
     
    	$msg = str_replace("&Atilde;&para;", "&ouml;", $msg);
     
    	$msg = str_replace("&Atilde;&reg;", "&icirc;", $msg);
     
    	$msg = str_replace("&Atilde;&macr;", "&iuml;", $msg);
     
    	$msg = str_replace("&Atilde;&sect;", "&ccedil;", $msg);
     
    	$msg = str_replace("&amp;", "&amp;", $msg);
     
    	$msg = str_replace("<br />", "\n", $msg);
     
    	return $msg;
     
    }
    qu'en penses-tu ?

    Mercin encore.

    beegees

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Points : 470
    Points
    470
    Par défaut
    Non tu mélanges...

    Alors déjà, à voir ta fonction JsToDb, je pense que t'as un problème d'encodage de ta page.
    Je suis pret à parier que tu as fait ça car tu ne voyais pas pourquoi il t'enregistrait des caractères bizars à la place des accents dans ta base (2 caracteres chelous pour chaque caracteres accentués). Je me trompe ?

    Donc je te propose de régler ce problème d'une façon "correcte" plutot qu'avec un bricolage comme celui là...

    Ce problème - souvent chiant a debugger - survient quand l'encodage de ta page diffère de l'encodage de la base ou de la page qui reçoit des paramètres. 2 jeux de caracteres se font souvent la guerre sur les pages web, l'UTF-8 et l'ISO8859-1 ou 15 (dit Latin). Si je dit pas de conneries, l'UTF-8 utilise un codage 8bits alors que l'iso en utilise 16.

    Je te propose donc de systématiquement insérer sur toutes les pages la balise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-type" content="text/html; charset=iso-8859-15" />
    en début de fichier, avant la balise HTML, ou a defaut de le faire via PHP vi la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=ISO-8859-15');
    En toute circonstance, je te recommande de ne pas essayer de bidouiller le code pour régler ce problème.

    Pour en revenir à ton problème, il y a cas de figure possible à traiter...

    1) Enregistrement du texte dans ta base de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $mon_texte = mysql_real_escape_string($_POST['mon_texte']);
    mysql_query('insert into matable (corps) values ("'.$mon_texte.'")');

    2) Restitution du code pour affichage classique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $r = mysql_query('select corps from matable where...');
    $row = mysql_fetch_assoc($r);
    echo echo str_replace("\n", '<br />', htmlentities($row['corps']));
    3) restitution en modification :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $r = mysql_query('select corps from matable where...');
    $row = mysql_fetch_assoc($r);
    htmlentities($row['corps']);
    En effet, le textarea ne reconnait pas la balise <br /> mais bien le "\n" comme retour à la ligne. htmlentities lui ne fait pas la conversion des \n en <br />. Donc si tu enregistre avec la méthode que je te recommande, tu n'auras pas de problème pour ouvrir ton text dans un textarea, mais il faudra juste penser a forcer le remplacement des \n par <br> quand tu l'affiche en HTML brute.

Discussions similaires

  1. placer des balise xml au bon endroit dans le fichier existant.
    Par calimero91 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 07/01/2008, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo