Ja bih se nadovezao dalje:
Tvoja nadopuna bi vjerovatno radila u vecini slucajeva, ali u slucajevima kad imas u unesenoj vrijednosti npr. " \\ Rock 'n' Roll slashes \\ " ( primjera radi :) ), sta bi se desilo u slucajevima kad je magic_quotes_gpc ukljucen, a sta kad nije? I sta bi bilo da koristis dodatno addslashes pri upisu i stripslashes pri ispisu iz baze?
Idemo redom...
Ako je u php.ini ukljucen magic_quotes_gpc = On , onda ce taj dopunski addslashes dodati slasheve na vec automatski dodane slasheve, pa ce ti onda npr. izgledati ovako:
Imas polje u koje se unosi neki tekst, kojeg onda proslijedjujesh dalje skripti klikom na submit. Recimo da taj uneseni tekst ima vrijednost:
\\ Rock 'n' Roll slashes \\
Kad submitash tu vrijednost skripti, te pod uslovom da je ukljuchen magic_quotes_gpc, automatski ce se dodati slashevi i imaces onda vrijednost:
\\\\ Rock \'n\' Roll slashes \\\\
Ako ti sad uradish jos jedan dodatni potez sa addslashes funkcijom, imaces:
\\\\\\\\ Rock \\\'n\\\' Roll slashes \\\\\\\\
Kad sve to stavis u bazu, pa potom izvadis iz baze, uradis stripslashes i ispises, trebalo bi da radi.
Medjutim, sta ako magic_quotes_gpc nije ukljucen? U novim verzijama PHP-a, ta opcija je po defaultu iskljucena. Sta ce se desiti onda?
Kad na isti nacin ubacis u bazu tu vrijednost, na kraju ces kao ispis imati:
\ Rock 'n' Roll slashes \
Zashto?
+ 1. ako je magic_quotes_gpc ukljucen, automatski se dodaju slashevi
+ 2. ti dodajesh dopunske funkcijom addslashes
- 3. kad vadis iz baze, automatski se uklanjaju escape slashevi
- 4. sa stripslashes skidash slasheve dodane funkcijom addslashes
Medjutim, ako je magic:quotes_gpc iskljucen, kao sto jeste u vecini slucajeva, onda imas:
-
+
-
-
Dakle, nesto ne valja, imas manjka slashovanja :)
Mnogi koriste slijedecu metodu da bi otkrili da li je ukljucen magic_quotes_gpc i na osnovu toga rade daljnje operacije:
Code:
if (get_magic_quotes_gpc()) {
// Overrides GPC variables
for (reset($HTTP_GET_VARS); list($k, $v) = each($HTTP_GET_VARS); )
$$k = $HTTP_GET_VARS[$k] = stripslashes($v);
for (reset($HTTP_POST_VARS); list($k, $v) = each($HTTP_POST_VARS); )
$$k = $HTTP_POST_VARS[$k] = stripslashes($v);
for (reset($HTTP_COOKIE_VARS); list($k, $v) = each($HTTP_COOKIE_VARS); )
$$k = $HTTP_COOKIE_VARS[$k] = stripslashes($v);
ini_set("magic_quotes_gpc",0);
}
Ako ovo ubacis na pocetak skripte, sve bi trebalo da radi.
Btw. pogledaj i funkciju mysql_escape_string(), koja je slicna funkciji addslashes(), samo sto ima neke dodatne karaktere koje "escapea".
Nadam se da ce ovo mnogima koristiti, iako nije bash ontopic.
Moderatori bi mogli ovo staviti u FAQ, ako smatraju da je korisno.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA