Logica dell'applicazione
Come descritto in precedenza MySQLi è, insieme a PDO, una delle due opzioni di PHP alternative alle obsolete mysql functions. Procediamo con la creazione di un'unica pagina PHP dove andremo a condensare tutte le operazione di gestione dei dati relativi a una tabella (utenti
) tramite un'applicazione CRUD (create, read, update, delete) di un nostro file PHP.
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,
anno_nascita year(4) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
La struttura della pagina sarà impostata sulla variabile $azione
che determinerà cosa la pagina PHP dovrà fare; avremo due tipi di operazioni, in scrittura e in lettura, che corrisponderanno a funzioni con cui restituire output solo in caso di lettura.
La variabile sarà gestita da un doppio switch
: il primo per le operazioni che non prevedono output (insert, update e delete), il secondo per quelle che li prevedono come la creazione del form, il dettaglio del singolo record e la lista di tutti i record presenti in tabella.
Ogni case
dello switch
corrisponderà a una funzione, in caso di output verrà restituita una variabile contenente la stringa HTML da stampare.
Possiamo iniziare creando la struttura della nostra pagina.
Connessione al database
La prima operazione di cui abbiamo bisogno è la connessione al database:
$mysqli = new mysqli('localhost', 'root', '', 'corso_2016');
if ($mysqli->connect_error) {
die('Errore di connessione (' . $mysqli->connect_errno . ') '. $mysqli->connect_error);
}
La seconda è la lettura della variabile $azione
; elencheremo anche le azioni ammesse in modo che se la nostra variabile assumesse un valore imprevisto rientreremmo 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 il notice
al primo accesso, o nel caso in cui venga rimossa, o dimenticata, l'azione. in_array()
è la funzione che restituisce un valore booleano (true o false) a seconda che la stringa cercata sia presente o meno nell'array $azioniAmmesse
.
Impostazione degli switch
A questo punto possiamo procedere con l'impostazione degli switch
, il primo per la scrittura:
switch ($azione) {
case "salva":
salva();
$azione = 'lista';
break;
case "elimina":
elimina();
$azione = 'lista';
break;
}
function salva(){}
function elimina(){}
In questo modo quando la variabile $azione
corrisponde ad uno dei due case
viene eseguita la funzione associata, nel primo caso salva
servirà sia per l'insert che per l'update, nel secondo avremo elimina
per la cancellazione del record. Andremo poi a riassegnare la variabile $azione
che verrà gestita dal secondo switch
, quello che si occuperà di restituire l'output.
switch ($azione) {
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(){}
In questo caso le tre funzioni previste restituiranno una stringa HTML che verrà memorizzata nella variabile $contenuto
e successivamente stampata nella seguente pagina:
<!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">
<?php echo $contenuto; ?>
</div>
</body>
</html>
Si tratta du una struttura ridotta all'osso, in essa abbiamo giusto il collegamento via CDN al file CSS di Bootstrap e, soprattutto, la stampa della variabile contenuto nella nostra pagina.