PROGRAMMIAMO
PHP - Passaggio alla pagina stessa

Passaggio valori all'interno della stessa pagina

Nella lezione precedente abbiamo visto come una pagina HTML può passare dinamicamente dei valori a una pagina PHP attraverso i link. Questo passaggio è possibile anche fra due pagine PHP, ovvero quando sia la pagina sorgente (quella che contiene il link) sia la pagina destinazione (quella che riceve i valori) sono scritte in PHP.

Particolarmente interessante è il caso di una pagina PHP che passa i valori a se stessa. Supponiamo per esempio di avere una pagina "foto.php" che visualizza un'immagine e che tale immagine possa cambiare a seconda della scelta dell'utente. Ecco come potrebbe essere scritto il codice PHP:


<!DOCTYPE html>
<html lang="it">

<head>
<meta charset="utf-8">
<title>Pagina che passa i valori a se stessa </title>
</head>

<body>

<?php
if (!isset( $_REQUEST['foto']))
$foto = "img1.jpg"; //immagine visualizzata al primo caricamento pagina
else
$foto = $_REQUEST['foto'];

echo "<img src = $foto >";
?>

<p>Scegli la foto che vuoi visualizzare:</p>

<p>
<?php
echo "<a href = 'foto.php?foto=img1.jpg' > Foto1 </a> <br>\n";
echo "<a href = 'foto.php?foto=img2.jpg' > Foto2 </a> <br>\n";
echo "<a href = 'foto.php?foto=img3.jpg' > Foto3 </a> <br>\n";
?>


</p>

</body>
</html>

Esaminiamo adesso nel dettaglio le diverse istruzioni di questo script.


I link

Esaminiamo dapprima i link contenuti nella pagina:

echo "<a href = 'foto.php?foto=img1.jpg' > Foto1 </a> <br>\n";

Il significato è abbastanza semplice: viene linkata la URL della pagina foto.php (cioè la pagina medesima che contiene questo codice) e le viene passato un valore della variabile foto.

Un modo equivalente, anche se più complicato in questo caso, sarebbe stato quello di usare la variabile di sistema $_SERVER['PHP_SELF'], la quale contiene la URL della pagina corrente. In questo modo avremmo potuto anche scrivere:

echo "<a href = '".$_SERVER['PHP_SELF']."?foto=img1.jpg' > Foto1 </a> <br>\n";

Nel nostro caso $_SERVER['PHP_SELF'] avrà il valore foto.php, cioè il nome della nostra pagina.

Form

Nel caso in cui si vogliano passare i parametri alla pagina stessa per mezzo di un form, è sufficiente indicare il nome della pagina nell'attributo action del form:

<form method="post" action="la_stessa_pagina.php">

Naturalmente è anche possibile usare $_SERVER['PHP_SELF'] in questo modo:

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

Fra molti programmatori è invalso l'uso, in questi casi, di utilizzare un attributo form vuoto, in questo modo:

<form method="post" action="">

Questa soluzione funziona in tutti i browser moderni (passa i parametri alla pagina stessa su cui si trova il form), ma è scarsamente documentata e viene indicata come errata dai validatori. Per queste ragioni suggerisco di usare comunque la prima soluzione (quella in cui il nome della pagina viene indicato esplicitamente).

isset

La funzione isset serve per determinare se una certa variabile ha un valore oppure no. Nel nostro esempio:

isset($_REQUEST['foto'])

torna true (in realtà viene restituito il valore numerico 1, che in PHP equivale a true) se la pagina ha ricevuto una variabile di nome foto e torna false (in realtà 0) se invece non è stato ricevuto nulla. In pratica nel nostro caso la funzione torna false la prima volta che l'utente carica la pagina "foto.php": infatti al primo caricamento non è stato ancora selezionato nessuno dei link disponibili e dunque la variabile foto non esiste.

L'istruzione

if (!isset( $_REQUEST['foto']))
$foto = "img1.jpg"; //immagine visualizzata al primo caricamento pagina
else
$foto = $_REQUEST['foto'];


usa l'operatore NOT (simbolo !) col seguente significato:

- se foto non esiste (primo caricamento della pagina) assegna a $foto un valore iniziale di default (img1.jpg)
- altrimenti, se invece foto esiste (caricamenti successivi della pagina), $foto viene inizializzata col valore effettivamente passato alla pagina stessa.

Questo meccanismo un po' complicato è necessario dal momento che la stessa pagina (foto.php) può essere caricata in due diversi modi:

- la prima volta con un URL semplice: foto.php
- le volte successive con un URL del tipo: foto.php?foto=img2.jpg

Nel primo caso l'esecuzione della istruzione

$foto =  $_REQUEST['foto'] ;

potrebbe provocare un comportamento errato, perchè foto non esiste.

ATTENZIONE

Molti browser moderni, se la pagina è stata già precedentemente caricata, memorizzano i valori dei parametri. In questo modo, ricaricando la pagina, tutte le variabili risultano sempre definite (la isset restituisce sempre il valore true, vero).

Si tratta tuttavia di un comportamento casuale, sul quale non è possibile fare nessun affidamento. La tecnica di programmazione corretta prevede di usare sempre la isset per controllare l'esistenza dei parametri passati alla pagina.

Per forzare il caricamento della pagina resettando tutti i parametri, basta premere il tasto INVIO sulla barra dell'URL del browser (invece di usare il pulsante per il reload).

precedente - successiva

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