Već dugo me tlači upis HTML sadržaja u mysql bazu. Nisam web programer nego nešto sasvim drugo, ali povremeno mi i web programiranje dođe "u ruke" kao posao koji treba obaviti. Pošto neizostavno radim CMS jer mi se ne da puno raditi na updateanju weba, zaključila sam da je najjednostavniji način za updateanje stranice imati fixni cms sustav sa dizajnom; te samo u mysql bazu stavljati sadržaj.
ali.
I sadržaj često treba sadržavati html tagove; od onih benignih (paragraf, bold...) pa do onih problematičnijih (linkovi itd). Također tu su i simboli koji često naljute mysql bazu pa se ne spremaju i ne prikazuju kako spada - neki od njih korisni i jednostavni kao na primjer navodnici - ".
Da stvar bude ljepša; na nekim serverima se to hendla automatski a na nekima ne - a kada su postavke vašeg development servera različite od onih na "pravom" serveru, pa još web stavljaju na više servera... ma milina.
Na webu ima podosta rješenja za isti problem; neka rade neka ne... evo kako mi je konačno proradila stvar:
1. Za točno spremanje sadržaja u msql bazu, potrebno je prvo napisati sljedeću funkciju:
function mysql_escape_gpc($dirty)
{
if (ini_get('magic_quotes_gpc'))
{
return $dirty;
}
else
{
return mysql_real_escape_string($dirty);
}
}
Funkcija provjerava koristi li server automatski magic_quotes_gpc, u kom slučaju nije potrebno eksplicitno pozivati mysql_real_escape_string() funkciju. Ako magic_quotes_gps nije aktivan na serveru, funkcija će pročistiti sadržaj.
2. Kod spremanja u bazu, potrebno je funkciju pozvati:
$cleancontent = mysql_escape_gpc($_POST['prOpis']);
$queryUpdateProd= "UPDATE " .TBL_OBJEKTI. " SET ";
$queryUpdateProd.= " , {$props['prOpis']} = '".$cleancontent."'";
$queryUpdateProd.= " WHERE id = '".$prodId."'";
3. Kod ispisa sadržaja na stranicu i/li u edit box, potrebno je pozvati funkciju stripcslashes:
$cleancontent = stripcslashes($props['detOpis']);
$html.= $cleancontent;
return $html;