Newsgroup: it.comp.www.php
Titolo: script di navigazione in index

ciao a tutti, sono al primo approccio con PHP...
sto usando questo script di navigazione nella index:
<?php
$pageId = $_GET['id'];
switch($pageId) {
default:
include('main.htm');
break; case "blah":
include('blah.htm');
break; case "blah2":
include(blah2.htm');
break; case "blah3":
include('blah3.htm');
break; case "blah4":
include('blah4.htm');
break; case "blah5":
include('blah5.htm');
}
?>
ma volevo sapere, non c'è un modo per far si che lo script si accorci in 
modo di non dover scrivere l'"include-break" per ogni caso, 
generalizzandolo con una variabile?
non so se mi sono spiegato :-) praticamente intendo, non si può fare 
qualcosa del tipo:
<?php
$pageId = $_GET['id'];
switch($pageId) {
default:
include('main.htm');
break; case "$pageId":
include('$pageId+".htm"');
}
?>
ho provato ma mi da sempre errore "No such file or directory"...mi sa 
che ho cannato la sintassi...
poi sarebbe possibili aggiungere nello script il fatto che se un $id 
passato non ha la pagina corrispondente allora venga mostrata una pagina 
per il classico errore 404?
Grazie per le info :-)

 generalizzandolo con una variabile?
Usa un 
http://www.php.net/array
 e 
http://www.php.net/in_array
 per
varificare se la pagina richiamata e' valida
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 Controlla se $_GET['id'] e' valorizzato prima di usarlo.
ho provato a fare lo script cosě:
<?php
$pageId = $_GET['id'];
$filename = "$pageId.inc ";
echo "La variabile $pageId ha questo contenuto: $filename";
switch($pageId) {
default:
include('main.inc');
break; case "$pageId":
include($filename);
}
e vedo tramite l'echo che le due variabili sono corrette ($pageId e 
$filename) eppure lo script mi da sempre l'errore... :-\
Warning: main(test.inc ): failed to open stream: No such file or 
directory in /home/xxxx/public_html/test2/index.php on line 26

 $filename = "$pageId.inc ";
tutto risolto, c'era lo spazio alla fine (errore di battitura) eliminato 
quello funziona :-)
ora mi rimane di capire come fare per l'errore 404!

 }
La tua solizione e' molto pericolosa dal punto di vista della sicurezza
tralasciando il fatto che la meta' del codice ' inutile (lo switch).


 
ok immaginavo che lo switch fosse inutile...soluzioni migliori e più sicure?
qualcosa del tipo:
<?php
$PageID = $_GET['id'];
if(isset($PageID))
{ $filename = "$PageID.inc";
include($filename); }
else
{ include(main.inc); }
?>
mi da sempre errore però :-\

 
Devi impostare le variabili consentite in un array che poi confronti con 
i valori $_GET, se non corrispondono fai un print() di un contenuto 
predefinito.
Max
-- 
Se mi volete scrivere
massimo . ori @ aliceposta . it

 include($filename); }
Questo codice resta insicuro tanto quanto il precedente. Devi
utilizzare una white list dei file che si possono includere.


 Quella che ti ho gia' indicato.
ok io sono a zero sul PHP come già scritto, se non mi date il codice 
almeno datemi un link dove vedere degli esempi e poi mi arrangio :-)

 Max
ok, ma quindi le variabili consentite sarebbero sempre tutti i valori 
possibili (ed esatti) che passerei all'id giusto? (?id=xxx, l'xxx sono i 
valori)
quindi dovrei comunque stare li a scrivere tutte le pagine (valori) 
presenti, non c'è la possibilità di saltare questa fase e generalizzare 
lo script senza creare problemi sulla sicurezza?
allora tanto varrebbe utilizzare lo script iniziale con lo switch..no?
forse ho capito male :-)

 utilizzare una white list dei file che si possono includere.
e se faccio una validazione sul getid di questo tipo:
if (preg_match("/^[A-z]+$/i", $_GET["pageid"])) 
?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Potresti inserire in noi delle pagine in una tabella del Db, in questo 
modo le recuperi via query.
Oppure le includi in un file esterno, così lavori solo su un documento. 
Non è una cosa difficile da fare.


 almeno datemi un link dove vedere degli esempi e poi mi arrangio :-)
Ti e' stato indicato passo passo che cosa fare, e' sufficiente che apri
il manuale e segui le indicazioni.
-- 
I am what I am, I do what I can


 if (preg_match("/^[A-z]+$/i", $_GET["pageid"])) 
[mi quoto]
Controlla se $_GET['id'] e' valorizzato prima di usarlo.
Questo codice resta insicuro tanto quanto il precedente. Devi
utilizzare una white list dei file che si possono includere.
[/mi quoto]
-- 
I am what I am, I do what I can


 il manuale e segui le indicazioni.
beh oddio, da che mondo e mondo chi insegna/spiega qualcosa non risponde
"leggi il manuale e impara" :-)
comunque no problem, grazie x l'aiuto, mi darò da fare ;-)



www.danilobottone.com
 (.it)
Meglio stare zitti dando l'impressione di essere stupido, che parlare
togliendo ogni dubbio. (Confucio) 

 risponde "leggi il manuale e impara" :-)
Guarda che ti ho indicato esattamente che cosa devi fare per risolvere
il tuo problema. Ho indicato le funzioni ed i costrutti che devi
utilizzare. Ho descritto i vari passi da implementare. Manca solo che
scrivo il codice per te.


 
http://www.sito.it/index.php?pageid=tifrego
ma a quel punto che vantaggio ho rispetto al costrutto 
switch/include/break? cioč, devo sempre specificare pagina per pagina 
quelle presenti...io cercavo qualcosa di generale, se uno usasse
http://www.sito.it/index.php?pageid=tifrego
e tifrego.html non esistesse si beccherebbe il 404. dov'č la falla di 
sicurezza qui? (tenendo presente una validazione dell'argomento "pageid" 
come quella scritta da me precedentemente)
grazie per i chiarimenti! :-)

     $PageID = $_GET["pageid"];
No, non intedevo questo, infatti puo' sollevare un Notice: Undefined
index: pageid
-- 
I am what I am, I do what I can


 esistesse si beccherebbe il 404. dov'č la falla di sicurezza qui?
Che un utente potebbe farti eseguire script PHP che non vuoi nella
pagina corrente.
-- 
I am what I am, I do what I can



www.danilobottone.com
 (.it)
Gli uomini hanno il dono della parola non per nascondere i pensieri, ma
per nascondere il fatto che non li hanno. (Kierkegaard)