Nella lezione precedente abbiamo iniziato a creare il modello per la classe Libro del nostro progetto. In questa lezione completeremo tale modello, aggiungendo le funzioni per la creazione, aggiornamento e cancellazione dei libri della nostra biblioteca. Così facendo, infatti, avremo ultimato il mapping tra tra i metodi HTTP (GET
, POST
, PUT
e DELETE
) e le operazioni CRUD (Create, Read, Update, Delete).
Riproponiamo la classe libro che avevamo creato precedentemente:
<?php
class Libro
{
private $conn;
private $table_name = "libri";
// proprietà di un libro
public $ISBN;
public $Autore;
public $Titolo;
// costruttore
public function __construct($db)
{
$this->conn = $db;
}
// READ libri
function read()
{
// select all
$query = "SELECT
a.ISBN, a.Autore, a.Titolo
FROM
" . $this->table_name . " a ";
$stmt = $this->conn->prepare($query);
// execute query
$stmt->execute();
return $stmt;
}
// CREARE LIBRO
// AGGIORNARE LIBRO
// CANCELLARE LIBRO
}
?>
Occupiamoci quindi di scrivere i metodi create()
, update()
e delete()
per completare il modello Libro
.
Create
Il metodo create
sarà implementato come segue:
function create(){
$query = "INSERT INTO
" . $this->table_name . "
SET
ISBN=:isbn, Autore=:autore, Titolo=:titolo;
$stmt = $this->conn->prepare($query);
$this->ISBN = htmlspecialchars(strip_tags($this->ISBN));
$this->Autore = htmlspecialchars(strip_tags($this->Autore));
$this->Titolo = htmlspecialchars(strip_tags($this->Titolo));
// binding
$stmt->bindParam(":isbn", $this->ISBN);
$stmt->bindParam(":autore", $this->Autore);
$stmt->bindParam(":titolo", $this->Titolo);
// execute query
if($stmt->execute()){
return true;
}
return false;
}
La funzione strip_tags
si occupa di rimuovere i tag HTML e PHP dall'input passato. La funzione htmlspecialchars
, invece, processa il risultato della funzione precedente per convertire opportunamente i caratteri speciali di HTML. L'uso di queste due funzioni ci permette di "sanitizzare" (sanitize) i dati, ovvero di rimuovere qualsiasi carattere non consono dai dati, convertendolo opportunamente.
Una volta che gli input ISBN
, Titolo
e Autore
sono stati correttamente ripuliti, eseguiamo il binding, ovvero il collegamento di questi con la query SQL.
La funzione execute()
si occuperà infine di eseguire la query sul nostro database.
Forse potremmo non avere ancora chiaro come verranno passati questi input alla classe Libro
, ma ci arriveremo presto. In ogni caso, dobbiamo sempre ricordare che i nostri dati vengono inviati tramite i metodi HTTP (GET
, POST
, PUT
e DELETE
). Noi li andremo semplicemente a prelevare per poi salvarli negli attributi della classe Libro
.
Update
Il metodo update
è molto simile a create
, fatta eccezione per la query SQL - che questa volta utilizzerà il comando UPDATE
, piuttosto che INSERT
:
function update(){
$query = "UPDATE
" . $this->table_name . "
SET
Titolo = :titolo,
Autore = :autore
WHERE
ISBN = :isbn";
$stmt = $this->conn->prepare($query);
$this->ISBN = htmlspecialchars(strip_tags($this->ISBN));
$this->Autore = htmlspecialchars(strip_tags($this->Autore));
$this->Titolo = htmlspecialchars(strip_tags($this->Titolo));
// binding
$stmt->bindParam(":isbn", $this->ISBN);
$stmt->bindParam(":autore", $this->Autore);
$stmt->bindParam(":titolo", $this->Titolo);
// execute the query
if($stmt->execute()){
return true;
}
return false;
}
Si noti che le funzioni usate per ripulire i dati sono le stesse viste in precedenza.
Metodo Delete
Anche il metodo delete
è simile ai precedenti:
function delete(){
$query = "DELETE FROM " . $this->table_name . " WHERE ISBN = ?";
$stmt = $this->conn->prepare($query);
$this->ISBN = htmlspecialchars(strip_tags($this->ISBN));
$stmt->bindParam(1, $this->ISBN);
// execute query
if($stmt->execute()){
return true;
}
return false;
}
La differenza principale sta nell'uso della funzione bindParam
che ha una sintassi diversa, basata sul question mark placeholders binding. Si tratta di una query SQL con un segnaposto (il punto interrogativo presenta nella query). Il valore 1 in bindParam
indica il primo (e unico, nel nostro caso) punto interrogativo della query, dove andare a inserire il valore dell'ISBN.
Conclusioni
Adesso possediamo la struttura necessaria per poter creare le nostre REST API. La struttura del nostro progetto è la seguente:
|- BibliotecaREST - directory principale di progetto
|--- config/
|------ database.php - effettua la connessione al DB
|--- models/
|------ libro.php - contiene la rappresentazione di un libro della biblioteca
|--- libro/
|------ create.php - crea un libro sul database
|------ delete.php - cancella un libro sul database
|------ read.php - legge i libri dal database
|------ update.php - aggiorna un libro sul database
Nella prossima lezione vedremo come creare le pagine read.php, create.php, update.php e delete.php per effettuare le chiamate REST vere e proprie.