Uno degli utilizzi più frequenti di PHP è la gestione dei dati di un database, creeremo quindi una pagina PHP per la gestione dei dati presenti in una tabella. Le operazioni che andremo ad eseguire saranno l'inserimento dei record (INSERT
), l'aggiornamento di dati esistenti (UPDATE
), la cancellazione di dati (DELETE
) e, in visualizzazione, avremo sia la lista di tutti i record suddivisa in più pagine, sia il dettaglio di ciascun record. Questo approccio è noto anche con l'acronimo CRUD (Create, Read, Update, Delete) e condenseremo tutte queste operazioni in un unico file .php
.
Creazione della tabella
La tabella di riferimento si chiamerà utenti
, il campo id
sarà la chiave primaria autoincrementale.
CREATE TABLE 'utenti' (
'id' int(11) NOT NULL,
'nome' varchar(255) COLLATE utf8_unicode_ci NOT NULL,
'cognome' varchar(255) COLLATE utf8_unicode_ci NOT NULL,
'email' varchar(255) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Al primo accesso la pagina mostrerà la lista degli utenti e un pulsante per aggiungerne di nuovi. Impagineremo i dati usando una tabella HTML e, in corrispondenza di ogni riga/utente, avremo ulteriori tre link per visualizzare il dettaglio, la modifica e l'eliminazione di un singolo record.
Per ciascuna di queste operazioni verrà passato un parametro $azione
con cui deviare il flusso del programma verso una funzione apposita, tramite uno switch
: la variabile relativa all'azione verrà valutata dallo switch
e in caso di corrispondenza con un case
andremo a chiamare la funzione o le funzioni necessarie.
In ogni caso verrà chiamata una funzione che restituirà un output che verrà memorizzato in una variabile contenente la stringa HTML da stampare.
Connessione a MySQL
La prima cosa di cui abbiamo bisogno è la connessione al database:
$host = 'localhost';
$db = 'corso';
$user = 'xxxx';
$pass = 'xxxx';
try {
$connection = new PDO('mysql:host='.$host.';dbname='.$db, $user, $pass);
} catch (PDOException $e) {
print "Errore!: " . $e->getMessage() . "<br/>";
die();
}
Sarà utile memorizzare le credenziali in un file da includere in questa pagina per avere una gestione centralizzata di tali informazioni. Allo stesso modo è prassi memorizzare la connessione al database in un altro file da includere in quello sul quale stiamo operando, questo permette di evitare inutili ridondanze nel codice e facilita la manutenzione.
La funzione
La seconda operazione da eseguire è la lettura della variabile $azione
, per evitare situazioni impreviste elencheremo in un array le azioni ammesse in modo che se la nostra variabile dovesse assumere un valore non voluto potremmo rientrare in un caso di default
:
$azioniAmmesse = array('lista','dettaglio','form','salva','elimina');
$azione='';
if(isset($_REQUEST['azione'])) {
$azione = $_REQUEST['azione'];
if(!in_array($azione, $azioniAmmesse)){
$azione='';
}
}
La funzione isset()
serve per evitare che il sistema generi un notice
al primo accesso, o nei casi in cui venga rimossa o dimenticata l'azione. in_array()
è la funzione PHP che restituisce un valore booleano (true
o false
) a seconda che la stringa cercata sia presente o meno nell'array delle opzioni che abbiamo chiamato $azioniAmmesse
.
A questo punto possiamo procedere con l'impostazione del nostro switch
:
switch ($azione) {
case "salva":
salva();
$contenuto=lista();
break;
case "elimina":
elimina();
$contenuto=lista();
break;
}
function salva(){}
function elimina(){}
In questo modo, quando la variabile $azione
corrisponde a uno dei due case
, viene eseguita la funzione associata, nel primo caso salva()
servirà sia per l'INSERT
sia per l'UPDATE
, nel secondo elimina()
per la cancellazione del record. In ciascuno di questi due casi, terminata l'operazione di scrittura nel database, chiameremo la funzione lista()
che restituirà la lista dei record, nello specifico le righe della tabella HTML da stampare nella pagina.
case 'lista':
$contenuto = lista();
break;
case 'form':
$contenuto = form();
break;
case 'dettaglio':
$contenuto = dettaglio();
break;
default:
$contenuto = lista();
break;
}
function lista(){}
function dettaglio(){}
function form(){}
La pagina HTML
Proseguendo abbiamo le tre funzioni relative alla creazione del form, alla creazione della lista degli utenti e al dettaglio del singolo utente, il contenuto arriverà sotto la forma di una stringa HTML che verrà memorizzata nella variabile $contenuto
e successivamente stampata nella pagina. Vediamo ora la struttura della pagina HTML:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="page-header"><h1>Gestione utenti</h1></div>
<?php echo $contenuto; ?>
</div>
</body>
</html>
Si tratta ovviamente di una pagina HTML 5, formattata grazie a Bootstrap. L'attenzione dev'essere portata sulla variabile $contenuto
che verrà stampata nella pagina: infatti a seconda dell'azione invocata dallo switch
, questa variabile verrà valorizzata in modo diverso dall'output restituito dalle funzioni.