Mantenimento dello stato: I cookie
La funzione setcookie()  definisce un cookie da inviare insieme alle altre informazioni di header.
Essi permettono di memorizzare dei dati o informazioni addizionali tramite il browser dell'utente, poihcé fanno parte degli header del protocollo HTTP, tale funzione deve essere la prima in assoluto ad essere inviata, prima di qualsiasi contenuto della pagina HTML.
La funzione ha questa sintassi
    int setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])
come si può notare tutti gli argomenti sono opzionali tranne name e con i seguenti significati:
   name, nome del cookie da creare;
   value, il valore da attribuirgli;
   expire, data di scadenza, che il brawroser provvederà a cancellare;
   path, percorso della pagina che deve restituirlo;
   domain, dominio per cui esso è valido;
   secure, indica se esso deve essere trasmesso solo in una connesisone sicura di tipo HTTPS
É conseguente che i cookie diventino disponibili solo dopo la pagina successiva a quella che li ha generati, al refreshing della medesima e possono essere cancellati solo con gli stessi parametri che gli ha generati.
 
 <?php
  // è stata utilizzata la funzione time() + 3600 secondi = 1 ora
  if ($scelta==impostacookie) {
    // imposta il cookie
    SetCookie( 'fms', $valore, time()+3600, '/');
    echo '<a href="cookie.php"> per attivare il cookie ricaricare la pagina, clicca qui </a>';
    exit;
  } else
  if ($scelta==rimuovicookie) {
    // cancella il cookie
    setcookie('fms', '', time()-1, '/' );
    echo '<a href="cookie.php"> per disattivare il cookie ricaricare la pagina, clicca qui </a>';
    exit; 
  }
?>
<html>
<head><title>cookie</title></head>
<body>
<?
  // Controlla se il cookie e' stato trasmesso dal browser
  //  e precisamente il nome utilizzato, fms
  if ( ! isset($fms) ) {
    echo "Cookie non impostato";
  } else {
  // bisogna chiedere il nome del cookie, in questo caso fms
  // per conoscere il valore immesso
    echo "nome  valore<br>";
    echo "-----------<br>";
    echo "fms = $fms";
  }
?>

<? if ( !isset($fms) ) { 
  // possiamo scegliere se visualizzare l'impostazione oppure no
?>
   <br><br>
    <form action="cookie.php" method=POST>
      <input type=hidden name="scelta" value="impostacookie">
      Inserisci il valore<br> 
      <input type=text name="valore" value="">
      <br>
      <br>
      <input type=submit value="Imposta il cookie">
    </form>
<? } else { ?>

    <form action="cookie.php" method=POST>
      <input type=hidden name="scelta" value="rimuovicookie">
      <input type=submit value="Rimuovi il cookie">
    </form>
<? } ?>
</body>
</html>
 

da notare la funzione int isset (mixed var), che verifica se una variabile è definita.

Comunicazione con l'utente: i form
Proprio nel precedente paragrafo sono stati usati i form o moduli per inviare dati. Non c'è nulla di differente rispetto a tutti gli altri metodi di gestione dei form e nemmeno sull'uso delle variabili nei confronti di ASP e JSP: quando si inviano variabili tramite form queste sono considerate dalla pagina ricevente delle varibili globali.
Il metodo GET usato in un form equivale al passaggio dei paramtri via URL, cioè la pagina richiamata con tutte le variabili e i parametri sono visualizzati nella barra degli indirizzi, salvati nella cache e o potrebbero esseri salvati nella cartella cronologia, cosa che non è per nulla consigliato: pensate ad esempio che l'utente immetta una password o un altro tipo di dato personale. In sostanza è sempre consigliato usare il metodo POST nei form.

Di seguito c'è un form d'invio dati (form.php)

<HTML><HEAD><TITLE>primo form</TITLE></HEAD>
<BODY>
 <form method="post" action="form2.php">

 <!-- **** quello che segue è una tetxtbox (casella di testo) **** -->
  Cognome: <input name="cognome" type="text"><br>
  Nome: <input name="nome" type="text"><br>

 <!-- **** qui invece una combobox (casella di riepilogo combinata) **** -->
  Tipo di scuola
  <select name="tiposcu">
    <option value="Materna">Materna
    <option value="Elementare">Elementare
    <option value="Media">Media
    <option value="Superiore">Superiore
  </select><br>

 <!-- **** qui una checkbox (casella di controllo) **** -->
  <input type="checkbox" name="materia"> Materia Insegnata<br>

 <!-- **** qui invece una listbox (casella di riepilogo) a cui viene passato un array **** -->
  <select multiple name="materia[]">
   <option value="Italiano">Italiano
   <option value="Matematica">Matematica
   <option value="Altro">Altro
  </select><br>

 <!-- **** tipo pulsante di invio dati (submit) con testo "invia" **** -->
  <input type="submit" value="invia">

 </form>
</BODY>

poi uno di ricezione ed elaborazione (form2.php)
<HTML><HEAD><TITLE>prelievo dati primo form</TITLE></HEAD>
<BODY>
<?php
 echo "lei è il sig <B>$cognome <i>$nome</i></b>";
 echo "\n<br>";
 echo "la sua scuola d'appartenenza è $tiposcu";
 echo "\n<br>";
 // adesso controlliamo se esiste la variabile 'materia', la checkbox

// viene valutata l'esistenza dell'array
 if (isset($materia))
 {
   echo "materia insegnata: ";
   echo "\n<br>";
   // viene scandito l'array per estrarre il valore scelto con foreach
   foreach($materia as $val)
     echo "$val ";
 }
?>
</BODY>
</HTML>


Attenzione: per le versioni dalla 4.1 in poi e anche la 5.x occorre usare uno stile diverso per prelevare le informazioni tra le pagine web. Gli esempi che seguono si commentano da sè.

Uso del metodo GET
pagina chiamante
<HTML>
<HEAD>
<TITLE>metodo GET</TITLE>
</HEAD>
<BODY>
Prova d'invio informazioni<BR>
<A HREF= "metodoget2.php?strCognome=Crispino&strNome=Santo"> Elabora dati </A>
</BODY>
</HTML>

pagina ricevente
<HTML>
<HEAD>
<TITLE>metodo GET</TITLE>
</HEAD>
<BODY>
<?PHP
echo "Prova ricezione informazioni<BR>";
echo "Sono stati inviati i seguenti dati<BR>";
echo "Primo dato: " .$_GET['strCognome']. "<BR>";
echo "Secondo dato: " .$_GET['strNome']. "<BR>";
?>
</BODY>
</HTML>

Uso del metodo POST e i form
Modulo casella di testo con pagina chiamante e ricevente
<HTML>
<HEAD>
<TITLE> modulo</TITLE>
</HEAD>
<BODY>
Immetti il tuo nome<BR>
<FORM METHOD="post" ACTION="elaboradati1.php">
<INPUT TYPE="text" NAME="strnome">
<BR>
<INPUT TYPE="submit" VALUE="Invia dati">
<INPUT TYPE="reset" VALUE="cancella i dati immessi">
</FORM>
</BODY>
</HTML>

-------------- file elaboradati1.php --------------------
<HTML>
<HEAD>
<TITLE> elaborazione testo</TITLE>
</HEAD>
<BODY>
<?php
$strrisultato = $_POST['strnome'];
echo "hai inserito il testo è <b> $strrisultato </b>";
?>
</BODY>
</HTML>

Modulo pulsanti di opzione con pagina chiamante e ricevente
<HTML>
<HEAD>
<TITLE>modulopulsantiopzione</TITLE>
</HEAD>
<BODY>
Quale nazione preferisci per le tue vacanze ?<BR>
<FORM METHOD="post" ACTION="elaboradati2.php">
<INPUT TYPE="radio" NAME="opVacanze" VALUE="Francia">
Francia
<BR>
<INPUT TYPE="radio" NAME="opVacanze" VALUE="Spagna" CHECKED>
Spagna
<BR>
<INPUT TYPE="radio" NAME="opVacanze" VALUE="Spagna">
Inghilterra
<BR>
<BR>
<INPUT TYPE="submit" NAME="Submit" VALUE="Invia">
</FORM>
</BODY>
</HTML>


-------------- file elaboradati2.php --------------------
<HTML>
<HEAD>
<TITLE> elaborazione testo</TITLE>
</HEAD>
<BODY>
<?php
$strrisultato = $_POST['opVacanze'];
echo "tu preferisci andare in vacanza in: <b> $strrisultato </b>";
?>
</BODY>
</HTML>

Modulo casella di controllo con pagina chiamante e ricevente
<HTML>
<HEAD>
<TITLE>modulocaselladicontrollo</TITLE>
</HEAD>
<BODY>
<BR>
Qual'&egrave; il tuo hobby ? <BR>
<FORM METHOD="post" ACTION="elaboradati3.php">
<INPUT TYPE="checkbox" NAME="chkHobby[]" VALUE="sport">
Lo sport
<BR>
<INPUT TYPE="checkbox" NAME="chkHobby[]" VALUE="francobolli" CHECKED>
I francobolli
<BR>
<INPUT TYPE="checkbox" NAME="chkHobby[]" VALUE="computer">
Il computer
<BR>
<INPUT TYPE="submit" NAME="Submit" VALUE="Invia">
</FORM>
<BR>
</BODY>
</HTML>


-------------- file elaboradati3.php --------------------
<HTML>
<HEAD>
<TITLE> elaborazione testo</TITLE>
</HEAD>
<BODY>

<?php
if (is_array ($_POST['chkHobby'])) {
echo "I tuoi hobby sono: <br>";
foreach ($_POST['chkHobby'] as $value) {
echo "<b>$value</b> <br>";
}
}
var_dump( $_POST['chkHobby']);
?>


Modulo casella di riepilogo con pagina chiamante e ricevente
<HTML>
<HEAD>
<TITLE>modulocaselladiriepilogo</TITLE>
</HEAD>
<BODY>
Scegli il tuo libro preferito e la poesia preferita:<BR>
<FORM METHOD="post" ACTION="elaboradati4.php">
<SELECT NAME="cbLibro[]">
<OPTION>I Promessi Sposi</OPTION>
<OPTION>Orlando Furioso</OPTION>
<OPTION>La Divina Commedia</OPTION>
</SELECT>
<BR>
<BR>
<SELECT NAME="lstPoesia[]" SIZE="3" MULTIPLE>
<OPTION>La cavallina storna</OPTION>
<OPTION>La pioggia nel pineto</OPTION>
<OPTION>Il porto sepolto</OPTION>
<OPTION>L&acute; isola</OPTION>
<OPTION>La capra</OPTION>
</SELECT>
<BR>
<BR>
<INPUT TYPE="submit" NAME="Submit" VALUE="Invia">
</FORM>
</BODY>
</HTML>



-------------- file elaboradati4.php --------------------
<HTML>
<HEAD>
<TITLE> elaborazione testo</TITLE>
</HEAD>
<BODY>

<?php
if (is_array ($_POST['cbLibro'])) {
echo "hai scelto il libro <br>";
foreach ($_POST['cbLibro'] as $value) {
echo "<b>$value</b> <br>";
}
}

if (is_array ($_POST['lstPoesia'])) {
echo "hai scelto la poesia <br>";
foreach ($_POST['lstPoesia'] as $value) {
echo "<b>$value </b> <br>";
}
}
var_dump( $_POST['cbLibro']);
echo "<BR>";
var_dump( $_POST['lstPoesia']);
?>

</BODY>
</HTML>

Scarica gli esempi allegati

Attenzione: gli esempi qui mostrati funzionano con copia ed incolla a patto che vengano tolti tutti i caratteri superflui (colore, spaziatura, ...) utili per una migliore visualizzazione sui browser, ma fastidiosi per il parser PHP !

Pagina precedente - Pagina successiva