JS interesse |
|
$sql="INSERT INTO Persons (auteur, email, bericht)
VALUES
('$_POST[naam]','$_POST[mail]','$_POST[msg]')";
$sql="INSERT INTO Persons (auteur, email, bericht) VALUES ('$_POST[naam]','$_POST[mail]','$_POST[msg]')";
De laatste regel klopt op een heleboel manieren niet.
- $_POST[naam] -> $_POST['naam']
Php is best een rare taal. Ziet het naam staan, dan gaat het kijken of er een constante naam is. Alleen als dat er niet blijkt te zijn, dan neemt het de string "naam". Dit gaat dus in principe goed, maar het kan heel makkelijk kapot gaan als ze in php een constante naam inbouwen of jij een constante naam gaat gebruiken.
- $_POST['naam'] -> {$_POST['naam']}
Vuistregel: als je een array wilt hebben in een string zet er dan accolades omheen (of gebruik "voor" . $array['elem'] . "achter"), dit werkt altijd. Zonder werkt het alleen in sommige gevallen (1-dimensionale arrays met een numerieke index).
- Je script werkt in principe nu wel, maar bedenk eens wat er gebeurd als in de POST variabele de string "naam', 'iets anders" zit... je krijgt de query
"INSERT INTO Persons (auteur, email, bericht)
VALUES ('naam', 'iets anders','mail','msg')"
Hier zal het alleen een error opleveren, maar je zult vast doorhebben dat op de zelfde manier een hoop kan gedaan worden wat niet hoort te kunnen. Controleer of escape (bijv met mysql_real_escape_string) dus altijd de waardes voordat je ze in een query gooit.
edit: wat ik hier zeg is niet helemaal waar. Je variabelen worden als magic_quotes_gpc bij je php settings aan staat al geescaped, maar het is niet goed om hier op te vertrouwen. Je moet dus eigenlijk gewoon eerst kijken of het aan staat, als dat zo is stripslashes er op aanroepen om het in de originele staat terugbrengt, en vervolgens mysql_real_escape_string gebruiken om het (met jouw database instellingen in het achterhoofd) te escapen |