PDA

View Full Version : [PHP,MYSQL] problema salvataggio record con conversione


ang3lx
13-06-2010, 23:19
Salve ragazzi,
hp un problema un pò strano
faccio una query tramite ajax che richiama via POST questo script che si occupa di inserire il record nel db e di stamparlo a video

il problema è che quando stampa sotto
<?php echo $textcontent; ?>
stampa tutto per bene, cioè con le è accentate
però se vado a controllare nel db mi ritrovo robbe tipo è
ora... htmlspecialchars() non doveva trasformarmi le entità html...e quindi salvare un qualcosa tipo &egrave; nel db e non è?

non capisco da cosa possa dipendere


<?php

require_once("db.php");

if(isSet($_POST['textcontent'])){
//$textcontent=$_POST['textcontent'];
// Sql data insert values into comment table

$data = time();
$textcontent = htmlspecialchars(trim("$_POST[textcontent]"));

mysql_query("INSERT INTO comments (post_id,msg,userid,data) VALUES ('$_POST[com_msgid]','$textcontent','$_SESSION[username]','$data')");

$qry = mysql_query("SELECT id,data,userid FROM comments WHERE post_id = '$_POST[com_msgid]' AND userid = '$_SESSION[username]' AND data = '$data' ORDER BY id DESC LIMIT 1");
$rowtmp = mysql_fetch_array($qry);

$qry_2 = mysql_query("SELECT foto_profilo FROM users WHERE username = '$_SESSION[username]'");
$my_prof = mysql_fetch_array($qry_2);
}



?>

<div class="load_comment">
<code class="bar<? echo $rowtmp["id"]; ?>" >
<?
if($_SESSION["username"] == $rowtmp["userid"]){
?>
<span class="delete_button" style="float:right; width:40px; text-align: center;"><a href="#" id="<?php echo $rowtmp["id"]; ?>" class="delete_update"><img src="images/hr.gif"></a></span>
<?
}
?>
<?
if($my_prof["foto_profilo"]){
print("<img src=\"TT.php?src=$my_prof[foto_profilo]&w=40\" style=\"float:left; margin-right:5px; padding:5px;\"/>");
}else{
print("<img src=\"TT.php?src=foto/no_foto.png&w=40\" style=\"float:left; margin-right:5px; padding:5px;\"/>");
}
?>
<b><a href="profile.php?u=<? echo $rowtmp["userid"]; ?>"><? echo $_SESSION["username"]; ?></a></b> commenta: <small>(<? echo _ago($rowtmp["data"]);?>fa)</small><br />
<?php echo $textcontent; ?>
<br />

</code>
</div>



ringrazio tutti in anticipo

TheBoss0310
14-06-2010, 08:02
la parte di codice non sembra completa, ma comunque tento di aiutarti:

$textcontent = htmlspecialchars(trim("$_POST[textcontent]"));

prova a non darglielo come stringa, perchè messo cosi sui legge: $_POST[textcontent] e non il contenuto di tale variabile, in alternativa se il problema persiste invece di usare htmlspecialchars, usa il più potente:

htmlentities

aggiungo: normalmente htmlentities o htmlspecialchars, va fatto al momento della stampa a video e non all'inserimento del db

ang3lx
14-06-2010, 11:55
la parte di codice non sembra completa, ma comunque tento di aiutarti:

$textcontent = htmlspecialchars(trim("$_POST[textcontent]"));

prova a non darglielo come stringa, perchè messo cosi sui legge: $_POST[textcontent] e non il contenuto di tale variabile, in alternativa se il problema persiste invece di usare htmlspecialchars, usa il più potente:

htmlentities

aggiungo: normalmente htmlentities o htmlspecialchars, va fatto al momento della stampa a video e non all'inserimento del db

ciao, ti rngrazio per la risposta
allora il codice è completo, come ho spiegato questo script si occupa solo di fare l'insert e di printarlo a video.
la cosa strana è che non converte quando salva nel database
quando faccio l'insert uso $textcontent che dovrebbe contenere già caratteri convertiti

per il momento ho risolto cambiando il charset del sito web e passando cosìa UTF-8

nelle tabelle ho un pò di caratteri accentati con problemi di visualizzazione, pian piano me li vado ad aggiornare

jeremy.83
14-06-2010, 11:59
ciao, ti rngrazio per la risposta
allora il codice è completo, come ho spiegato questo script si occupa solo di fare l'insert e di printarlo a video.
la cosa strana è che non converte quando salva nel database
quando faccio l'insert uso $textcontent che dovrebbe contenere già caratteri convertiti

per il momento ho risolto cambiando il charset del sito web e passando cosìa UTF-8

nelle tabelle ho un pò di caratteri accentati con problemi di visualizzazione, pian piano me li vado ad aggiornare

E' quella la chiave. Se hai una codifica diversa tra sito e DB la conversione verrà sempre un macello su alcuni caratteri specifici.

Ti consiglio invece di usare htmlentities o htmlspecialchars, di usare addslashes prima di inserire la variabile nella query ;)