Scambio di informazioni con il server


Il contatore creato negli esempi precedenti, una volta avviato, non smette di crescere. Si supponga ora che l'autore della pagina alla fine di ogni mese, dopo aver preso nota del numero di accessi, voglia azzerare il contatore per iniziare un nuovo conteggio per il mese successivo. Perché questo succeda deve distruggere il file "file_conta.txt".

Ma non si può permettere a chiunque di distruggere un file sul server e quindi bisogna ricorrere a qualche sistema di selezione degli utenti autorizzati ad effettuare questa operazione. Il sistema usuale è quello di chiedere una password da inviare al server nel quale opportune istruzioni controlleranno la password e, solo se questa è corretta, provvederanno alla distruzione del file.

Esempio 3

Con l'esempio003.html si propone un modo un po' rudimentale e facilmente aggirabile, ma che si spera istruttivo, per realizzare questo progetto. L'esempio003.html è una pagina XHTML di cui si riporta la sezione <body>.

<body>
<p style="color:red; text-align:center"><b>Distruzione del file <i>file_conta.txt</i></b></p>
<form id="frm" name="frm" action="esempio003.php" method="get" 
  style="position:relative; left:30%; width:40%; text-align:center; border-style:solid" >
<p>
<label for="c_pw">password? </label>
<input type="text" id="c_pw" name="c_pw" size="30" value="" /> 
</p>
<p>
<input type="submit" value=" distruzione "/>
</p>
</form>
</body>

La pagina contiene una form nella quale sono importanti i valori dei due parametri action e method.

Quando viene premuto il bottone submit, il controllo passa dalla pagina esempio003.html alla pagina esempio003.php che contiene solo istruzioni per il server. Il suo contenuto è il seguente.

<?php
  $pw_letta = $_GET["c_pw"];
  $file = fopen("pw_conta.txt","r");
  $pw_giusta = fgets($file);
  fclose($file);
  $pw_giusta = trim($pw_giusta);
  if (strcmp($pw_letta,$pw_giusta)==0)
    {
      if (!unlink("file_conta.txt"))
        echo "Errore nella distruzione del file.";
      else
        echo "Il file è stato distrutto";
    }
  else
    echo "Password sbagliata";
?>

La prima istruzione

  $pw_letta = $_GET["c_pw"];

dice al server di recuperare il valore del campo c_pw della form che ha fatto l'invio, cioè la password scritta dall'utente, e di assegnarlo alla variabile $pw_letta. La variabile di sistema $_GET è un array i cui elementi sono coppie identificatore-valore. Inserendo tra le parentesi quadre l'identificatore si ottiene il valore associato.

Le tre istruzioni

  $file = fopen("pw_conta.txt","r");
  $pw_giusta = fgets($file);
  fclose($file);

vanno a prelevare il contenuto del file di testo pw_conta.txt e lo assegnano alla variabile $pw_giusta. Il programmatore avrà in precedenza preparato il file pw_conta.txt scrivendoci un'unica linea di un'unica parola, cioè la password richiesta.

L'istruzione

  $pw_giusta = trim($pw_giusta);

usa la funzione predefinita trim(stringa) per ripulire il contenuto della stringa $pw_giusta da eventuali caratteri non pertinenti (blank, line feed, ecc.) presenti all'inizio o alla fine della stringa stessa.

Nell'istruzione successiva

  if (strcmp($pw_letta,$pw_giusta)==0)
    {
      if (!unlink("file_conta.txt"))
        echo "Errore nella distruzione del file.";
      else
        echo "Il file è stato distrutto.";
    }
  else
    echo "Password sbagliata.";

si controlla se la password inserita è uguale a quella registrata nel file pw_conta.txt.
Per controllare se due stringhe sono uguali, si usa la funzione strcmp(stringa1,stringa2).

Questa funzione

Notare che, come in JS, Java e C, l'uguaglianza è denotato da un doppio segno ==.