En als ik alle input die gedaan wordt in een query weg schrijf als volgt:
mysql_query("INSERT INTO leden(id,gebruiker,aangemeld,etc..." VALUES('','".$_POST['gebruiker']."','".$_POST['datum']."',etc...)) or die(mysql_error());
Is dit veilig omdat ik het tussen ' ' zet en dan ".$_POST['var']."
Nee dat is niet veilig! Een ' in de input van een gebruiker levert nu namelijk een probleem op. En juist dit probleem zou misbruikt kunnen worden in de vorm van sql injectie.
Alle input van een gebruiker in de vorm van een string moet je beveiligen met de functie [php]mysql_real_escape_string[/php](). In het geval van integers zul je moeten controleren of het wel daadwerkelijk integers zijn. Gebruik bijvoorbeeld de functie [php]ctype_digit[/php]().
Voor checken of het een getal is kan je net zo goed intval() gebruiken. elk getal maakt die het integer value van. Deze kan je in tegenstelling tot is_numeric() gewoon in je query gebruiken, net zoals mysql_real_escape_string()
Hmm, intval() zou ik toch liever niet gebruiken. Deze functie kan nogal eens onverwachte resultaten opleveren. Zo kun je bijvoorbeeld al geen getallen groter dan 2147483647 (de maximale waarde van een integer op een 32 bit systeem) gebruiken.
En kijk bijvoorbeeld ook eens naar dit voorbeeldje.
<?php
echo intval(0031); // 25
?>
Je denkt dat je de landcode van Nederland ingevuld hebt, maar in je database komt 25 te staan...
Hey!! Dat is nieuw voor mij, maar goed dat je het zegt :) Dat is wel erg raar, maar dan zal ik dat zelf alleen gebruiken als het om een id of een normaal nummer gaat. (deed ik toch al, anders vallen voorloop nullen weg, dus dit soort dingen deed ik met een regex)