Hoor niet heel vaak dat [func]ctype_digit[/func] een slechte functie is. Eigenlijk zijn er ook weinig slechte functies in de PHP core, ze doen tenslotte wat ze moeten doen.
Echter, [func]ctype_digit[/func] gaat na of een string die je meegeeft enkel bestaat uit cijfers. Het controleert dus niet (direct) of er een geldig getal wordt opgegeven. En wanneer je niet te streng wilt zijn in de invoer, maar soepeler, prefereer ik het volgende:
<?php
if(is_numeric($invoer) {
$invoer = round($invoer); //We willen tenslotte alleen werken met hele getallen.
$invoer = abs($invoer); //Negatieve waardes omzetten naar positieve waarden (de vraag is of je dat zo wilt).
}
?>
Daarnaast is [func]ctype_digit[/func] ook echt enkel goed als je gehele, positieve getallen wilt. Wanneer je dat niet wilt moet je er toch weer omheen.
Misschien een leuke uitdaging:
function realNumber($number, $digits = 0, $negative = false, $tolerance = 2) {}
Over het voorbeeld wat TS geeft in zijn beginpost.
$bericht_post = addslashes(htmlspecialchars(mysql_real_escape_string($_POST['bericht'])));
Dit is natuurlijk meer overkill dan beveiling. Daarnaast moet je ook nog eens zien al die slashes weer weg te filteren. En onthoud regel 1:
"Data in de database moet zo min mogelijk zijn bewerkt."
Tenslotte wil je niet altijd je data als HTML weergeven, maar soms ook aanpassen, naar PDF schrijven, enz.
En mag ik mijzelf dan nog één keer quoten?(a)
"Beveiliging is geen kwestie van de goede functies, het is een kwestie van logisch nadenken en alert zijn."