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

Operazioni CRUD

Implementare le operazioni CRUD (Create, Read, Update, Delete) e mapparla sui metodi HTTP, per realizzare API REST in PHP.
Implementare le operazioni CRUD (Create, Read, Update, Delete) e mapparla sui metodi HTTP, per realizzare API REST in PHP.
Link copiato negli appunti

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.

Ti consigliamo anche