Oppure

Loading
22/01/13 20:55
sule
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à.
aaa
23/01/13 12:47
Qwertj
Gli \n sono conservati in una textarea, che filtri applichi al testo prima di inserirlo nel db?
aaa
25/01/13 15:33
sule
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:

public function aggiungiCodice() {  
		
		$titolo=      $_REQUEST['titolo'];
		$descrizione= $_REQUEST['descrizione'];
		$codice=      $_REQUEST['codice'];
		
		$ECodice=new EPostedCode();
		$session=USingleton::getInstance('USession');
		$autore=$session->leggi_valore('username');

                $timestamp=time();
                $data=date($timestamp,"Y-m-d");
               
                $ECodice->setTitolo($titolo);
		$ECodice->setDescrizione($descrizione);
		$ECodice->setCodice($codice);
		$ECodice->setAutore($autore);
                $ECodice->setData($data);
		
		
		$FCodice=new FPostedCode();
		$success;
		$success=$FCodice->store($ECodice);
		if ($success){
			$this->mostraPostedSuccess(true);
		}
		else {
			$this->mostraPostedSuccess(false);
		}
	}


Questa la funzione store():

public function store($object){
		
		$id = parent::store($object);
		if($id!=false){
			$object->setId($id);
			return true;//.'Codice inserito con successo.';
		}
		else {
			return false;//.'Codice non inserito.';
		}
	}


Ancora:

//Memorizza sul DB lo stato di un oggetto
	public function store($object) {
		$i=0;
		$values='';
		$fields='';
		$arr=$object->getObjectAsArray();
		foreach ($arr as $key=>$value) {
			/*Evita che il valore di chiave automatica venga inviato nella query, dato che deve essere
			  incrementato automaticamente dal DB */
			if (!($this->_auto_increment && $key == $this->_key)) // && substr($key, 0, 1)!='_') perch�?
			{
				/*Vengono definiti i campi che devono essere inseriti nella tabella, 
				  $fields e $values sono due stringhe che andranno a comporre la query da inviare al DB*/ 
				 if ($i==0) {
					$fields.='`'.$key.'`';
					$values.='\''.$value.'\'';
				} else {
					$fields.=', `'.$key.'`';
					$values.=', \''.$value.'\'';
				}
				$i++;
			}
		}
		
	
		$query='INSERT INTO '.$this->_table.' ('.$fields.') VALUES ('.$values.')';  /*Viene completata la query da inviare
																					  al DB con le istruzioni in mysql*/
		$return = $this->query($query);   //Viene effettuata la query al DB
		
		if ($this->_auto_increment) {
			$query='SELECT LAST_INSERT_ID() AS `id`';
			$this->query($query);
			
			$result=$this->getResult();//Conterr� l'ultima riga caricata nella tabella, o FALSE se non ci sono pi� righe
			
			return $result['id'];}  /*Invia l'id generato alla funzione store() delle classi derivate, che aggiorneranno
									  l'oggetto Entity con l'id ricevuto*/
		else {
			return $return;
		}
	}


Grazie per l'interessamento.
aaa
25/01/13 16:37
Qwertj
E' questo che mi interessa
 
$ECodice->setTitolo($titolo);
$ECodice->setDescrizione($descrizione);


Non fai alcun escape dell'input? :-|
aaa
25/01/13 17:18
sule
Il problema non è li. Nel caso seguente, dove non faccio alcun escape prima di inserire i dati del db, tutto funziona.

File prova.html

<html >
<head>
<meta charset="UTF-8" /> 
<head>
<body>
<form method = "post" action = "nl2br_test.php">
<textarea type="text" name="testo"></textarea>
<input type="submit" value="invia">
</form>

</body>
<html>


File nl2br_test.php
<?php


//connessione al database

$link1 = mysql_connect('localhost', 'root', 'root');
if (!$link1) {
  die ('Non riesco a connettermi: ' . mysql_error());
}

$db_selected = mysql_select_db('test', $link1);
if (!$db_selected) {
  die ("Errore nella selezione del database: " . mysql_error());
}

$testo = $_REQUEST['testo'];
$query = "INSERT INTO Code (codice) VALUES ('$testo')";
if (@mysql_query($query)) 
 
            {
 
            echo '<p>Aggiunta con successo</p>';
 
            }
 
            else {
 
                echo 'errore '. mysql_error().' ';
 
                    }


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.

aaa
26/01/13 13:11
Qwertj
E l'escape dove sarebbe?
Nel codice che mi hai postato tu (entrambi gli esempi) non riesco a trovarlo...
aaa