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

PHP & Base de données Discussion :

Retour chariot non affiché dans un textarea [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Par défaut Retour chariot non affiché dans un textarea
    Salut,

    J'ai un petit soucis que je n'arrive pas à régler :

    Dans ma base de données j'ai le texte d'articles avec des retours chariot.

    Lorsque je veux afficher ce texte dans un textarea pour le modifier, l'article est regroupé sur une seule ligne.

    Lorsque j'utilise nl2br(), des <br> sont affichés aux positions des retours chariot mais ne sont, bien entendu, pas interprétés.

    Détails curieux, lorsque je modifie mon article directement dans phpmyadmin les retours à la ligne sont bien interprétés dans mon textarea...

    Problème d'encodage dans de l'insert ? J'ai tout en UTF-8
    Il y a t'il "retour chariot" et "retour chariot" ?

    Des idées ?

    Merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 310
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 310
    Billets dans le blog
    17
    Par défaut
    Pas de traitement sur ta chaîne à l'INSERT au SELECT ou en JS ?

    Quand je teste les différents retours à la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php foreach ( array("aaa\r\nbbb", "aaa\rbbb", "aaa\nbbb") as $string ) : ?>
     
    <textarea><?php echo $string ?></textarea>
     
    <?php endforeach ?>
    J'ai à chaque fois :

    (FF et Chrome sous WinXP)

    Donc pas de raison que ça bloque pour toi.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Par défaut
    Non pas de traitement pour l'insertion..., j'utilise Zend.

    J'arrive pas à comprendre...

    Avec nl2br() il me transforme bien les retours à la ligne donc ils existent bien...

  4. #4
    Membre expérimenté Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Par défaut
    Bonsoir Khleo,

    Peux-tu nous montrer ton code qui affiche le textearea stp ?
    et ta requête avec zend ?

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2008
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2008
    Messages : 519
    Par défaut
    Ca commence par un insert en ajax :

    Code javascript : 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
    $.ajax({
    	type: 'POST',
    	url: '/profil/enregistrerbillet/',
    	data: "txt="+encodeURIComponent($("#TA").val())+
    	"&titre="+encodeURIComponent($("#TitreAventure").val())+
    	"&CodeBillet="+$("#EnregistrerBillet").attr("data-ref")+
    	"&xmlinteret="+encodeURIComponent($("#ASInteret").attr("data-xml"))+
    	"&xmlprofil="+encodeURIComponent($("#ASProfil").attr("data-xml"))+
    	"&publier="+publier+
    	"&date="+$("#Annee").val()+"-"+$("#Mois").val()+"-"+$("#Jour").val(),
    	dataType: 'text',
    	success: function (result)
    	{
    	    ...
    	}
    });

    Ensuite mon action :

    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
    public function enregistrerbilletAction () {
     
    	$session = new Zend_Session_Namespace('user');
     
    	if ($session->CodeUser)
    	{
     
    		$table_billet = new Application_Model_TBillet;
     
    		$billet->date = $this->getParam("date");
    		$billet->UserID = $session->CodeUser;
    		$billet->CodeBillet = $this->getParam("CodeBillet");
    		$billet->titre = $this->getParam("titre");
    		$billet->txt = $this->getParam("txt");
    		$billet->interet = json_encode(simplexml_load_string('<xml>'.$this->getParam("xmlinteret").'</xml>'));
    		$billet->profil = json_encode(simplexml_load_string('<xml>'.$this->getParam("xmlprofil").'</xml>'));
    		$billet->publier = $this->getParam("publier");
     
     
    		if (intval($billet->CodeBillet) == 0)
    		{
    			$this->view->result = $table_billet -> enregistrerBillet($billet);
    		}
    		else
    		{
    			$this->view->result = $table_billet -> majBillet($billet);
    		}
     
    	}
    	else
    	{
    		$this->view->result = 'error';
    	}
     
    }
    Mes modèles :

    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
    public function enregistrerBillet ($pObjBillet) {
     
    	$ajouterBillet = $this->createRow();
     
    	$ajouterBillet->DateBillet = $pObjBillet->date;
    	$ajouterBillet->UserID = $pObjBillet->UserID;
    	$ajouterBillet->TitreBillet = $pObjBillet->titre;
    	$ajouterBillet->TxtBillet = $pObjBillet->txt;
    	$ajouterBillet->JSONInteret = $pObjBillet->interet;
    	$ajouterBillet->JSONProfil = $pObjBillet->profil;
    	$ajouterBillet->Publie = $pObjBillet->publier;
     
    	return $ajouterBillet->save();
     
    }
     
    public function afficherBillet ($pRef, $pUser = 0) {
     
    	$query = "
    	SELECT DateBillet, UserID, TitreBillet, TxtBillet, JSONInteret, JSONProfil, JSONCommentaire, Publie
    	FROM billet
    	WHERE CodeBillet = ".intval($pRef)." AND (Publie = 1 OR UserID = ".intval($pUser).")";
     
    	return $this->getAdapter()->fetchRow($query, null, Zend_Db::FETCH_OBJ);
     
    }
    Et j'affiche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function newstoryAction () {
     
        [....]
     
        $billet = $table_billet -> afficherBillet ($CodeBillet, $session->CodeUser);
     
        [...]
     
        $this->view->result = '[...] <textarea id="TA" style="width:662px; height:375px; padding:5px; font-family: monospace;">'.htmlspecialchars($billet->TxtBillet).'</textarea> [...]';
     
    }

  6. #6
    Membre expérimenté Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Par défaut
    Ok, donc aucun traitement avec zend_form, aucun ajout de fonction lors de l'insert et pas d'utilisation de l'aide de vue escape().

    Il me semble que la seul chose que te fait zend par défaut, c'est de protéger tes données des injections sql. Donc normalement, ton texte html devrait passer dans la BD.

    Après, je ne connais pas la fonction encodeURIComponent() qui si j'ai bien compris te fait juste un encodage.

    Sinon vu que pour l'affichage tu utilises htmlspecialchars() ça peut jouer, as-tu une balise meta pour le charset ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
    Sinon peut-être le charset côté instanciation Zend_Db

    Config.ini
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resources.db.params.charset = "utf8"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Spip] Tableau non affiché dans la partie "Articles les plus récents"
    Par Gigi95 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 27/09/2007, 12h27
  2. Google Analytics sur une page non affichée dans un navigateur
    Par Fdescamps dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/06/2007, 08h18
  3. [AJAX] retour chariot non gardé
    Par cisco112 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/04/2007, 15h10
  4. [Débutant] Objets non affichés dans ma fenêtre
    Par G_angel dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 30/01/2007, 13h03
  5. Retour a la ligne dans un textarea quand le mot est trop long
    Par avogadro dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/11/2006, 15h35

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