funzione is_int()

oscar

Nuovo Utente
17 Apr 2014
29
0
1
Buongiorno a tutti, in una classe che gestisce i dati arrivati da un form voglio controllare che il numero che arriva dal form sia un intero scrivendo il seguente codice :
...
$this->giorno_nascita = $this->testGiornoNascita($_POST["giorno_nascita"]);
...
private function testGiornoNascita ($dato){
if (is_int($dato)){
echo 'il giornoNascita è un intero';
}
...
Quando chiamo la funzione, anche se metto un numero intero non stampa niente, è come se non ci fosse l'if e non vedo cosa faccio sbagliata.
Ringrazio in anticipo qualsiasi idea-aiuto che potete dare.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.038
146
63
PR
www.borgo-italia.it
ciao
premetto che non amo le classi e la programmazione ad oggetti, però guarda che i $_POST trasmettono i valori in formato stringa
prova a forzare
PHP:
$this->giorno_nascita = $this->testGiornoNascita((int)$_POST["giorno_nascita"]);
 

oscar

Nuovo Utente
17 Apr 2014
29
0
1
funziona aggiungendo (int). adesso vedo come è questo della "forzatura", ancora non lo avevo visto. Grazie.
 

oscar

Nuovo Utente
17 Apr 2014
29
0
1
comunque non serve a quello che intendevo fare, perche in questa funzione volevo validare il dato proveniente dalla form che dovrebbe essere solamente un intero. faccendo il cast per passare da una stringa a un integer, la variabile diventa integer e la risposta al if è vero ma non significa che la variabile sia solo un numero (può contenere lettere o simboli anche) p.es. se scrivo nel form 3d la funzione mi stampa 3 però no avvisa che c'è una d. Mi sembra che devo cambiare strada e lavorare con la data e non con numeri.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.038
146
63
PR
www.borgo-italia.it
ciao
prova a vedere se così ti serve
PHP:
<?php
function testGiornoNascita ($dato){
	$dato=(int)(0+$dato);
	/*il numero da 0x diventa x, es 03 "stinga" diventa 3 numero intero
	e una stringa che non contine numeri diventa 0 */
	if ($dato > 0){
		return "$dato è un intero<br>";
	}else{
		return "$dato NON è un intero<br>";
	}
}
$d=1;//intero
echo testGiornoNascita ($d);
$d="1";
echo testGiornoNascita ($d);
$d="01";
echo testGiornoNascita ($d);
$d="29";
echo testGiornoNascita ($d);
$d="zz";//attento qui
echo testGiornoNascita ($d);
?>
uotput:
1 è un intero
1 è un intero
1 è un intero
29 è un intero
0 NON è un intero
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.038
146
63
PR
www.borgo-italia.it
ciao
se vuoi operare direttamente con la data completa prova così
PHP:
<?php
function verifica_data($data){
	$d=explode("-",$data);//questa dipende da come è formarttata la data
	//ipotizzo gg-mm-Y
	$gg=(int)(0+$d[0]);
	$mm=(int)(0+$d[1]);
	$aa=(int)(0+$d[2]);
	if(checkdate ( $mm , $gg , $aa )){//i parametri di checkdate devono essere interi
		return " la data $data è una data valida<br>";//la data è una data valida
	}else{
		return " la data $data NON è una data valida<br>";;
	}
}
$nascita = "10-01-1980";
echo verifica_data($nascita);
$nascita = "33-01-1980";
echo verifica_data($nascita);
$nascita = "pinco pallo";
echo verifica_data($nascita);
$nascita = "29-02-2015";//tiene conto dei bisetili
echo verifica_data($nascita);
?>
uotput
a data 10-01-1980 è una data valida
la data 33-01-1980 NON è una data valida
la data pinco pallo NON è una data valida
la data 29-02-2015 NON è una data valida
 

oscar

Nuovo Utente
17 Apr 2014
29
0
1
grazie borgo italia, vedo di studiare le due possibilità. (miei tempi sono lunghi, ho iniziato poco fa a studiare tutto questo)