`m chiedo perché questo non funzionaphp validate intero
echo gettype($_GET['id']); //returns string
if(is_int($_GET['id']))
{
echo 'Integer';
}
Come convalidare i dati che passano da GET/POST se è intero?
`m chiedo perché questo non funzionaphp validate intero
echo gettype($_GET['id']); //returns string
if(is_int($_GET['id']))
{
echo 'Integer';
}
Come convalidare i dati che passano da GET/POST se è intero?
Il manual dice:
Per testare se una variabile è un numero o una stringa numerica (come ingresso forma, che è sempre una stringa), è necessario uso is_numeric().
alternativa è possibile utilizzare il test basato regex come:
if(preg_match('/^\d+$/',$_GET['id'])) {
// valid input.
} else {
// invalid input.
}
Sembra che si sta verificando se una stringa contiene un intero, piuttosto che se tale variabile è un numero intero. In tal caso, dovresti controllare la funzionalità regex (espressione regolare) di php. Permette di verificare la presenza di schemi molto specifici in una stringa per convalidarli per qualsiasi criterio. (Come ad esempio se contiene solo caratteri numerici)
Ecco la pagina php http://php.net/manual/en/function.preg-match.php
ed ecco un foglietto sulle espressioni regolari (per rendere la stringa $ pattern) http://regexpr.com/cheatsheet/
Prova:
if(isNumeric($_GET['id'])) {
$cast_int = (int)$_GET['id'];
}
if(isset($cast_int)) {
echo gettype($cast_int)."<br />\n";
if(is_int($cast_int))
{
echo 'Integer'."<br />\n";
}
} else {
echo gettype($_GET['id'])." was passed<br />\n";
}
function isNumeric($numeric) {
return preg_match("/^[0-9]+$/", $numeric);
}
prendo un approccio leggermente più paranoico di sanificazione ingresso GET
function sanitize_int($integer, $min='', $max='')
{
$int = intval($integer);
if((($min != '') && ($int < $min)) || (($max != '') && ($int > $max)))
return FALSE;
return $int;
}
Per essere ancora più sicuri, è possibile estrarre solo i numeri e poi esegue la funzione di cui sopra
function sanitize_paranoid_string($string, $min='', $max='')
{
$string = preg_replace("/[^a-zA-Z0-9]/", "", $string);
$len = strlen($string);
if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max)))
return FALSE;
return $string;
}
Codice da: http://libox.net
Che dire intval
?
$int = intval($_GET['id']);
Può usare
$validatedValue = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
Vedi http://php.net/filter_input e le relative funzioni.
Mi piace filter_var e filter_input :) –
Per convalidare i dati del modulo (stringa) come un intero, si dovrebbe usare ctype_digit()
Restituisce TRUE
se ogni carattere di testo stringa è una cifra decimale, FALSE
altrimenti. (PHP 4> = 4.0.4, PHP 5)
Riferimento: http://php.net/manual/en/function.ctype-digit.php
'ctype_digit()' controllerà solo una stringa, quindi 'ctype_digit (1) === false', mentre' ctype_digit ('1') === true'. Questo è molto utile per convalidare l'input dell'utente, poiché $ _GET e $ _POST contengono stringhe. – kfriend
Ma is_numeric() accetta anche la notazione esotici. –
... e accetta anche i numeri decimali. 'preg_match' FTW. Può anche accettare input come '04'. – Ben
Non dovresti accettare anche i numeri negativi con preg_match? Per quanto ne so, un intero può essere negativo, quindi -5 dovrebbe essere accettato come Int. –