Newsgroup: it.comp.www.php
Titolo: controllo di flusso per convalida input utente

PARENTESI
Perdonate lo pseudo crosspost, avendo già posto la medesima domanda su un
altro ng, ma solo oggi, da neofita, mi sono accorto della presenza di questo
popolato ng sul php
FINE PARENTESI
Domanda da novizio quale sono, mi potreste gentilmente chiarire se i valori
passati da un form ad un file di elaborazione php sono sempre stringhe? Se
così fosse, mi potreste dire quale è la funzione che converte una stringa
contenente un numero intero in un numero intero?
Mi potreste fare un brevissimo esempio che esegua un controllo di flusso per
la convalida di un valore intero?
esempio:
Se il valore è un intero il controllo è passato, se è altro( ad esempio
123a123 ) visualizza il messaggio di errore "Errore: devi inserire un numero
intero".
Grazie mille se avrete la pazienza
Kollit

 Kollit
prego
_SV_

  }
Sulla base di quello che mi hai scritto ho tirato giù queste righe, ma mi
rimane da controllare se il numero immesso dall'utente è un intero.
Non ho utilizzato il casting (int) $stringa perchè se non sbaglio di fronte
ad un numero in virgola mobile mi taglia la parte decimale, invece io vorrei
assicurarmi, senza alcun intervento prioritario, che l'utente abbia inserito
un numero, e che tale numero sia intero.
la funzione is_numeric è molto utile, però non distingue se un numero è
intro o in virgola mobile, così mi rimane da verificare, appunto, se il
numero immesso è un intero.
Ti riporto l'esempio sotto, è brevissimo naturalmente:
<?php
$stringa = "43";
if (is_numeric($stringa)) {
echo "\$stringa è $stringa";
} else {
echo "Devi inserire un numero valido";
}
?>
Me se l'utente inserisce un numero in virgola mobile come ad esempio
$stringa = "43.2"; il controllo di flusso avvalora ancora la funzione
is_numeric dato che è sempre un numero, invece, come ti dicevo, io vorrei
che l'elaborazione avvenissi soltanto nel caso in cui l'utente abbia immesso
un numero intero, e non in virgola mobile.
ciao
Kollit

 un numero intero, e non in virgola mobile.
dai un occhiata qui: 
http://www.php.net/manual/en/function.is-int.php

 un numero intero, e non in virgola mobile.
ma is_int non ti piace?
http://it.php.net/manual/en/ref.variables.php
 ce ne sono a iosa :)
combinando opportunamente is_numeric, is_float e is_int e magari 0+$x...
esempio:
$n='1';
echo ($n.(is_int(0+$n) ? " è ":"non è ")."intero <br>");
$n='543.3';
echo ($n.(is_int(0+$n) ? " è ":" non è ")."intero <br>");
echo ($n.(is_float(0+$n) ? " è ":" non è ")."float <br>");
Ciao Gianfranzo
-- 
ICQ#: 21258924 Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra
"dopo tutto, gli angeli non sono altro che dei volatili" D. Pennac

 Ciao Gianfranzo
Gianfranzo, ti ringrazio infinitamente!!
L'espediente dello 0 mi risolve tutti i miei problemi, perchè mi garantisce
di analizzare un numero di fatto e non un numero sotto forma di stringa come
is_numeric, anche se quest'ultimo lo utilizzerò per accertarmi innanzitutto
che sia un numero. Insomma, mi sono un po' ingarbugliato con il discorso ma
va bene, adesso è chiaro ed ho risolto.
ciao
Kollit

> dai un occhiata qui: 
http://www.php.net/manual/en/function.is-int.php
Adesso ho risolto, cosě nel link che mi hai suggerito come nell'esempio di
Gianmarco Vanni il trucchetto, se cosě vogliamo chiamarlo, č lo 0 sommato al
valore della variabile, che mi garantisce di lavorare su un numero e di fare
quindi tutti i controlli del caso.
grazie anche a te, siete stati risolutivi
ciao
Kollit

Conclusione
*******************
Verificare che il valore passato da un form ad uno script php sia un intero
*******************
<?php
$n = $_POST['input_form'])
if (is_numeric($n)) {
$numero = $n + 0;
if (is_int($numero)) {
echo "Bene! Il valore immesso č: $numero";
} else {
echo "Il numero immesso deve essere un intero";
}
} else {
echo "Devi inserire un numero. Riprova";
}
?>
ciao
Kollit

Correzione, versione definitiva
*******************
Verificare che il valore passato da un form ad uno script php sia un intero
 *******************
<?php
$n = $_POST['input_form'];


intero".
if ($n !== (string)((int)$n))
        print "Devi inserire un numero intero.";
else
        print "Bene, $n e' intero";
Il che comunque introduce una ambiguita': se io ti passo "42.0", lo
consideri un numero intero o no?
Nel caso basta che tu tolga uno dei due "=" e ti rispondera' "Bene,
42.0 e' intero".
Leonardo per le spicce
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.