PROGRAMMIAMO
PHP - Passaggio tramite URL

Passaggio di valori tramite URL

Una delle caratteristiche più interessanti del PHP consiste nella possibilità di passare valori fra una pagina e l'altra e di generare quindi dinamicamente i contenuti in base ai valori passati. Il passaggio può avvenire da una pagina html o da una pagina PHP, ma la destinazione è sempre una pagina PHP: in altre parole, i dati possono provenire dal client o anche da un'altra pagina residente sul sever, ma l'elaborazione avviene sempre ovviamente sul server.

Facciamo un esempio. Supponiamo di aver costruito un sito contenente una pagina principale (index.html) con alcuni collegamenti ad altre pagine secondarie (pag1, pag2...). Si supponga anche che tutte le pagine secondarie abbiano la stessa struttura, cioè siano composte da una intestazione (header, contenente per esempio un banner col logo del sito e un menu di navigazione), un corpo centrale della pagina (diverso da una pagina all'altra) e un footer finale (la parte conclusiva della pagina, contenente per esempio il nome dell'autore del sito e altre informazioni di contatto). L'header e il footer sono sempre identici in tutte le pagine secondarie: solo il corpo centrale della pagina differisce da una pagina all'altra.

Siccome header e footer sono sempre uguali, sarebbe inutile riscriverli identici in ogni pagina secondaria. Inoltre, dovendo modificarli, sarebbe assai più comodo poter modificare un unico file header e un unico file footer per tutte le pagine. Una possibile soluzione, che non usa linguaggi di scripting ma il solo HTML, consiste nell'utilizzare i frame per la costruzione delle pagine secondarie. Un'altra soluzione invece fa ricorso al PHP.

Vediamo per prima cosa come potrebbe essere fatta la pagina principale del sito, index.html:

<html>
<body>

<p> Scegli la pagina che vuoi visitare: </p>
<p>
<a href="secondaria.php?num=1" /> Pagina uno </a> <br />
<a href="secondaria.php?num=2" /> Pagina due </a> <br />
<a href="secondaria.php?num=3" /> Pagina tre </a> <br />
......
</p>

</body>
</html>

Osserviamo che si tratta di semplice codice html (processato dunque dal browser dell'utente). I link alle pagine secondarie "puntano" tutti alla stessa pagina di nome "secondaria.php". Si noti però la particolare forma che assumono i vari link:

href="secondaria.php?num=numero"

Il significato è che dev'essere caricata la pagina "secondaria.php" e a tale pagina dev'essere passata una variabile di nome num con associato il valore numero. Il meccanismo assomiglia molto a quello di una chiamata a funzione con passaggio di parametri in qualsiasi linguaggio di programmazione.

Ricezione di variabili nel codice PHP

Vediamo ora come potrebbe essere realizzata la pagina "secondaria.php". Ecco il codice:

<html>
<body>

<?php
$ris = $_REQUEST['num'];

include("header");
include("pag".$ris);
include("footer");
?>

</body>
</html>

Osserviamo anzitutto l'istruzione include, il cui significato è abbastanza semplice:

include ("file") ;

include (cioè copia) il contenuto del file di nome file nel punto esatto in cui viene eseguita l'istruzione.

Nel nostro esempio header e footer sono due file di testo (residenti sul server) contenenti il codice html dell'intestazione e della fine della pagina secondaria. Per esempio header potrebbe contenere qualcosa del genere:

<img src="logo.gif" />
<h1> Benvenuti nel mio meraviglioso sito </h1>

Si tratta solo di un esempio. Per i nostri scopi non ha importanza il contenuto di header e footer. Basta sapere che qualsiasi cosa contengano, il loro contenuto viene incluso nella pagina html generata al volo sul server. A scanso di equivoci, precisiamo che i nomi header e footer (senza estensione, ma si tratta solo di una scelta, non è una regola!) sono assolutamente liberi, non si tratta di parole chiave del linguaggio.

Osserviamo ora l'istruzione

include("pag".$ris);

In questo caso il nome del file da includere viene generato dinamicamente concatenando la stringa "pag" con il valore contenuto nella variabile $ris. In pratica se ad esempio $ris contiene il valore '1', il file che verrà incluso si chiamerà "pag1", etc.

Veniamo infine all'istruzione

$ris = $_REQUEST['num'];

probabilmente quella più importante per i nostri scopi.

$_REQUEST è una variabile di sistema del PHP. Più precisamente si tratta di un vettore, il cui indice è il nome della variabile che è stato passato. Semplificando un po' le cose possiamo considerare $_REQUEST l'istruzione che prende il valore della variabile num (quella generata nella pagina HTML che ha "chiamato" la pagina PHP) e lo salva nella variabile $ris.

In altre parole:
- num è una variabile che al momento dell'indirizzamento alla pagina secondaria.php assume il valore 1, 2, etc. a seconda di quale link è stato attivato;
- $ris è un'altra variabile, interna alla pagina PHP, nella quale viene "ricopiato" il valore di num.

Il risultato finale è che

include("pag".$ris);

include dinamicamente una pagina diversa (pag1, pag2...), a seconda del valore di num passato alla pagina PHP.

 

Passaggio di più valori

E' anche possibile passare più valori da una pagina HTML a una pagina PHP. Per fare questo bisogna usare l'operatore & che serve per creare una stringa di richiesta. Supponiamo per esempio di avere un sito dedicato alle piante con una serie di link che visualizzano immagini di piante diverse:

<a href = "pianta.php?val=1&commento=albero da frutto"> Albero da frutto </a>
<a href = "pianta.php?val=2&commento=cactus"> Cactus </a>

La corrispondente pagina "pianta.php" conterrà il codice seguente:

<?php
$numfoto = $_REQUEST['val'];
$commento = $_REQUEST['commento'];

echo "<img src = 'foto" .$numfoto. ".jpg' />\n";
echo "<p>" .$commento ."</p>";

?>

Si osservino le due "istruzioni" $_REQUEST eseguite all'inizio dello script per acquisire i valori delle due variabili val e commento. Si noti anche l'uso totalmente libero dei nomi delle variabili nelle due pagine (il valore di val viene assegnato alla variabile $numfoto e il valore di commento viene assegnato alla variabile $commento).

Il codice HTML risultante dall'elaborazione del PHP sarà per esempio, nel caso in cui l'utente abbia cliccato sul primo link:

<img src = 'foto1.jpg' />
<p> Albero da frutto </p>

precedente -successiva

Sito realizzato in base al template offerto da
Graphixmania.it - Grafica e non solo
http://www.graphixmania.it