Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
PHP - Problema gestione caratteri a capo textarea
Forum - PHP - Problema gestione caratteri a capo textarea

Avatar
sule (Normal User)
Newbie


Messaggi: 3
Iscritto: 22/01/2013

Segnala al moderatore
Postato alle 21:55
Martedì, 22/01/2013
Salve a tutti!
Premetto di aver cercato riguardo all'argomento, ma non riesco proprio a venirne a capo.
Il mio problema è il seguente.
Ho una textarea in cui un utente dovrebbe andare ad inserire del codice. Tutto ok finché il contenuto della textarea non viene salvato sul db mysql. Qui vedo che i caratteri "a capo" ottenuti col tasto invio non vengono salvati, e quindi in fase di stampa -che effettuo tramite smarty- ottengo una riga che non mi tiene conto della formattazione della textarea.
Se vado manualmente ad inserire un "a capo" nel db, in fase di stampa riesco a visualizzare l'andatura a capo. A questo punto credo il problema sia nel salvataggio su db.
Sarei grato a chi sapesse illuminarmi sulla questione.
Grazie per la disponibilità.

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 13:47
Mercoledì, 23/01/2013
Gli \n sono conservati in una textarea, che filtri applichi al testo prima di inserirlo nel db?

PM Quote
Avatar
sule (Normal User)
Newbie


Messaggi: 3
Iscritto: 22/01/2013

Segnala al moderatore
Postato alle 16:33
Venerdì, 25/01/2013
Inserisco del codice, magari può essere utile. Premetto che la comunicazione col db avviene col corretto set di caratteri, quindi il problema credo sia al momento del salvataggio nel db. Posto la funzione aggiungiCodice() associata al Submit della textarea:

Codice sorgente - presumibilmente PHP

  1. public function aggiungiCodice() {  
  2.                
  3.                 $titolo=      $_REQUEST['titolo'];
  4.                 $descrizione= $_REQUEST['descrizione'];
  5.                 $codice=      $_REQUEST['codice'];
  6.                
  7.                 $ECodice=new EPostedCode();
  8.                 $session=USingleton::getInstance('USession');
  9.                 $autore=$session->leggi_valore('username');
  10.  
  11.                 $timestamp=time();
  12.                 $data=date($timestamp,"Y-m-d");
  13.                
  14.                 $ECodice->setTitolo($titolo);
  15.                 $ECodice->setDescrizione($descrizione);
  16.                 $ECodice->setCodice($codice);
  17.                 $ECodice->setAutore($autore);
  18.                 $ECodice->setData($data);
  19.                
  20.                
  21.                 $FCodice=new FPostedCode();
  22.                 $success;
  23.                 $success=$FCodice->store($ECodice);
  24.                 if ($success){
  25.                         $this->mostraPostedSuccess(true);
  26.                 }
  27.                 else {
  28.                         $this->mostraPostedSuccess(false);
  29.                 }
  30.         }



Questa la funzione store():

Codice sorgente - presumibilmente Php

  1. public function store($object){
  2.                
  3.                 $id = parent::store($object);
  4.                 if($id!=false){
  5.                         $object->setId($id);
  6.                         return true;//.'Codice inserito con successo.';
  7.                 }
  8.                 else {
  9.                         return false;//.'Codice non inserito.';
  10.                 }
  11.         }



Ancora:

Codice sorgente - presumibilmente Php

  1. //Memorizza sul DB lo stato di un oggetto
  2.         public function store($object) {
  3.                 $i=0;
  4.                 $values='';
  5.                 $fields='';
  6.                 $arr=$object->getObjectAsArray();
  7.                 foreach ($arr as $key=>$value) {
  8.                         /*Evita che il valore di chiave automatica venga inviato nella query, dato che deve essere
  9.                           incrementato automaticamente dal DB */
  10.                         if (!($this->_auto_increment && $key == $this->_key)) // && substr($key, 0, 1)!='_') perch�?
  11.                         {
  12.                                 /*Vengono definiti i campi che devono essere inseriti nella tabella,
  13.                                   $fields e $values sono due stringhe che andranno a comporre la query da inviare al DB*/
  14.                                  if ($i==0) {
  15.                                         $fields.='`'.$key.'`';
  16.                                         $values.='\''.$value.'\'';
  17.                                 } else {
  18.                                         $fields.=', `'.$key.'`';
  19.                                         $values.=', \''.$value.'\'';
  20.                                 }
  21.                                 $i++;
  22.                         }
  23.                 }
  24.                
  25.        
  26.                 $query='INSERT INTO '.$this->_table.' ('.$fields.') VALUES ('.$values.')';  /*Viene completata la query da inviare
  27.                                                                                                                                                                           al DB con le istruzioni in mysql*/
  28.                 $return = $this->query($query);   //Viene effettuata la query al DB
  29.                
  30.                 if ($this->_auto_increment) {
  31.                         $query='SELECT LAST_INSERT_ID() AS `id`';
  32.                         $this->query($query);
  33.                        
  34.                         $result=$this->getResult();//Conterr� l'ultima riga caricata nella tabella, o FALSE se non ci sono pi� righe
  35.                        
  36.                         return $result['id'];}  /*Invia l'id generato alla funzione store() delle classi derivate, che aggiorneranno
  37.                                                                           l'oggetto Entity con l'id ricevuto*/
  38.                 else {
  39.                         return $return;
  40.                 }
  41.         }



Grazie per l'interessamento.

PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 17:37
Venerdì, 25/01/2013
E' questo che mi interessa
Codice sorgente - presumibilmente Plain Text

  1. $ECodice->setTitolo($titolo);
  2. $ECodice->setDescrizione($descrizione);



Non fai alcun escape dell'input? :-|

PM Quote
Avatar
sule (Normal User)
Newbie


Messaggi: 3
Iscritto: 22/01/2013

Segnala al moderatore
Postato alle 18:18
Venerdì, 25/01/2013
Il problema non è li. Nel caso seguente, dove non faccio alcun escape prima di inserire i dati del db, tutto funziona.

File prova.html

Codice sorgente - presumibilmente PHP

  1. <html >
  2. <head>
  3. <meta charset="UTF-8" />
  4. <head>
  5. <body>
  6. <form method = "post" action = "nl2br_test.php">
  7. <textarea type="text" name="testo"></textarea>
  8. <input type="submit" value="invia">
  9. </form>
  10.  
  11. </body>
  12. <html>



File nl2br_test.php
Codice sorgente - presumibilmente Php

  1. <?php
  2.  
  3.  
  4. //connessione al database
  5.  
  6. $link1 = mysql_connect('localhost', 'root', 'root');
  7. if (!$link1) {
  8.   die ('Non riesco a connettermi: ' . mysql_error());
  9. }
  10.  
  11. $db_selected = mysql_select_db('test', $link1);
  12. if (!$db_selected) {
  13.   die ("Errore nella selezione del database: " . mysql_error());
  14. }
  15.  
  16. $testo = $_REQUEST['testo'];
  17. $query = "INSERT INTO Code (codice) VALUES ('$testo')";
  18. if (@mysql_query($query))
  19.  
  20.             {
  21.  
  22.             echo '<p>Aggiunta con successo</p>';
  23.  
  24.             }
  25.  
  26.             else {
  27.  
  28.                 echo 'errore '. mysql_error().' ';
  29.  
  30.                     }



Quando vado a leggere nel campo codice del db, inserendo caratteri " a capo", riesco a vederli. Inserendo qualcosa come

ciao
ciao

vedo effettivamente

ciao
ciao

Nell'esempio del post precedente invece ottengo ciaociao sia nel campo codice del db che, ovviamente, in uscita.


PM Quote
Avatar
Qwertj (Dev Team)
Guru


Messaggi: 678
Iscritto: 30/05/2011

Segnala al moderatore
Postato alle 14:11
Sabato, 26/01/2013
E l'escape dove sarebbe?
Nel codice che mi hai postato tu (entrambi gli esempi) non riesco a trovarlo...

PM Quote