Fout bij sturen formulier
Ik heb een formulier in html die uiteindelijk door een php script wordt verwerkt en de gegevens in de database worden gezet.
Nu gaat het alleen fout als er een naam in het veld wordt geplaatst met een '-teken. Dus: van 't Pad als naam.
Wie heeft voor mij de oplossing om dit te kunnen verwerken??
Bedankt voor de reactie.
Groet,
Nanno
mysql_real_escape_string($_POST['veld']);
of addslashes() of htmlentities()
Dank dank dank.....!!!
(kortom, geen & gezeik ofzo)
Als je een tekst verstuurd met een ' of " erin, dan kan het uit je query breken.
Stel je query is: "UPDATE table SET kolom = ' " . $waarde . " ' "
En waarde bevat: dit is een 'test'
Dan wordt het zo als query gezien:
"UPDATE table SET kolom = ' dit is een 'test' ' "
Dan zie je wel dat die aanhalingstekens worden gezien als deel van de query.
Dit gedeelte ziet ie wel als waarde: ' dit is een '
Omdat die omsloten is door 2 aanhalingstekens, maar daarna ziet ie opeens staan:
test' '
En dat hoort niet, daar hoort ie een , (comma) of andere SQL commando's te krijgen als WHERE, ORDER BY, LIMIT etc.
En die mysql_real_escape_string zorgt er dus voor dat mysql de aanhalingstekens binnen mysql_real_escape_string identificeert als een deel van de string zelf.
Ik heb het hier getest, maar het geeft exact hetzelfde resultaat.
Bijvoorbeeld
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$userName = "bl\aat'blaat";
echo mysql_real_escape_string($userName); // = bl\\aat\'blaat
echo addslashes($userName); // = bl\\aat\'blaat
?>
$userName = "bl\aat'blaat";
echo mysql_real_escape_string($userName); // = bl\\aat\'blaat
echo addslashes($userName); // = bl\\aat\'blaat
?>
Overigens gebruik ik htmlentities, zodat ik geen charset conflicten krijg.
Beveiligd te volgende items: " ' \ NULL
mysql_real_escape_string
Zelfde als addslashes, maar behandeld ook \n en \r
mysql_real_escape_string is dus net ff een beetje extra.
Bedankt voor je uitleg!
Ik ben weer een stuk wijzer geworden.
Eigenlijk komt het erop neer dat ik dit commando bij elke variabele gebruik, omdat ik met namen werk en teksten die het ' teken veel bevat.
Nogmaals bedankt, je hebt me uit de brand geholpen.
Groet,
Nanno
Dan kan je je queries voortaan zo doen:
mysql_query("UPDATE tabel SET kolom = '".toDB($deVariable)."'");
Dan hoef je niet elke keer die lange zin te typen.