Newsgroup: it.comp.www.php
Titolo: MENU e PHP

Ciao a tutti, sto imparando ad usare PHP.
Conosco la sintassi, imparata su varie guide, ma nessuna guida spiega
la cosa che sto cercando, spero voi mi aiutate!
Io scrivo una pagina php, che chiamo "left.php" con un semplice menu,
fatto solo di link, ad esempio:
<a href="miosito/pagina1.php">Pagina1</a><br>
<a href="miosito/pagina2.php">Pagina2</a><br>
<a href="miosito/pagina3.php">Pagina3</a>
Ora, io non voglio usare frame, ma strutturare il mio sito a tabelle.
Ma non voglio nemmeno ripetere il codice di header e footer in ogni
pagina del mio sito, sarebbe un lavoro lungo ed inutile. Quindi
costruisco header.php e footer.php e con include di PHP le integero al
mio index. Mi sembra sia giusto fino a qui.
Ora peró, se io ho tantissime pagine nel sito, in ogni pagina devo
scrivere:
include("header.php");
include("left.php");
include("footer.php");
A me sembra un bruttissimo modo, cioé quello di ripetere in tutte le
pagine, lo stesso codice.
Io ho provato un metodo, funziona ma penso sia concettualmente errato.
Il menu in "left.php" lo imposto cosí:
<a href="miosito/index.php?a=1">Pagina1</a><br>
<a href="miosito/index.php?a=2">Pagina2</a><br>
<a href="miosito/index.php?a=3">Pagina3</a>
Dove a consiste in un indice di riconoscimento della pagina.
Nella pagina "index.php", utilizzo la struttura case (o una serie di
if) che controlla la variabile a in GET, e a seconda del suo valore,
includo "pagina1.php" o "pagina2.php" ...
dove queste ultime contengono solo il testo che devo inserirci.
Ricapitolando, per chiarire, "index.php" sará cosí:
include("header.php");
include("left.php");
case con selezione della pagina;
include("footer.php");
É sbagliato? Ma cosa posso fare? Voi come fate a fare un sito in PHP?
Ho cercato di spiegarmi meglio che potevo, spero fosse comprensibile.
Grazie in anticipo per l'aiuto!
tar...@email.it

 É sbagliato? Ma cosa posso fare? Voi come fate a fare un sito in PHP?
Ad esempio si puo' uscire dalla logica "un file per ogni pagina WEB"
e passare alla logica "una funzione per ogni pagina WEB". Cosi' tutto
il sito si riduce a un solo file. Esempio:
<?
function alink($testo, $funzione /*, eventuali argomenti */ )
{
    echo("<a href=$PHP_SELF?fun=$funzione");
    for( $i = 2; $i < func_num_args();  ){
        echo("&" . func_getarg($i) . "=" . urlencode(func_getarg($i+1)));
        $i+=2;
    }
    echo(">" . $titolo . "</a>");
}
function Testa()
{ echo("<html><body>......."); }
function Piede()
{ echo("</body></html>"); }
function Pagina1()
{
    Testa();
    echo("<h1>Benvenuti nel nostro meraviglioso sito WEB!</h1>");
    echo("Che pagina vuoi vedere?");
    alink("Meraviglie", 'Pagina2');
    alink("Sogni",      'Pagina3', 'x', 'valorex');
    alink("Viaggi",     'Pagina4', 'y', 'valorey', 'z', 'valorez');
    Piede();
}
function Pagina2()
{ similmente }
function Pagina3()
{ similmente }
$fun = $_REQUEST['fun'];
switch( $fun ){
    case 'Pagina1': Pagina1(); break;
    case 'Pagina2': Pagina2(); break;
    case 'Pagina3': Pagina3(); break;
    default Pagina1();
}
?>
Ogni ancora dovra' contenere un parametro 'fun' che e' il nome della
funzione da chiamare. A questo provvede la funzione alink().
La funzione alink(titolo, funzione, ...) permette di emettere un'ancora
con eventuali parametri addizionali. I parametri addizionali vanno sempre
in coppia nome/valore.
Ogni funzione dovrebbe poi controllare i parametri che riceve dal GET
eseguendo un controllo sanitario, soprattutto quando questi parametri
vanno messi dentro a un DB.
In alternativa, la funzione alink() puo' essere estesa in modo che
aggiunga un digest dei parametri insieme a una parola chiave segreta.
Questo digest andra' controllato prima di usare i parametri ricevuti
dalla GET. Se il digest corrisponde, allora i parametri sono sicuramente
validi e non e' necessario alcun controllo sanitario. Non mi dilungo
oltre su questo punto.
Ulteriore evoluzione: alink() potrebbe serializzare gli oggetti, sicche'
si possono passare attraverso le ancore anche strutture date articolate.
Il difetto di questa strategia, come del resto di tutte le soluzioni
comunemente utilizzate (ASP e .NET inclusi), e' che i dati viaggiano
inutilmente avanti e indietro tra client e server. Anche questo si puo'
risolvere, ma occorre fare una evoluzione ulteriore.
Non ho provato il codice, probabilm. ho sbagliato il nome di qualche
funzione. Prendi solo lo schema per buono.
Ciao,
 ___ 
/_|_\  Umberto Salsi
\/_\/  
www.icosaedro.it

 *.inc o qualcosa del genere.
Non è pericoloso il fatto che un utente "dall'esterno" possa accedere
direttamente al file tramite un URL e il browser gli visualizzerà il
codice PHP visto che l'estensione non richiede l'intervento del parser??
Forse sto sbagliando ...
Ciao
-- 
..::[ Panz ]::..
-----------------------
per rispondere riscrivi in numeri la mia eMail!

 funzione. Prendi solo lo schema per buono.
Sei stato troppo gentile, ti ringrazio davvero tanto per il tuo aiuto,
perché a volte si hanno dei dubbi che solo altre persone che li hanno
incontrati, li possono risolvere! GRAZIE
tar...@email.it

 Forse sto sbagliando ...
Molto giusto, allora aggiungi l'estensione .inc come codice PHP (AddType
application/x-httpd-php .php .inc), oppure, meglio, disabiliti proprio
l'invio di questo tipo di file (<Files "*.inc">   Order allow,deny   Deny
from all   Satisfy all </Files>).


 direttamente alla Pagina1, sbaglio?
;-)


o la chiami nomefile.inc.php
"Umberto Salsi" <sa...@icosaedro.italia> ha scritto nel messaggio
news:chjt3b$aln$1...@news.ngi.it...


 o la chiami nomefile.inc.php
Please 
http://wiki.news.nic.it/QuotarBene
-- 
I am what I am, I do what I can
L'uomo, conscio di sbagliare, persevera.