PDA

View Full Version : [php + mysql] Caratteri accentati e Sicurezza


CercoAiutoo
09-11-2009, 09:26
Salve a tutti,
Ho creato un form:

<form method="post" action="modifica.php" enctype="multipart/form-data">
<input type="text" size="70" name="frase1">
<input type="submit" size="10" value="Invia" name="go">
</form>

e lo script per aggiungere la frase nel DB:

if($_POST['frase1']!=""){

$fr= mysql_real_escape_string($_POST['frase1']);

$query = "INSERT INTO `frasi` (`frase`) VALUES
( '".$_POST['frase1']."')";

$risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );

}


Solo che al posto dei caratteri accentati mi escono caratteri tutti strani come: ù è
Inoltre vicino agli apostrofi mi compare anche uno slash ( perchè uso mysql_real_escape_string per evitare sql injection ).


Come devo fare per mettere tutto a posto ? non capisco :stordita:

cruyffissimo
09-11-2009, 09:28
perchè usi la funzione, e poi il risultato non lo usi?

vhost87
09-11-2009, 09:51
Salve a tutti,
Ho creato un form:

<form method="post" action="modifica.php" enctype="multipart/form-data">
<input type="text" size="70" name="frase1">
<input type="submit" size="10" value="Invia" name="go">
</form>

e lo script per aggiungere la frase nel DB:

if($_POST['frase1']!=""){

$fr= mysql_real_escape_string($_POST['frase1']);

$query = "INSERT INTO `frasi` (`frase`) VALUES
( '".$_POST['frase1']."')";

$risultato = mysql_query($query) or die("Query fallita: " . mysql_error() );

}


Solo che al posto dei caratteri accentati mi escono caratteri tutti strani come: ù è
Inoltre vicino agli apostrofi mi compare anche uno slash ( perchè uso mysql_real_escape_string per evitare sql injection ).


Come devo fare per mettere tutto a posto ? non capisco :stordita:

la funzione per la sicurezza va bene, elimina tutti gli escape.
però vedi di usare $fr :D

Tornando al discorso dei caratteri, classico. Che codifica usi per MySQL?
Inoltre... prova a &agrave; e &egrave;, usare quindi le codifiche HTML dei caratteri accentati

CercoAiutoo
09-11-2009, 10:02
Si avete ragione, avevo sbagliato a scrivere qui ma sullo script originale era apposto :D


Ecco la mia tabella:

CREATE TABLE IF NOT EXISTS `frasi` (
`frase_id` int(9) unsigned NOT NULL AUTO_INCREMENT,
`frase` text NOT NULL,
PRIMARY KEY (`frase_id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Escono ancora slash e lettere accentate strane... cosa dovrei fare ? :stordita:

vhost87
09-11-2009, 10:06
Si avete ragione, avevo sbagliato a scrivere qui ma sullo script originale era apposto :D


Ecco la mia tabella:

CREATE TABLE IF NOT EXISTS `frasi` (
`frase_id` int(9) unsigned NOT NULL AUTO_INCREMENT,
`frase` text NOT NULL,
PRIMARY KEY (`frase_id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


Escono ancora slash e lettere accentate strane... cosa dovrei fare ? :stordita:


MySQL non converte i caratteri speciali in entità HTML. Devi farlo tu e memorizzare l'entità HTML.
Non è un problema di MySQL se visualizzi quei caratteri :)

CercoAiutoo
09-11-2009, 10:16
MySQL non converte i caratteri speciali in entità HTML. Devi farlo tu e memorizzare l'entità HTML.
Non è un problema di MySQL se visualizzi quei caratteri :)


Ho usato questa funzione prima dell' inserimento nel DB :

mysql_set_charset('utf8',$db_con);

E questa funzione prima di visualizzare le frasi con una SELECT:

mysql_set_charset('latin1',$db_con);

e le lettere accentate ora si vedono e inseriscono bene :D
Ho fatto bene o è una soluzione "grezza" ?


Se va bene ora rimane solo il problema degli slash ( es. \' al posto di ' )
:stordita: :help:

vhost87
09-11-2009, 10:18
Ho usato questa funzione prima dell' inserimento nel DB :

mysql_set_charset('utf8',$db_con);

E questa funzione prima di visualizzare le frasi con una SELECT:

mysql_set_charset('latin1',$db_con);

e le lettere accentate ora si vedono bene :D
Ho fatto bene o è una soluzione "grezza" ?


Se va bene ora rimane solo il problema degli slash ( es. \' al posto di ' )
:stordita: :help:

Va bene, anche se potrebbe non essere condivisibile la logica...
htmlstripslashes() può venirti in aiuto :) per l ultimo problema

CercoAiutoo
09-11-2009, 10:30
Va bene, anche se potrebbe non essere condivisibile la logica...
htmlstripslashes() può venirti in aiuto :) per l ultimo problema

htmlstripslashes non l' ho trovata.
ho usato stripslashes e poi htmlentities e funziona tutto bene grazie :) :rolleyes:

vhost87
09-11-2009, 10:30
htmlstripslashes non l' ho trovata.
ho usato stripslashes e poi htmlentities e funziona tutto bene grazie :) :rolleyes:

Ecco la ricordavo male, senza HTML davanti :)