PDA

View Full Version : PHP - problema con apici singoli


Fabiorayden
02-07-2007, 14:54
Ho un problema con php e mysql.
Ho un form con dei campi di input e tramite delle funzioni faccio l'inserimento, il recupero e l'aggiornamento di ciò che è stato digitato dall'utente nel database.
Tutto mi funziona se in tali campi di input non inserisco gli apici singoli.

Girando per la rete ho visto che esistono le funzioni mysql_escape_string e addslashes (per aggiungere i \ prima degli apici) e stripslashes per toglierli.

Se nel campo di input digito c'è, nel database viene inserito correttamente (c\'è) mentre quando lo recupero dalla pagina in php (usando stripslashes) mi viene visualizzata solo la c

kk3z
02-07-2007, 22:19
Se
$value = "c'è";

E l'input è
<input type='text' name='ciao' value='<?= $value ?>'>

Il codice HTML risultante sarà
<input type='text' name='ciao' value='c'è'>
cioè
1) value è 'c'
2) "è" diventa una sorta di attributo
3) il codice html che segue non si vedrà fino a quando non c'è un altro '

Se tu usi i doppi apici:
<input type="text" name="ciao" value="c'è">
Il problema è risolto :)

PS: nel database non dovrebbe apparire come c\'è. Questo vuol dire che il valore è stato "escapato" 2 volte: non dovrebbe essere necessario usare stripslashes dai dati dal database.

Fabiorayden
02-07-2007, 23:36
Il problema si presenta quando devo recuperare i dati dal database mysql.

Se io nel campo di input della pagina php digito per esempio nell' '800 c'era e "dò in pasto" il contenuto del campo alla funzione che deve farmi la insert o l'upload mi compare quest'errore:
Errore di sintassi nella query SQL vicino a '800 c'era' WHERE id=... linea 1, ciò non si verifica se prima di eseguire la query uso $var_mod = mysql_escape_string($var) dove $var è il contenuto del campo di input, la query viene eseguita correttamente e nella tabella viene inserito nell' '800 c'era con tutti gli apici.

Quando voglio estrarre i dati dalla tabella e lo inserisco nel campo input come value (come giustamente dicevi) non mi viene visualizzata tutta la stringa, ma solo nell .

cionci
03-07-2007, 09:44
Io sinceramente uso sempre la funzione htmlentities con l'opzione ENT_QUOTES, l'unica cosa è che aumenta un po' la dimensione dei dati presenti nel database...

Fabiorayden
03-07-2007, 10:33
Io sinceramente uso sempre la funzione htmlentities con l'opzione ENT_QUOTES, l'unica cosa è che aumenta un po' la dimensione dei dati presenti nel database...

Grazie mille, ora tutto funziona :cincin: