Vedo spesso dei siti dove ci sono errori nelle query, specialmente in query di insert.
Il problema è dovuto agli inserimenti di stringhe contenenti caratteri usati come separatori per le query (apici o virgolette).
quindi vengono usati addslashes che sconsiglio fortemente, soprattutto se vogliamo creare applicazioni web portabili su più server e indipendenti dalla versione mysql e codifiche installate.
Da sapere:
la direttiva magic_quotes di php aggiunge slash ai caratteri apici e virgolette ai dati POST GET e COOKIE, quindi consentirebbe a semplici query di agire correttamente. Sbagliato !! è una impostazione per principianti, poi avrete probabilmente problemi a seconda dei caratteri che usate come separatore nella query e sarete vincolati alla versione di mysql e codifica. Se è abilitata (e lo controllate con get_magic_quotes_gpc() ) , fate uno stripslashes ai dati in POST/GET/COOKIE e processate invece i campi con
mysql_real_escape_string
(PHP 4 >= 4.3.0, PHP 5)
mysql_real_escape_string – Aggiunge le sequenze di escape ai caratteri speciali in una stringa per l’uso in una istruzione SQL, tenendo conto dell’attuale set di caratteri della connessione.
poi la query la eseguite usando gli apici singoli (non virgolette !) come separatori
$testo = mysql_escape_string($_POST['testo', $conn]);
$q = "INSERT INTO `tab` (`id`, `testo`) VALUES ( ‘3′, ‘$testo’ )";
Leggendo sui forum, vedo che la soluzione a questo comune problema (chi ha usato php con database prima ne avrà sicuramente avuto a che fare) è convertire i caratteri in entità html e salvarli nel database. Sbagliato ! Nel database va salvato esattamente quello che inseriamo, poi in lettura ci applichiamo le htmlentities() e simili. Questo è praticamente obbligatorio per creare form di editing con vari controlli riempiti di valori già inseriti ed eviterà moltissimi problemi.



Leave a comment