Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Form HTML: gestione dei dati con PHP

Impariamo a gestire i form HTML e l'invio dei dati con PHP tramite degli esempi pratici nei quali vengono utilizzati i metodi GET e POST.
Impariamo a gestire i form HTML e l'invio dei dati con PHP tramite degli esempi pratici nei quali vengono utilizzati i metodi GET e POST.
Link copiato negli appunti

Ogni applicazione Web deve consentire all'utente di interagire con essa. Nella maggior parte dei casi tale interazione è possibile attraverso l'utilizzo di Form HTML.

Un form è un modulo che, attraverso un'interfaccia, consente ad un client di inviare dati al server attraverso il protocollo HTTP e ricevere una risposta. Nel nostro caso specifico consiste in un modulo che l'utente può compilare ed inviare al server; il server a sua volta riceverà le informazioni, le elaborerà e restituirà una risposta all'utente.

Il protocollo HTTP prevede diversi metodi per l'invio dei dati: GET, HEAD, DELETE, POST, PATCH, PUT, CONNECT, OPTIONS, TRACE, PATCH. A meno che non si stia lavorando a delle REST API, i metodi che si utilizzano più frequentemente per una Web application sono GET e POST.

Vediamo le differenze tra i due metodi e come utilizzarli per gestire i dati con PHP.

GET vs POST

La differenza principale tra i due metodi è la modalità con cui vengono trasportati i dati dal client al server. GET li appende ad una query string mantenendoli visibili; POST invece li nasconde nel body della richiesta. Ciò fa preferire POST tutte quelle volte che è necessario inviare dati sensibili.

La possibilità di effettuare delle richieste GET aggiungendo parametri all'indirizzo della pagina lo rende invece molto utile in tutte quelle circostanze in cui le informazioni possono essere visibili. Per sua natura GET può essere cachato. Questa caratteristica consente quindi di implementare dei meccanismi di caching per cui una richiesta può essere prelevata dalla cache velocizzando i tempi di risposta e diminuendo il carico del server.

Andiamo a realizzare un esempio di Web application PHP in cui utilizzare entrambe le tipologie descritte. Avremo due form: uno per ricercare utenti attraverso il loro indirizzo email e uno per aggiungere nuovi utenti.

Per un'anteprima di cosa realizzeremo possiamo dare un'occhiata a questo repository su GitHub.

GET

Se non diversamente specificato una pagina Web viene richiesta attraverso il metodo GET. Creiamo ora una pagina index.php in cui andiamo ad inserire un form HTML per la ricerca:

<form action="search_result.php">
    <input type="email" name="email" placeholder="Enter email">
    <button type="submit">Search</button>
</form>

Di default il method del form è GET. Il codice appena visto indica quindi che la pagina search_result.php si aspetta una chiamata in GET con un parametro chiamato email. Tale pagina si occuperà di cercare l'utente e fornire un risultato.

Il codice del file search_result.php è volutamente semplificato per fini didattici. La parte che principalmente ci interessa è quella in cui recuperiamo il parametro email e lo sanitizziamo prima di operare su di esso.

PHP contiene delle variabili, definite superglobal che sono accessibili indipendentemente dallo scope. Una di esse è l'array associativo $_GET che contiene i parametri passati attraverso query string. Supponendo che la mail sia pippo@pluto.com nell'esempio precedente avremo l'array:

array(1) {
  ["email"]=>
  string(1) "pippo@pluto.com"
}

Vediamo quindi come usare l'array:

$email = filter_var($_GET['email'], FILTER_SANITIZE_EMAIL);

È importante verificare tutti i dati inseriti al fine di evitare che malintenzionati sfruttino il form per attacchi di tipo SQL Injection o Cross Site Scripting.

La funzione filter_var() consente di ripulire il valore contenuto in $_GET['email'] .

Il codice completo del file è disponibile su questo link.

POST

Come già anticipato i parametri di una richiesta POST non vengono passati in query string e non possono essere tracciati nemmeno negli access log dei Web server. Utilizzeremo tale metodo per inserire un nuovo utente.

Creiamo un file new.php:

<form action="save_user.php" method="post">
    <input type="email" name="email" class="form-control" placeholder="Enter email">
    <input type="text" name="firstName" class="form-control" placeholder="Enter first name">
    <input type="text" name="lastName" class="form-control" placeholder="Enter last name">
   <button type="submit" name="search" class="btn btn-primary">Add new user</button>
</form>

In questo caso abbiamo esplicitato che il metodo deve essere POST e definito i campi in cui si andranno ad inserire le informazioni dell'utente.

A questo punto possiamo creare il file save_user.php che si occuperà di validare i dati inseriti e di salvare l'utente nel database.

Verifichiamo quindi che il file sia accessibile solo se per il metodo previsto:

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    die('You cannot access to the page');
}

L'array $_SERVER è un'altra delle variabili superglobal di PHP, esso contiene diverse informazioni relative al server, al client che ha effettuato la richiesta e sulla richiesta stessa. Nel nostro caso ci è utile per recuperare il metodo utilizzato.

Andiamo poi a recuperare le informazioni dall'array $_POST che è l'array in cui PHP gestisce i dati passati attraverso questo metodo.

$email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
$firstName = filter_var($_POST['firstName'], FILTER_SANITIZE_STRING);
$lastName = filter_var($_POST['lastName'], FILTER_SANITIZE_STRING);

Come per l'esempio della ricerca, anche in questo caso andiamo a sanitizzare i parametri così da evitare comportamenti inaspettati e rendere più sicura l'applicazione. A questo punto possiamo validare i vari campi prima di salvare l'utente:

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
   $errors[] = 'Email is not valid';
}
if (!$firstName) {
    $errors[] = 'First name is not valid';
}
if (!$lastName) {
    $errors[] = 'Last name is not valid';
}
if(empty($errors)) {
  //save user
}

La funzione filter_var() consente anche di validare - oltre che sanitizzare - le variabili. In questo caso infatti verifichiamo che la mail immessa sia valida. Se non ci sono errori nei dati immessi andremo a salvare l'utente.

Il codice completo del file è disponibile tramite questo link.

REQUEST

Un altro array superglobal che può contenere i dati passati ad un form è l'array $_REQUEST. Al suo interno possiamo trovare tutti i parametri contenuti in $_GET, $_POST e $_COOKIE. Si consiglia però di usarlo con moderazione poiché riduce la sicurezza dell'applicazione.

Ti consigliamo anche