CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle...

14
03/11/16 1 CRUD cycle Ing. Lucia Vaira [email protected] Architettura 2 Tipicamente i dati sono memorizzati in un DB MySQL PHP è il linguaggio server-side che manipola le tabelle MySQL per consentire all’utente nel front-end di eseguire azioni (CRUD) sui dati

Transcript of CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle...

Page 1: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

1

CRUD cycle

Ing. Lucia [email protected]

Architettura

2

� Tipicamente i dati sono memorizzati in un DB MySQL� PHP è il linguaggio server-side che manipola le tabelle MySQL per

consentire all’utente nel front-end di eseguire azioni (CRUD) suidati

Page 2: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

2

Prepariamo la sorgente dati

3

Person

IDNameSurnameCityBirthdate

CREATE TABLE `Person` (ID` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,`Name` VARCHAR(45) NOT NULL ,`Surname` VARCHAR(45) NOT NULL ,`City` VARCHAR(45) NOT NULL,`Birthdate` DATE, ) ENGINE = INNODB;

Classe php per la connessione al DB

4

<?phpclass Database{

private static $dbName = ’ClienteAcquistaProdotto' ;private static $dbHost = 'localhost' ;private static $dbUsername = 'root';private static $dbUserPassword = 'root';private static $cont = null;public function __construct() {

die('Init function is not allowed');}public static function connect(){

if ( null == self::$cont ){try {

self::$cont = new PDO("mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);

} catch(PDOException $e) {die($e->getMessage());

}}return self::$cont;

}public static function disconnect(){

self::$cont = null;}

}?>

Page 3: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

3

PDO (Php Data Objects)

� PDO è un’estensione (introdotta nell'implementazione della versione 5di PHP) che definisce un’interfaccia unica, leggera e consistente peraccedere alle basi di dati e che offre allo sviluppatore una classe ingrado di fornire metodi utilizzabili indipendentemente dal DBMS diriferimento.

� PDO fornisce un data-access abstraction layer, cioè un livello diastrazione per l'accesso ai dati; si tratta infatti di una classe, definitaforse impropriamente anche come "libreria", che mette a disposizioneun insieme di sotto-classi derivate che agiscono in modo trasparenterispetto all'utente

5

PDO (Php Data Objects)

� Se PDO non è abilitato: aprire il file di configurazione php.ini edecommentare

� Decommentare poi le righe relative alle DLL di supporto per i DBMSche si desidera utilizzare

6

Page 4: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

4

Classe php per la connessione al DB

7

<?phpclass Database{

private static $dbName = ’ClienteAcquistaProdotto' ;private static $dbHost = 'localhost' ;private static $dbUsername = 'root';private static $dbUserPassword = 'root';private static $cont = null;public function __construct() {

die('Init function is not allowed');}public static function connect(){

if ( null == self::$cont ){try {

self::$cont = new PDO("mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);

} catch(PDOException $e) {die($e->getMessage());

}}return self::$cont;

}public static function disconnect(){

self::$cont = null;}

}?>

Classe php per la connessione al DB

8

<?phpclass Database{

private static $dbName = ’ClienteAcquistaProdotto' ;private static $dbHost = 'localhost' ;private static $dbUsername = 'root';private static $dbUserPassword = 'root';private static $cont = null;public function __construct() {

die('Init function is not allowed');}public static function connect(){

if ( null == self::$cont ){try {

self::$cont = new PDO("mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);

} catch(PDOException $e) {die($e->getMessage());

}}return self::$cont;

}public static function disconnect(){

self::$cont = null;}

}?>

Costruttore della classe DatabaseEssendo una classe statica, l’inizializzazione della classe non è consentita. Per impedire l’abuso della classe, inseriamo un die() per ricordarlo all’utente

Page 5: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

5

Classe php per la connessione al DB

9

<?phpclass Database{

private static $dbName = ’ClienteAcquistaProdotto' ;private static $dbHost = 'localhost' ;private static $dbUsername = 'root';private static $dbUserPassword = 'root';private static $cont = null;public function __construct() {

die('Init function is not allowed');}public static function connect(){

if ( null == self::$cont ){try {

self::$cont = new PDO("mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);

} catch(PDOException $e) {die($e->getMessage());

}}return self::$cont;

}public static function disconnect(){

self::$cont = null;}

}?>

Funzione principale della classe. Usa il pattern Singleton per assicurarsi che esista una sola connessione PDO per l’intera applicazione

Classe php per la connessione al DB

10

<?phpclass Database{

private static $dbName = ’ClienteAcquistaProdotto' ;private static $dbHost = 'localhost' ;private static $dbUsername = 'root';private static $dbUserPassword = 'root';private static $cont = null;public function __construct() {

die('Init function is not allowed');}public static function connect(){

if ( null == self::$cont ){try {

self::$cont = new PDO("mysql:host=".self::$dbHost.";"."dbname=".self::$dbName, self::$dbUsername, self::$dbUserPassword);

} catch(PDOException $e) {die($e->getMessage());

}}return self::$cont;

}public static function disconnect(){

self::$cont = null;}

}?>

Imposta a NULL la connessione. Viene chiamata per chiudere la connessione al database

Page 6: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

6

Grid per le operazioni CRUD

11

� Bootstrap: una raccolta di strumenti liberi per lacreazione di siti e applicazioni per il Web

� Contiene modelli di progettazione basati su HTML e CSS,sia per la tipografi a, che per le varie componentidell'interfaccia, come moduli, pulsanti e navigazione, cosìcome alcune estensioni opzionali di JavaScript

� È compatibile con le ultime versioni di tutti i principalibrowser

� Dalla versione 2.0 supporta anche il responsive webdesign: il layout delle pagine web si regola dinamicamente,tenendo conto delle caratteristiche del dispositivoutilizzato, sia esso desktop, tablet o smartphone

� A partire dalla versione 3.0, Bootstrap ha adottato ilresponsive design come impostazione predefinita,sottolineando il suo essere nata come libreriamultidispositivo e multipiattaforma

Bootstrap

12

Scarichiamo Bootstrap dal sito ufficialehttp://getbootstrap.com/getting-started/#download

ver 3.3.7

Page 7: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

7

Nuovo progetto php

13

Oltre ai file di Bootstrap necessitiamo di:• 4 file php per le operazioni CRUD

(create.php, read.php, update.php, delete.php)

• 1 classe database.php per la connessioneal database (classe Database vista prima)

• 1 file index.php che contiene la grigliaBootstrap

14

<!DOCTYPE html><html lang="en">

<head><meta charset="utf-8"><link href="css/bootstrap .min .css” rel="stylesheet"><script src="js/bootstrap .min .js"></script>

</head><body>

<div class="container"><div class="row">

<h3>My PHP CRUD</h3></div><div class="row">

<table class="table table-striped table-bordered"><thead>

<tr><th>Name</th><th>Surname</th><th>City</th><th>Birthdate</th><th>Action</th>

</tr></thead><tbody>

<?phpinclude 'database.php ';$pdo = Database::connect();$sql = 'SELECT * FROM Person ORDER BY ID DESC';

foreach ($pdo->query($sql) as $row ) {echo '<tr>';echo '<td>'. $row [’Name'] . '</td>';echo '<td>'. $row [’Surname'] . '</td>';echo '<td>'. $row [’City'] . '</td>';echo '<td>'. $row [’Birthdate'] . '</td>';echo '</tr>';

}Database::disconnect();

?></tbody>

</table></div>

</div></body>

</html>

index.php

Page 8: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

8

15

index.php

16

Aggiungiamo alla index il bottone Create…

….....<div class="row">

<p><ahref="create .php" class="btn btn-success">Create</a>

</p><table class="table table-striped table-bordered">

<thead><tr>

<th>Name</th><th>Surname</th><th>City</th><th>Birthdate</th>

</tr></thead>…...

Page 9: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

9

17

...e i bottoni per le operazioni CRUD….....<tbody>

<?phpinclude 'database.php ';$pdo = Database::connect();$sql = 'SELECT * FROM Person ORDER BY ID DESC';foreach ($pdo->query($sql) as $row ) {

echo '<tr>';echo '<td>'. $row [’Name'] . '</td>';echo '<td>'. $row [’Surname'] . '</td>';echo '<td>'. $row [’City'] . '</td>';echo '<td>'. $row [’Birthdate'] . '</td>';echo '<td width=250>';echo '<aclass="btn" href="read.php?id='.$row['ID'] .'">Read</a>';echo '&nbsp;';echo '<aclass="btn btn-success" href="update .php?id='.$row['ID'] .'">Update</a>';echo '&nbsp;';echo '<aclass="btn btn-danger" href="delete.php?id='.$row['ID'] .'">Delete</a>';echo '</td>';echo '</tr>';

}Database::disconnect();

?></tbody>….....

18

create.php

Page 10: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

10

19

create.php

20

read.php

Page 11: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

11

21

read.php

22

update.php

Page 12: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

12

23

update.php

24

delete.php

Page 13: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

13

Navighiamo nell’applicazione…

25

26

Page 14: CRUD - mb.unisalento.itmb.unisalento.it/Database 16-17/Allegati/03-11-2016_CRUD.pdf · CRUD cycle Ing. Lucia Vaira lucia.vaira@unisalento.it Architettura 2 Tipicamente i dati sono

03/11/16

14

27