Newsgroup: it.comp.www.php
Titolo: isset e link tipo pagina.php?ID=

Ola!,
	oggi facendo una pagina mi è venuto sto dubbio.
Ho dei link del tipo
http://mioserver/pagina.php?ID=1
http://mioserver/pagina.php?ID=2
http://mioserver/pagina.php?ID=3
Ora, essendo tutti link che si generano automaticamente da una pagina php
che crea l'elenco è ovvio che son stato bene attento affinchè lo script crei
dei link corretti.
Ho provato però a digitare direttamente 
http://mioserver/pagina.php?ID=
(senza il numero quindi).
In pagina.php ho qualcosa del tipo
if (!isset($_REQUEST['ID'])) {
  $IDPagina=0;
} else {
  $IDPagina=$_REQUEST['ID'];
}
e nel caso del mio link "tarocco"
quando vado a fare un print $IDPagina; ottengo la stampa di un bel nulla.
Chiarimento: in questo caso la variabile risulta settata (altrimenti
dovrebbe andare nel ramo if in cui IDPagina viene messa a 0) ma impostata a
valore null. Ho capito giusto?
La soluzione che ho adottato per evitare questo tipo di link è quello di
trasformare l'if sopra in questo
$IDPagina=$_REQUEST['ID'];
$IDPagina+=0;
in questo modo ho sempre il valore corretto di IDPagina (e se mi compare un
link tarocco tipo quello da me provato, mi viene "resettato" pagina). E'
corretta come soluzione o c'è qualche altra possibilità di link malformati
che mi freghi pure in questo caso?
Grazie ;)
-- 
doGmaI

 Grazie ;)
usa _GET..
isset restituisce TRUE con una stringa dichiarata vuota..
se $IDPagina deve essere un numero intero..
$IDPagina = isset($_GET['IDPagina']) ? intval($_GET['IDPagina']) : 0;
-- 
www.iuz-lab.info

> Torakiki


:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

 Leonardo
Sucsa, ma a parte il cast di tipo in più rispetto alla mia soluzione non
capisco la tua risposta
-- 
doGmaI

capisco la tua risposta
Quando uno _NON_ invia "ID=" nella query string, allora $_REQUEST['ID']
non viene definito, e isset() ritorna FALSE.
Ma se uno invia "ID=", ID viene definito (uguale a ""), isset() ritorna
TRUE, e il tuo $IDPagina vale "", non zero.
Anche se uno inviasse "ID=pippo" avresti un $IDPagina non valido.
Tu vuoi invece che se "ID=" (o se "ID=pippo"), $IDPagina sia zero.
Questo lo ottieni semplicemente con il casting. Infatti, il cast ad int
trasforma una variabile stringa non numerica proprio in zero.
if (!isset($_REQUEST['ID']))
{
	// Qui ci finisco se nell'URL la dichiarazione di ID= non c'e'
 	$IDPagina=0;
}
else
{
	// Qui ci finisco per ID=, ID=0, ID=5, ID=3.1415, ID=pippo
 	$IDPagina=(int)$_REQUEST['ID'];
	// "" diventa 0, 0 diventa zero, 5 diventa 5, 3.1414 diventa 3
	// e pippo diventa zero
}
Scusa ma a quanto pare o sono troppo prolisso o sono troppo enigmatico;
sto tentando di trovare un giusto equilibrio :-)


 trasforma una variabile stringa non numerica proprio in zero.
[..]
non e' proprio cosi'..
il cast int obbliga una conversione da stringa ad intero..
in particolare la stringa viene percorsa dal primo all'ultimo carattere a
meno di trovare prima un carattere non numerico [^0-9], in tal caso il
resto della stringa viene ignorato e viene restituito il valore intero
ottenuto dalla parte della stringa esaminata..
$str = (int) '5a'; // $str = 5
$str = (int) '5a5'; // $str = 5
$str = (int) 'a5'; // $str = 0
$str = (int) 'a'; // $str = 0
-- 
www.iuz-lab.info

Il Thu, 16 Jun 2005 12:43:41 GMT, Leonardo Serni scrisse:

Ah ok, ora ho capito, infatti mi chiedevo come mai mi avessi ripetuto la mia
soluzione a parte il cast di tipo...
Quindi era giusto quello che dicevo sul fatto che se mi passa ID= (o
ID=qualcheschifezza) isset mi ritorna true perchè ID è definito ma il valore
è sballato.
In ogni caso il mio ID+=0 risulta praticamente inutile se al codice di ieri
ci metto il cast di tipo?
-- 
doGmaI