Newsgroup: it.comp.www.php
Titolo: is_nan mi da errore se non metto un numero

Ciao a tutti... vi posto un problemino che sicuramente sarà dovuto a 
qualche mia incomprensione... non cerco una vera e propria soluzione, ma 
almeno capire dove sbaglio...
Ho usato questo codice:
<?php if($pag=="no");{
	if($pg==""){$pg="\"$pg\" non è un nome valido";}else{$nick="$pg"; 
print"Nome: $nick<br>";}
	if($n_car==""){$n_car="\"$n_car\" non è una caratt. 
valida";}else{$caratt="$n_car"; print"Caratt: $n_car( ";}
//questa è la riga incriminata:
 
if(is_nan($valore)){$valore="\"$valore\" non è un valore 
valido";}else{$val="$valore";print"$valore ).";}
}?>
in pratica, se non ho capito male (come immagino però), is_nan serve per 
determinare se un valore sia un numero o meno. se non lo è, restituisce 
True.
infatti io lo uso come "validazione" di quel campo (il campo di una 
select). Se non è un numero mi dovrebbe restituire True, e quindi 
dovrebbe eseguire il codice dell'If.
però nell'output della pagina, mi visualizza questo errore:
[...]
( Warning: is_nan() expects parameter 1 to be double, string given in 
C:\apache2triad\htdocs\Extreme\public_html\Personaggio\modifica_valori.php 
on line 119 aaa ).
Mi dice in pratica (sempre se non ho capito male dall'inglese) che si 
aspetta un numero, e non una lettera ad esempio, o una variabile... 
infatti se nel campo della select scrivo un numero va tutto a 
meraviglia... Quindi dove sbaglio? Grazie a chiunque mi può aiutare...
Kevin.

Merlink...A.K.A Kevin wrote:

ci sono diversi errori di logica, ma gamari e' perche' non ho il codice
completo..
oltretutto manca totalmente l'indentazione..
mi diresti cosa dovrebbe fare questo frammento di codice?
-- 
www.iuz-lab.info

iuz wrote:

cmq sia l'errore e' che is_nan si aspetta come parametro un numero, e tu
invece gli hai passato una stringa..
usa !is_numeric($valore) al posto di is_nan($valore)..
-- 
www.iuz-lab.info

 
certo... allora..
Il codice serve a modificare determinati campi nelle schede degli utenti.
In pratica l'utente A dovrebbe poter cambiare alcune impostazioni 
dell'utente B,C,D, ecc..
La "pagina1" del codice, ha un form con:
1)Una casella per inserire il nome dell'utente
2)una select per selezionare quale caratteristica cambiare
3)un'altra casella per inserire il valore da cambiare
La "pagina2" (sempre la stessa che si richiama al submit del form) 
contiene il codice che:
1)mi visualizza, dove non ci sono errori, le modifiche che andranno ad 
essere effettuate
2)mi scrive nel db le modifiche (questo codice non l'ho ancora messo per 
ilsemplice motivo che volevo prima accertarmi che le modifiche non 
contengano errori)
Il cpdice in errore è questo:
<?php
if($pag=="no");{
	if($pg==""){
            $pg="\"$pg\" non è un nome valido";
         }else{
            $nick="$pg";
            print"Nome: $nick<br>";
         }
 
         if($n_car==""){
            $n_car="\"$n_car\" non è una caratt. valida";
         }else{
            $caratt="$n_car";
            print"Caratt: $n_car( ";
         }
 


Merlink...A.K.A Kevin ha scritto:

purtroppo non funziona, anz...è peggio di prima perchè ora mi passa il 
testo anche... Io vorrei evitare (come fosse Javascript, ma non voglio 
usare codice lato client) che venga inserito del testo anzichè dei 
numeri in quel campo... perchè il campo nel DB è un INT.

 
purtroppo non funziona, anz...è peggio di prima perchè ora mi passa il 
testo anche... Io vorrei evitare (come fosse Javascript, ma non voglio 
usare codice lato client) che venga inserito del testo anzichè dei 
numeri in quel campo... perchè il campo nel DB è un INT.
Kevin

 numeri in quel campo... perchè il campo nel DB è un INT.
non e' perfetto ma dovrebbe funzionare (ti basta eliminare un print_r per
raggiungere il tuo scopo)..
<?php
$_POST['pag'] = 'no';
$_POST['nome'] = 'nome';
$_POST['n_car'] = '34';
$_POST['valore'] = 'valore';
if(isset($_POST['pag']) && $_POST['pag'] == 'no'){
  $errore = $values = array();
  if(isset($_POST['nome']) && ($_POST['nome'] = trim($_POST['nome'])) != '')
    $values['nome'] = "Nome valido: {$_POST['nome']}<br />";
  else
    $errore[] = 'Nome non inserito o nome inserito non valido';
  if(isset($_POST['n_car']) && ($_POST['n_car'] = intval($_POST['n_car'])) >
0)
    $values['n_car'] = "Numero caratteristica valido:
{$_POST['n_car']}<br />";
  else
    $errore[] = 'Caratteristica non inserita o caratteristica inserita non
valida';
  if(isset($_POST['valore']) && ($_POST['valore'] =
trim($_POST['valore'])) != '')
    $values['valore'] = "Nuovo valore valido: {$_POST['valore']}<br />";
  else
    $errore[] = 'Nuovo valore non inserito o nuovo valore inserito non
valido';
  if($errore != NULL)
    print_r($errore);
  else
    print_r($values);  
}
?>
-- 
www.iuz-lab.info

iuz ha scritto:

Grazie! Comunque ho risolto così:
<?php
 
$personaggio = $_POST['pg'];
$nome_caratt = $_POST['n_car'];
$val_mod = $_POST['valore'];
		if(($personaggio=="") xor ($nome_caratt=="no") xor 
!is_numeric($val_mod) xor
		   ($personaggio!="") xor ($nome_caratt=="no") xor 
!is_numeric($val_mod) xor
		   ($personaggio=="") xor ($nome_caratt!="") xor !is_numeric($val_mod) xor
		   ($personaggio=="") xor ($nome_caratt=="no") xor 
!is_numeric($val_mod) xor
		   ($personaggio!="") xor ($nome_caratt!="") xor !is_numeric($val_mod)){
 
		print"Dati non validi, per favore torna indietro e sistemali. "
		or die("Errore, torna indietro");
 
		}else{
 
		print"Dati corretti:<br> $personaggio, $nome_caratt, $val_mod. ";
		}
		?>

iuz ha scritto:

Grazie mille per la risposta, cmq dopo un pò di sbattimento, ho risolto 
così:
<?php
 
$personaggio = $_POST['pg'];
$nome_caratt = $_POST['n_car'];
$val_mod = $_POST['valore'];
		if(($personaggio=="") xor ($nome_caratt=="no") xor 
!is_numeric($val_mod) xor
		   ($personaggio!="") xor ($nome_caratt=="no") xor 
!is_numeric($val_mod) xor
		   ($personaggio=="") xor ($nome_caratt!="") xor !is_numeric($val_mod) xor
		   ($personaggio=="") xor ($nome_caratt=="no") xor 
!is_numeric($val_mod) xor
		   ($personaggio!="") xor ($nome_caratt!="") xor !is_numeric($val_mod)){
 
		print"Dati non validi, per favore torna indietro e sistemali. ";


iuz ha scritto:

Grazie mille per la risposta, ma alla fine, ho risolto così:
<?php
 
$personaggio = $_POST['pg'];
$nome_caratt = $_POST['n_car'];
$val_mod = $_POST['valore'];
		if(($personaggio=="") or ($nome_caratt=="no") or !is_numeric($val_mod) 
or ($val_mod=="")){
 
		print"Dati non validi, per favore torna ";
		print"<a href=\"modifica_valori.php?pag=si\">indietro</a>";
