Le richieste HTTP (GET e POST)

13 gennaio 2017

Nella lezione di introduzione a PHP abbiamo detto che il linguaggio è nato principalmente per il Web. La conseguenza principale di questa caratteristica è la possibile di effettuare richieste HTTP.

Diamo nuovamente un'occhiata a come funziona una normale richiesta HTTP tra il client e il server.

Figura 1. Richiesta client/server.

Client - Server

Il client (normalmente un browser) effettua una richiesta HTTP al server, il server elabora la richiesta e restituisce una risposta. La risposta può essere una pagina HTML, un file JSON, un'immagine o qualsiasi altro formato.

La specifica HTTP definisce 9 tipi di metodi alcuni dei quali non sono però usati o supportati da PHP; i più diffusi restano sicuramente GET e POST. GET è il metodo con cui vengono richieste la maggior parte delle informazioni ad un Web server, tali richieste vengono veicolate tramite query string, cioè la parte di un URL che contiene dei parametri da passare in input ad un’applicazione; ad esempio:

www.miosito.com/pagina-richiesta?id=123&page=3

Il metodo POST, invece, consente di inviare dati ad un server senza mostrarli in query string, è ad esempio il caso dei form.

Data una richiesta HTTP vediamo quindi come accedere ed utilizzare le informazioni che ci vengono inviate dal client.

GET

Iniziamo con il metodo GET. Sicuramente è il più semplice e il più immediato. È consigliato soprattutto in quelle richieste in cui è utile salvare nell’URL i parametri richiesti, ad esempio per poter essere cachati. Un classico caso d'uso è una query di ricerca.

Vediamo infatti un esempio di come poter accedere ai parametri in GET di una richiesta HTTP proveniente da un form di ricerca. Avremo bisogno di due file: form.html e search.php.

Analizziamo innanzitutto il codice del file form.html che conterrà il form:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="search.php">
      <input type="text" name="author" placeholder="Inserisci autore" />
      <input type="submit" value="Cerca" />
    </form>
</body>
</html>

La pagina contiene al suo interno due campi:

  1. un campo di input di tipo testo chiamato author in cui inserire il nome di un autore da ricercare;
  2. un campo submit per effettuare la richiesta.

Se clicchiamo sul tasto di submit vediamo che viene effettuata una richiesta al file search.php e che, contestualmente, viene aggiunto un parametro con il valore di ricerca che abbiamo inserito noi. Se usiamo “Pippo” come chiave di ricerca, il browser viene indirizzato alla pagina:

http://localhost/search.php?author=Pippo

Andiamo quindi a creare search.php e vediamo come possiamo recuperare il nome dell'autore ricercato e come fornire un esempio di risposta al client.

<?php

$author = $_GET['author'];
$author = filter_var($author, FILTER_SANITIZE_STRING);

$authors = [
    'Stephen King' => 'Stephen Edwin King (Portland, 21 settembre 1947) è uno scrittore e sceneggiatore statunitense',
    'Arthur Conan Doyle' => 'Sir Arthur Ignatius Conan Doyle (Edimburgo, 22 maggio 1859 – Crowborough, 7 luglio 1930) è stato uno scrittore scozzese',
    'Agatha Christie' => 'Dame Agatha Mary Clarissa Miller, Lady Mallowan, nota come Agatha Christie (Torquay, 15 settembre 1890[1] – Wallingford, 12 gennaio 1976), è stata una scrittrice britannica.'
];

if (!in_array($author, array_keys($authors))) {
    $error = 'Autore non trovato';
}

$result = $authors[$author];

?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>Risultati di ricerca per: <?php echo $author ?></h1>

    <?php if ($error): ?>
        <p style="color: red"><?php echo $error ?></p>
    <?php else: ?>
        <p><?php echo $result ?></p>
    <?php endif ?>
</body>
</html>

Analizziamo il codice. La prima riga di nostro interesse è quella in cui accediamo all'array speciale $_GET. Questo array viene automaticamente popolato con i parametri che vengono passati in GET. Nel nostro caso il campo di input in cui abbiamo inserito l'autore si chiama author, di conseguenza la chiave dell'array in cui troviamo il valore ricercato ha il medesimo nome.

La riga successiva utilizza la funzione filter_var() vista nella lezione precedente per sanitizzare il dato ricevuto. Ricordiamoci che è fondamentale validare tutti i dati che vengono immessi dagli utenti per ridurre al minimo i problemi di sicurezza.

Il resto del codice è puramente di esempio ed infatti è mancante di un reale sistema di ricerca.

POST

Il metodo POST si differenza da GET in quanto i parametri della richiesta non vengono passati in query string e quindi non possono essere tracciati nemmeno negli access log dei web server. Caso d'uso comune di una richiesta in POST è un form che invia dati personali, come in una registrazione.

Vediamo quindi come accedere ai parametri POST con un esempio di registrazione tramite username e password.

Anche in questo caso abbiamo bisogno di due file: form.html e register.php. Iniziamo con il file contenente il form:

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="register.php" method="post">
        <input type="text" name="username" placeholder="Inserisci lo username" /><br>
        <input type="password" name="password" placeholder="Inserisci la password" /><br>

        <input type="submit" value="Registrati" />
    </form>
</body>
</html>

Il codice è simile all'esempio precedente. Le differenze sostanziali sono la presenza di due campi username e password e, soprattutto, l'aggiunta dell'attributo method nel tag form. Quando abbiamo bisogno di effettuare una richiesta POST è necessario specificare il metodo nel form.

A questo punto possiamo proporre il codice di register.php:

<?php

$username = $_POST['username'];
$password = $_POST['password'];

$username = filter_var($username, FILTER_SANITIZE_STRING);
$password = filter_var($password, FILTER_SANITIZE_STRING);

if (!$username || !$password) {
    $error = 'Username e password sono obbligatori';
}

?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <h1>Risultati Registrazione</h1>

    <?php if ($error): ?>
        <p style="color: red"><?php echo $error ?></p>
    <?php else: ?>
        <p>Benvenuto <?php echo $username ?></p>
    <?php endif ?>
</body>
</html>

Come probabilmente ci aspettavamo, nel caso di una richiesta POST l'array da utilizzare è $_POST. La logica resta la stessa della richiesta GET quindi la chiave dell'array corrisponde all'attributo name dichiarato nel form.

Tutte le lezioni

1 ... 32 33 34 ... 56

Se vuoi aggiornamenti su Le richieste HTTP (GET e POST) inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Le richieste HTTP (GET e POST)

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy