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.
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.
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ä.
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.
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;
Aihe on jo aika vanha, joten et voi enää vastata siihen.