Laboratorio di Basi di Dati · DB Prontopizza e verificare se la login è stata effettuata da un...
Transcript of Laboratorio di Basi di Dati · DB Prontopizza e verificare se la login è stata effettuata da un...
-
Laboratorio di Basi di Dati
Connessione al DB con PHP
Parte di questi lucidi è tratta da una versione precedente di
Marco Mesiti, Stefano Valtolina, Daniele Riboni e Sergio Mascetti
Anno accademico 2016-2017
Paolo Perlasca
-
2
Cosa abbiamo studiato
! Architettura 3-tier:
! Programmazione sul client
! Programmazione lato server
! inclusa l’interazione con il client
web server web client DB
-
3
Cosa vediamo oggi
! Interazione tra web server e DB
web server web client DB
-
4
Prima parte: Accedere ad un DB in PHP
-
5
Creare la connessione al DB
! Per accedere al DB è necessario creare una connessione
resource pg_connect(string $con_string)
! La stringa passata come parametro indica:
! il nome della macchina e la porta dove risponde il DBMS
! il nome del DB
! il nome e la password dell’utente
! (altri parametri, vedi documentazione…)
-
6
Creare la connessione al DB
$conn = pg_connect("host=localhost port=5432 dbname=prova user=user_name password=user_pwd");
if (!$conn) {
echo "Connection to DB failed";
exit;
}
-
7
Chiusura delle connessioni
! Di solito non è necessario chiudere esplicitamente le connessioni
! le connessioni non permanenti vengono chiuse automaticamente alla fine dello script
! Se volete chiudere esplicitamente una connessione, esiste un metodo apposta
! pg_close(resource $connection)
-
8
Le query
! Le query rappresentano tutte le istruzioni che possono essere inviate ad un DBMS. Servono, per esempio per:
! creare un DB o una tabella di un DB
! aggiungere dati ad una tabella
! estrarre dati da una o più tabelle
-
9
Query in PHP
! pg_query ( resource connessione, string query ): restituisce un risorsa risultato della query
! Restituisce FALSE in caso di errore o se la connessione non è valida
! I dettagli dell'errore si possono recuperare utilizzando la funzione pg_last_error()
! connessione è un parametro opzionale.
! Se non impostato, viene utilizzata la connessione di default, ovvero l'ultima connessione effettuata con pg_connect()
-
10
Eseguire una query: esempio
//devo aver creato la connessione prima
$query = "INSERT INTO Cliente(telC, cognomeC, nomeC, password, via, nCiv, nInt) VALUES ('1234567890', 'Gialli', 'Mario', 'pwd', 'via Comelico', 39, 2)";
$insert_query = pg_query($conn, $query);
if($insert_query) { echo 'Cliente inserito!
'; } else { exit("Errore nella query: ".pg_last_error($conn)); } -
11
Query di estrazione dati
! Per estrarre dei dati:
! si esegue la query
! si passa alla funzione pg_fetch_array il risultato della query
! la funzione ritorna un array con la prima riga del risultato
! ogni elemento dell’array rappresenta una cella della riga
! si richiama nuovamente la funzione pg_fetch_array per le righe successive
-
12
Estrazione dei dati: esempio 1
//devo aver creato la connessione prima
$query="SELECT CognomeC, NomeC FROM Cliente";
$query_res = pg_query($conn, $query);
$row = pg_fetch_array($query_res);
//Nome e cognome della prima riga
echo "Cognome: ".$row[0]."
";echo "Nome: ".$row[1];
-
13
Estrazione dei dati: esempio 2
//devo aver creato la connessione prima
$query="SELECT CognomeC, NomeC FROM Cliente";
$query_res = pg_query($conn, $query);
//fino a quando ci sono righe da leggere
while($row = pg_fetch_array($query_res)) {
echo "Cognome: ".$row[0]."
";echo "Nome: ".$row[1] ."
";}
-
14
Estrazione dei dati con pg_fetch_assoc: esempio
//devo aver creato la connessione prima
$query = "SELECT CognomeC, NomeC FROM Cliente";
$query_res = pg_query($conn, $query);
//fino a quando ci sono righe da leggere
while($row = pg_fetch_assoc($query_res)) {
echo "Cognome: ".$row["cognomec"]."
";echo "Nome: ".$row["nomec"]."
";}
-
15
Come uso i dati letti dal DB?
! In genere i dati estratti dal DB vengono usati per:
! fornire informazioni all’utente
! per esempio mostrando i dati presi dal DB all’interno di una tabella
! creare form
! per esempio mostrando una casella di scelta multipla i cui possibili valori sono letti dal DB
-
16
Mostrare il risultato di una query all’utente: esempio
//...come gli esempi di prima
echo "NomeCognome";
while($row = pg_fetch_assoc($query_res)) {
echo "";
echo "".$row["nomec"]."";
echo "".$row["cognomec"]."";
echo "";
}
echo "";
-
17
“E se il risultato della query contenesse tantissimi risultati?”
! Che problemi ci sarebbero se il risultato della query contenesse centinaia di righe?
! Soluzione: si limita la query a ritornare solo alcuni risultati. Esempio:
! I primi venti nella prima pagina (dal primo al 20esimo)
! I gruppo dei secondi venti nella seconda pagina (dal 21esimo al 40esimo)
! etc…
-
18
Limitare il numero di risultati ! Nello specificare una query di selezione esistono
due parametri: LIMIT e OFFSET
! LIMIT: il numero massimo di record da restituire
! OFFSET indica quanti record devono essere “saltati” prima di restituire il primo
! Esempio (20 risultati per pagina):
! prima pagina: SELECT […] LIMIT 20
! in generale, per la n-esima pagina: SELECT […] LIMIT 20, OFFSET m
! dove m = 20*(n-1)
-
19
Usare i dati letti dal DB per creare form
! Supponiamo di voler permettere di cancellare le informazioni su un cliente
! Nel mostrare la lista dei clienti, di fianco ad ogni nome vogliamo mettere un pulsante per cancellare quel cliente
! Tenete in considerazione che ogni riga della tabella Cliente ha un campo telC che identifica univocamente ogni riga
-
20
Esempio
//nel while di stampa del risultato, per ogni riga aggiungo una cella che contiene quanto segue
echo "";
$telC = $row["telc"];
echo '';
echo '';
echo '';
echo '';
echo "";
-
21
Seconda parte: ora prova tu
-
22
Esercizio 1
! Scarica e scompatta “Esercizio connessione DB” dal sito del corso
! Prima pagina: login.php
! Seconda pagina (login1.php): “sei loggato, puoi inserire i tuoi dati” oppure “nome utente o password errate, riprova” e rimanda a login.php
! ATTENZIONE: nel progetto i dati utili devono essere memorizzati nel DB e recuperati tramite interrogazioni, non cablati nel codice PHP!
! Terza pagina (step2.php): vengono mostrati i dati
-
23
Esercizio 1
! Vogliamo modificare il file login1.php per connetterci al DB Prontopizza e verificare se la login è stata effettuata da un cliente del database
! Come login e password consideriamo il numero di telefono e la password di ogni cliente
! Dobbiamo:
1. Creare la connessione al DB
2. Scrivere l’interrogazione per verificare se il cliente esiste nel DB e farla eseguire a PostgreSQL
3. Come capiamo se il cliente esiste o meno?
-
24
Esercizio 2 - sito Prontopizza
! Scarica e scompatta “Codice Prontopizza” dal sito del corso (lez. 13)
! SE NON HAI GIA' il DB Prontopizza in Postgres:
! Apri PgAdmin e crea il DB “prontopizza”
! Prendi il file “script Creazione DB” (lez. 9) dal sito del corso e copia le istruzioni nell’interfaccia SQL
! Viene creato e popolato il seguente schema Cliente(telC,cognome,nome,password,via,nCiv,nInt)
Pizza (codP,nome,prezzo)
Ingrediente (codP,ingrediente)
Ordine (telC,data,codP,qta,importo)
-
25
Esercizio 2 – sito Prontopizza
1. Completa la pagina per la registrazione di un nuovo utente (register.php): crea un form per l'inserimento dati e (in una nuova pagina) lo script per l'inserimento del nuovo utente nel DB. Controlla la correttezza dei dati inseriti.
2. Modifica la pagina di registrazione degli ordini (set_order.php) affinché questi vengano inseriti nel DB. Controlla la correttezza dei dati prima dell'inserimento.
3. Modifica la pagina degli ordini (pizze.php) in modo da filtrare le pizze in base a diversi criteri (costo, nome, ingredienti)