Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: mysql_real_escape_string

Papu [22.02.2006 13:11:45]

#

Tallennan tekstiä tietokantaan ja käytän siinä mysql_real_escape_string()-funktiota. Onko sitten mitään konstia tehdä tuo ikään kuin toisinpäin? Siis kun taas luen tietokannasta tietoa ja tulostan sen sivuille, niin se näkyisi kuten se on alunperin kirjoitettu ilman funktion lisäämiä erikoismerkkejä ym.

Antti Laaksonen [22.02.2006 13:20:01]

#

Tietokannasta luettuna ylimääräisiä kenoviivoja ei pitäisi tulla, koska kenoviivat lisätään vain sen vuoksi, että SQL-kysely ei sotkeennu. Mutta yleisesti ylimääräiset kenoviivat saa pois stripslashes-funktiolla. Tämä funktio on tarpeen esim. silloin, kun lomaketiedot näytetään suoraan sivulla viemättä niitä ensin tietokantaan.

Papu [22.02.2006 13:24:14]

#

Kiitoksia vastauksesta!
Minulle on kyllä käynyt niin, että kun tallennan tietokantaan esim. "tekstiä" niin sivuilla se on sitten näkynyt muodossa \"tekstiä\". Mutta jos sen saa korjattua tuolla stripslashes-funktiolla, niin hyvä.

Antti Laaksonen [22.02.2006 13:27:37]

#

Onkohan tekstiin lisätty vahingossa kaksi kertaa kenoviivat? Lomaketietoihin tulee nimittäin automaattisesti kenoviivat, jos palvelimen magic_quotes_gpc-asetus on päällä. Silloin kenoviivoista ei tarvitse itse huolehtia.

Ongelma kyllä varmaan korjaantuu stripslashes-funktiolla tekstien tulostuksessa sivulle, mutta olisi parempi, jos tekstit olisivat tietokannassa ilman ylimääräisiä kenoviivoja.

folio [22.02.2006 13:47:54]

#

PHP:ssa on myös asetus nimeltä magic_quotes_runtime, manuaali kertokoon mitä se tekee. Itse olen käyttänyt seuraavanlaista tapaa, jolloin skriptit toimivat palvelimen asetuksista riippumatta.

@set_magic_quotes_runtime(0);

if( @get_magic_quotes_gpc() )
{
  $_GET    = array_map('stripslashes', $_GET);
  $_POST   = array_map('stripslashes', $_POST);
  $_COOKIE = array_map('stripslashes', $_COOKIE);
}

// ja tietokantakyselyn muodostus esim. näin:
$username = mysql_real_escape_string($_GET['username']);

$sql = sprintf("SELECT * FROM users WHERE username = '%s'", $username);

echo 'sql: ', $sql;

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta