Met ‘mysql_real_escape_string‘ kun je eenvoudig enkele quotes en dubbele quotes (en \x00, \n, \r, \, ‘, ” en \x1a) ‘escapen’. Hiermee voorkom je sql injectie. Volgens php.net moet deze functie altijd gebruikt worden wanneer er data vanuit een form in een database geplaatst wordt.
Niet echt lastig:
$myVar = mysql_real_escape_string($_POST["naam"]);
$myQuery = “UPDATE table SET naam = ‘” . $myVar . “‘”;
So far, so good.
Wanneer je een gebruiker de gelegenheid biedt om zijn ingevoerde content aan te kunnen passen via een formulier, kunnen er vervelende problemen ontstaan.
<input name=”naam” type=”text” value=”<?=$myRs[0]["naam"]?>” />
De output is namelijk voorzien van slashes. Je text veld bevat dan bijvoorbeeld [waarde\'s]. Niet echt handig. Zeker niet als je deze input een keer of drie submit. Je krijgt dan: [waarde\\\'s].
De functie ‘stripslashes‘ is dan een voor de hand liggende oplossing. Alleen krijg je dan een probleem met je dubbele quotes. Als je deze text probeert in te voeren [Deze "fiets" is van sjaak], zal dat niet lukken. Je krijgt het slechts voor elkaar om [Deze ] in te voeren. De eerste dubbele quote wordt namelijk gezien als afsluiter van de value in je input tag.
De enige oplossing die ik kon bedenken die in alle gevallen werkt is ‘htmlentities‘.
Dus: <input name=”naam” type=”text” value=”<?=htmlentities($myRs[0]["naam"])?>” />
Je kunt dan echt helemaal los met quotes en dubbele quotes. Alles gaat de database is.