MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server)

Documenti analoghi
MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server)

La connessione ai database MySQL tramite script PHP versione 5.5

Spiegazioni esercizio Gestione Tabella con PHP e MySQL

Connessione con MySQL

Laboratorio di Progettazione Web

Connessione con MySQL

Corso di PHP. Prerequisiti. 8.1 PHP e MySQL. Conoscenza MySQL Tecnica della programmazione

Per poter interagire con un database in rete mediante uno script php bisogna. innanzitutto cerare una connessione. Ciò si ottiene mediante la funzione

Laboratorio di Progettazione Web

MY SQL Guida MySQL di base

PHP ESSENTIALS #10. By WI400 Team. : database e sql

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2016/2017

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2016/2017

Laboratorio di Basi di Dati

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2014/2015

Introduzione a MySQL. Definizione SQL. Esempio

2011 Politecnico di Torino 1

I.I.S. G. COSSALI - ORZINUOVI DATABASE. Marzo 2017 Prof. Dario Tomasoni 1

2011 Politecnico di Torino 1

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2012/2013

Fondamenti di Informatica A. A / 1 9

Manuale Comandi SQL SQL. Sito per esercitarsi (on line) SQL

PHP & MySQL. Giselda De Vita

PHP e MySQL. Scripting server-side per accesso a DB MySQL

Microsoft Access. Nozioni di base. Contatti: Dott.ssa Silvia Bonfanti

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

Lato client: vuol dire che le operazioni programmate vengono svolte e visualizzate direttamente sul computer dell'utente collegato

Un client su arduino invia i dati acquisiti ad un database

NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) E N G I N E = I

I DATABASE CREAZIONE DI UNA RUBRICA: Definiamo i campi della tabella. ID Cognome Nome Etc.

A.A. 2018/2019. Introduzione a SQL FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE. Docente Prof. Raffaele Pizzolante

Manuale utente Volta Control

Interazione 1 linguaggio PHP con DB MySQL

Lavorare con MySQL Parte Seconda.

Corso di. Basi di Dati I. 7. Esercitazioni in SQL: Definizione e manipolazione dei dati

Phpmyadmin. Creazione Database

MySQL. Esercizio 1. Soluzione

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

PHP 5. PHP ed i database. Database e tabelle. Struttura di un DB relazionale. Accesso a database

ASP e Database. A cura di Michele Cavalieri

PHP - MYSQL Ing. Bruno Di Caprio

Laboratorio Progettazione Web PHP e MySQL. Andrea Marchetti IIT-CNR 2013/2014

Sistemi di Elaborazione delle Informazioni

Gestire il database attraverso Javascript. Antonio Gallo

SQL: le funzioni di aggregazione

A.A. 2018/2019. Esercitazione 11. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

Il linguaggio PHP. Insegnarvi tutto il PHP? Non esattamente Obiettivo: insegnarvi ad interagire via web con una base dati

APPUNTI DELLA LEZIONE DI DATABASE DEL 20/10/2016 (POMERIGGIO)

Corso di Basi di Dati Prime nozioni relative all utilizzo del DBMS MySQL

Access. P a r t e t e r z a

DATABASE PER IL WEB. Programmazione Web 1

Prova Pratica di Informatica, Modulo Basi di dati Appello 23/07/2018

Basi di dati Applicazioni web in PHP per l interrogazione di basi di dati Laboratorio #5

APPUNTI DI PHP : V INFORMATICA SEZIONE G

ASSISTENZA TECNICA RELAZIONE

Interazione 1 linguaggio PHP con DB MySQL

Corso sul PACCHETTO OFFICE. Modulo Access

Gestire MySQL tramite PHP

MS Access Un DBMS relazionale per Windows?

qwertyuiopasdfghjklzxcvbnmqwerty uiopasdfghjklzxcvbnmqwertyuiopasd fghjklzxcvbnmqwertyuiopasdfghjklzx cvbnmqwertyuiopasdfghjklzxcvbnmq PHP e MySQL

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

Structured Query Language

SQL per le applicazioni D B M G

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

PHP 5. Accesso a database

Manuale SQL. Manuale SQL - 1 -

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

Installazione di EasyPhp. Avviare EasyPhp. La finestra di amministrazione di EasyPhp

Stringhe di caratteri

SQL per le applicazioni D B M G

2011 Politecnico di Torino 1

Procedura di login e sessione

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

MySQL Database Management System

Programmazione Web D B M G. Il linguaggio HTML

Il sistema informativo deve essere di tipo centralizzato e accessibile mediante un computer server installato nella rete locale dell albergo.

PRODOTTO CARTESIANO Caso Generale

Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI

Basi di Dati. Applicazioni web in PHP per l interrogazione di basi di dati. Esercitazione n. 4

1. DML RICORDIAMO. Contenuti: 2.1. Le principali operazioni su relazioni utilizzate nel DML

Basi di Dati. Applicazioni web in PHP per l interrogazione di basi di dati. Esercitazione n. 4

Corso di Access. Prerequisiti. Modulo L2A (Access) Struttura delle tabelle

A.A. 2018/2019. Esercitazione 12. Strutturazione di Istruzioni in Linguaggio SQL. [ Possibili Soluzioni ] FONDAMENTI DI INFORMATICA E PROGRAMMAZIONE

Laboratorio di Basi di Dati

Corso di Microsoft. Access. Marco P. Locatelli.

Laboratorio Progettazione Web PHP e FORMs HTML - Lezione 8. Andrea Marchetti IIT-CNR 2011/2012

2011 Politecnico di Torino 1

Architettura a tre livelli (1)

Corso di Basi di Dati A.A. 2016/2017

D B M G Il linguaggio HTML

DDL (Data Definition Language) schemi DML (Data Manipulation Language) DQL (Data Query Language) DCL (Data Control Language)

Caratteristiche dei linguaggi per Database

MySQL Migration Toolkit

Versione 1.0 Data 25/06/2014. Commenti Dichiarazione di copyright. Abstract Questo documento spiega come installare MOVIO in locale.

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

Transcript:

MODULO 1 PARTE 3 Programmazione (scripting) server-side con PHP 3.b Interazione con un database (MySQL Server) Goy - a.a. 2012/2013 Programmazione Web 1 Ripasso di database - I L'utilizzo di un database ci permette di salvare i dati in modo strutturato Quando progettiamo un database relazionale, dobbiamo definire quali informazioni conterrà e quali saranno le relazioni tra le informazioni questo può essere fatto a vari livelli: vista 1 vista 2 livello concettuale livello logico livello fisico vista n Goy - a.a. 2012/2013 Programmazione Web 2 1

Ripasso di database - II Livello logico: rappresentazione tabellare dei dati Tabella: LIBRI colonna/campo riga/record NInv N.Inv Autore Titolo Anno_ed Casa_ed cella Quando vogliamo costruire una tabella, dobbiamo innanzitutto definire la sua struttura: i nomi dei campi (colonne) e i tipi di dati in essi contenuti Goy - a.a. 2012/2013 Programmazione Web 3 Ripasso di database - III Interazione con un database: interrogazione (leggo da DB) inserimento di dati (scrivo nel DB) cancellazione di dati ("scrivo" nel DB) aggiornamento (scrivo nel DB) User Interface database Script (server-side) <? $c=mysql_connect("localhost,"root",""); mysql_select_db("bacheca"); $sql="select * FROM ut WHERE co='rossi'"; $ris = mysql_query($sql)...?> Goy - a.a. 2012/2013 Programmazione Web 4 2

Ripasso di database - III Ogni interazione con la base di dati: viene interpretata, analizzata ed eseguita dal DBMS (DataBase Management System) costituisce una query, espressa (direttamente oppure tradotta) in SQL restituisce come risultato un insieme di record (recordset) elementi in gioco: base di dati (struttura + eventualmente dati) DBMS User Interface script server-side (se si vuole che il sito web dinamico interagisca con il DB) Goy - a.a. 2012/2013 Programmazione Web 5 Ripasso di database: SQL SQL (Structured Query Language) - casi semplici: interrogazione SELECT colonna1 [, colonna2, ecc] FROM tabella [WHERE condizione] [ORDER BY colonna] nella condizione si possono usare i soliti operatori: =, >, <, >=, <=, <>; AND, OR, NOT inserimento (di un nuovo record) INSERT INTO tabella [(colonna1, ecc)] VALUES (valore1, ecc) cancellazione (di un record) DELETE FROM tabella [WHERE condizione] aggiornamento (modifica del contenuto di una cella) UPDATE tabella SET colonna1=valore1 [colonna2=valore2, ecc] [WHERE condizione] Goy - a.a. 2012/2013 Programmazione Web 6 3

Ripasso di database: MySQL Server - I Nel corso utilizzeremo MySQL Server (con PHP) per la costruzione di un piccolo database di esempio, che gestisce le informazioni sugli utenti di una ipotetica bacheca di annunci on-line MySQL (www.mysql.com) è un database Server, basato su SQL, multi-processo, multi-utente; è veloce e robusto MySQL Server è distribuito gratuitamente, con una licenza GNU (www.gnu.org/gnu/thegnuproject.it.html) La distribuzione di MySQL Server include il database server (DBMS) ediversiclient: il database server risiede sulla macchina su cui si trovano i dati riceve le richieste (query) dai client accede ai database fornisce le risposte (risultati delle query) Goy - a.a. 2012/2013 Programmazione Web 7 Ripasso di database: MySQL Server - II Attenzione! Il DBMS MySQL funziona con un architettura client-server MySQL MySQL client MySQL client Server MySQL client Non confondete MySQL Server con il Web (HTTP) Server (per es. Apache) Aprire una connessione al DB significa aprire una connessione con MySQL Server e poi chiedergli di selezionare un database connessione al DB Server e selezione del database su cui operare sono due operazioni diverse! Se devo effettuare due interazioni con due database distinti, mi occorre una sola connessione al DB Server! Goy - a.a. 2012/2013 Programmazione Web 8 4

MySQL Server: XAMPP Se avete installato XAMPP, MySQL Server dovrebbe già essere installato sul vostro PC e avviando il pannello di controllo di XAMPP potete avviare o fermare MySQL Server: phpmyadmin [vedi prossima slide] Goy - a.a. 2012/2013 Programmazione Web 9 MySQL Server: phpmyadmin XAMPP comprende anche phpmyadmin, un'interfaccia utente web-based (scritta in PHP), per interagire con MySQL Server: Potete accedere a phpmyadmin, pp cliccando sul pulsante Admin (di fianco a MySql), nel pannello di controllo oppure dal browser, potete connettervi direttamente a: http://localhost/phpmyadmin/ Cliccando su Privilegi, in alto nella home page di phpmyadmin, potete controllare gli utenti abilitati ad accedere al DB Server NB: la configurazione di default di XAMPP prevede, su localhost, un utente root, senza password (come vi dice phpmyadmin stesso, questa non è una configurazione sicura, ma in fase di sviluppo va bene ) Goy - a.a. 2012/2013 Programmazione Web 10 5

MySQL/phpMyAdmin - creazione di un DB - I 2) clicchiamo su Database 1) selezioniamo Italiano Goy - a.a. 2012/2013 Programmazione Web 11 MySQL/phpMyAdmin - creazione di un DB - II 4) lo creiamo 3) indichiamo il nome di un nuovo db (bacheca) Goy - a.a. 2012/2013 Programmazione Web 12 6

MySQL/phpMyAdmin - creazione di un DB - III 5) il nuovo DB compare nell'elenco sulla sinistra: lo selezioniamo Goy - a.a. 2012/2013 Programmazione Web 13 MySQL/phpMyAdmin - creazione di un DB - IV 6) creiamo una nuova tabella ("utenti")......con 5 campi (colonne) Goy - a.a. 2012/2013 Programmazione Web 14 7

MySQL/phpMyAdmin - creazione di un DB - V 7) digitiamo i nomi dei campi 8) selezioniamo il tipo del valore [vedi prox slide] 9) impostiamo le proprietà che desideriamo [vedi prox slide] 10) salviamo la tabella NB ignorate eventuali altre proprietà (trasformazioni...) Goy - a.a. 2012/2013 Programmazione Web 15 MySQL/phpMyAdmin - creazione di un DB - VI Tipi principali: INT = numero intero VARCHAR = stringa a lunghezza variabile (lunghezza massima specificata nella proprietà Lunghezza/Set) TEXT = testo DATE = data Alcune varianti: TINYINT, SMALLINT, MEDIUMINT, BIGINT = interi con lunghezze max predefinite DECIMAL, FLOAD, DOUBLE, REAL = decimali BIT = 0/1, BOOL = true/false, CHAR = stringa a lunghezza fissa (specificata nella proprietà Lunghezza/Set) ENUM/SET = valori compresi in un elenco fornito dalla proprietà Lunghezza/Set Goy - a.a. 2012/2013 Programmazione Web 16 8

MySQL/phpMyAdmin - creazione di un DB - VII Proprietà principali: Lunghezza/Set = numero (max) di caratteri ammessi (o lista dei possibili valori, se il tipo è ENUM/SET) Null = indica se il valore del campo è opzionale o obbligatorio (cioè se può avere valore null) Predefinito = imposta un valore predefinito per il campo A_I = auto_increment, proprietà generalmente usata con numeri interi: ad ogni inserimento di un nuovo record nella tabella, assegna il valore precedente+1 Indice PRIMARY = chiave primaria = identificatore univoco di record; non può essere null! (nel nostro es. impostiamo user_id come chiave primaria) Altri possibili valori: UNIQUE/INDEX/FULLTEXT NB se un campo è A_I, allora deve essere un indice (chiave) Goy - a.a. 2012/2013 Programmazione Web 17 MySQL/phpMyAdmin - creazione di un DB - VIII la nuova tabella compare sulla sinistra 11) clicchiamo su Inserisci per inserire dei valori Goy - a.a. 2012/2013 Programmazione Web 18 9

MySQL/phpMyAdmin - creazione di un DB - IX 12) inseriamo degli utenti nel database NB: non inseriamo lo user_id (viene inserito automaticamente) Goy - a.a. 2012/2013 Programmazione Web 19 Ripasso di database: note su SQL - I NOTE su SQL: INSERT: se non inserite tutti i campi (come nel nostro es: user_id è auto_increment quindi non lo inseriamo noi ma automaticamente il DBMS!), dovete obbligatoriamente indicare quali campi inserite (e nell'ordine corretto); per es: INSERT INTO utenti (cognome, nome, email, data_n) VALUES ('Caio', 'Tizio', 'caio@tin.it', '1999-09-29') SELECT: se volete selezionate tutte le colonne, potete usare l'*; per es: SELECT * FROM utenti WHERE email='caio@tin.it' Goy - a.a. 2012/2013 Programmazione Web 20 10

Ripasso di database: note su SQL - II NB: attenzione ai tipi di dati e alla struttura del database! INSERT INTO utenti VALUES ('Caio', 'Tizio', 'caio@tin.it') ERRORE! (mancano user_id e data_n!) INSERT INTO utenti (cognome, nome, email) VALUES ('Caio', 'Tizio', 'caio@tin.it') OK INSERT INTO utenti (cognome, nome, email, data_n) VALUES ('Caio', 'Tizio', caio@tin.it, '1999-09-29') ERRORE! (il tipo del campo email è stringa: ci vogliono le virgolette!) INSERT INTO utenti (cognome, nome, email, data_n) VALUES ('Caio', 'Tizio', '1999-09-29', 'caio@tin.it') ERRORE! (l'ordine è sbagliato!) Goy - a.a. 2012/2013 Programmazione Web 21 MySQL/phpMyAdmin: esportare un DB - I I file che contengono i database si trovano in: C:\xampp\mysql\data\ Da phpmyadmin è possibile esportare un database come query SQL: sulla sinistra selezionate il database che volete esportare fate click su Esporta Goy - a.a. 2012/2013 Programmazione Web 22 11

MySQL/phpMyAdmin: esportare un DB - II rapido SQL eseguite l'esportazione (creazione della qer query che costruisce il DB) Goy - a.a. 2012/2013 Programmazione Web 23 MySQL/phpMyAdmin: esportare un DB - III salvate il file nome-db.sql (per es. bacheca.sql) query che costruisce le tabelle del DB Goy - a.a. 2012/2013 Programmazione Web 24 12

MySQL/phpMyAdmin: importare un DB Da phpmyadmin è possibile importare un database come query SQL: Aprite il file nome-db.sql (per es. bacheca.sql) e leggete il nome del DB; create un DB con quel nome Cliccate il alto su SQL Fate copia&incolla del contenuto di nome-db.sql nella finestra e cliccate sul pulsante Esegui Goy - a.a. 2012/2013 Programmazione Web 25 PHP: interazione con un database - I Vi ricordate lo schema standard di elaborazione di una pagina web dinamica server-side (per es. PHP)? elaborazione (interpretazione del codice PHP) Server Server request (pag.php) HTML response (+ Javascript) Server HTML (+ Javascript) client client client Se lo script PHP contiene istruzioni di interazione con un database,lafasedi"elaborazione" di elaborazione (interpretazione dello script) implicherà anche una connessione con tale database:... <?php conn. DB elaborazione (interpretazione = DB?> del codice PHP)... Goy - a.a. 2012/2013 Programmazione Web 26? 13

PHP e MySQL: interazione I Cosa si deve fare per accedere ad un DB (MySQL) da una pagina web (PHP)? All'interno di uno script PHP dobbiamo: 1. Aprire una connessione con MySQL Server 2. Selezionare un database 3. Inviare al DB Server una query SQL 4. Eventualmente, estrarre (e visualizzare) i dati contenuti nel risultato della query (recordset) 5. Chiudere la connessione Goy - a.a. 2012/2013 Programmazione Web 27 PHP e MySQL: interazione II 1. Aprire una connessione con MySQL Server Per connettersi a MySQL Server bisogna avere: il nome dell'host (o l'indirizzo IP) su cui risiede il DB Server un nome-utente e una password $conn = mysql_connect("localhost", "root", "") or die ("Non riesco a creare la connessione"); apro una connessione a MySQL Server: la funzione mysql_connect ha 3 argomenti: db server, user-id, password NB: Se avete installato XAMPP (senza modificare le impostazioni di default) MySQL Server è accessibile su localhost con user-id="root" e password = "" Per verificare: nella prima pagina di phpmyadmin cliccate su Privilegi Goy - a.a. 2012/2013 Programmazione Web 28 14

PHP e MySQL: interazione III $conn = mysql_connect("localhost", "root", "") or die ("Non riesco a creare la connessione"); vi ricordate A B A B true true true true false true false true true false false false se A è true non è necessario valutare B... tanto to il risultato farà comunque true! l'interprete non lo valuta B viene valutato (interpretato) solo se A è false se mysql_connect riesce a creare una connessione: valore di ritorno = id della connessione, assimilabile a true la funzione die non viene valutata se mysql_connect non riesce a creare una connessione: valore di ritorno = false la funzione die viene valutata (termina il processo e scrive il messaggio) Goy - a.a. 2012/2013 Programmazione Web 29 PHP e MySQL: interazione III 2. Selezionare un database mysql_select_db("bacheca") or die ("Non trovo il DB"); seleziono un database: la funzione mysql_select_db ha 2 argomenti: il nome del db (obbligatorio) e la connessione (opzionale: se non viene specificata si usa l'ultima connessione aperta); restituisce true in caso di successo, false in caso di fallimento (posso invocarla assegnando il suo risultato ad una variabile: $db_selected = mysql_select_db("bacheca") or... ma non è necessario...) se la funzione mysql_select_db provoca un errore (restituisce false), allora viene eseguita (valutata) la funzione die, che termina il processo e scrive il messaggio Goy - a.a. 2012/2013 Programmazione Web 30 15

PHP e MySQL: lettura I 3. Inviare al DB Server una query SQL: a. definire la query b. inviarla al DB Server $sql = "SELECT user_id, nome, cognome FROM utenti WHERE cognome = 'Rossi'"; VEDI provadb1.php $ris = mysql_query($sql) or die ("Query fallita!"); creo una stringa contenente la query SQL...e la invio al DB Server: la funzione mysql_query ha 2 argomenti: la query sql (stringa, obbligatorio) e la connessione (opzionale: se non viene specificata si usa l'ultima lti connessione aperta) $ris conterrà il risultato della query (diverso a seconda del tipo di query: SELECT, INSERT, UPDATE, DELETE,...) Se abbiamo inviato una SELECT $ris contiene un recordset, cioè una lista di record Goy - a.a. 2012/2013 Programmazione Web 31 PHP e MySQL: lettura II 4. Eventualmente [nel caso di una SELECT], estrarre (e visualizzare) i dati contenuti nel risultato della query (recordset = lista di record): while ($riga = mysql_fetch_array($ris)) { echo $riga["nome"] "]. " "; echo $riga["cognome"]. "<br>"; VEDI provadb1.php con un ciclo, leggo uno per uno i record contenuti nel risultato della query: la funzione mysql_fetch_array estrae dal suo argomento ($ris) i record uno per volta (ad ogni ciclo); il record estratto di volta in volta viene messo nella variabile $riga; quando non ci sono più record da estrarre, mysql_fetch_array restituisce false, la condizione del while diventa falsa e il ciclo termina il record corrente è una lista (array) associativa: $riga[nomecampo] estrae il valore del campo nomecampo; echo lo scrive sulla pagina Goy - a.a. 2012/2013 Programmazione Web 32 16

PHP e MySQL: lettura III tabella utenti: user_id cognome nome email data_n 1 Rossi Mario mrossi@gmail.com 1999-04-25 2 Bianchi Maria maria@libero.it 1997-02-28 3 Rossi Paola rossip@tin.it 1980-12-03 SELECT user_id, nome, cognome FROM utenti WHERE cognome = 'Rossi' $ris: user_id cognome nome 1 Rossi Mario 3 Rossi Paola a $riga = mysql_fetch_array($ris) user_id cognome nome $riga: 1 Rossi Mario user_id cognome nome 3 Rossi Paola 1 Rossi Mario Goy - a.a. 2012/2013 Programmazione Web 33 PHP e MySQL: lettura IV $riga = mysql_fetch_array($ris) $ris: user_id cognome nome $riga: 1 Rossi Mario user_id cognome nome 3 Rossi Paola 3 Rossi Paola eof $riga = mysql_fetch_array($ris) $riga: false il ciclo si ferma (condizione falsa) [NB while (pippo=false) è equivalente a while (false) e while (pippo=true) è equivalente a while (true)] NB Un record ($riga) in PHP è un array associativo $riga['user_id'] 3 $riga['cognome'] Rossi $riga['nome'] Paola Goy - a.a. 2012/2013 Programmazione Web 34 17

PHP e MySQL: interazione IV 5. Chiudere la connessione: mysql_close(); chiudo la connessione a MySQL Server (la funzione mysql _close ha aun argomento ago toopzionale, o ae, la aconnnessione: o e: se non viene specificata si usa l'ultima connessione aperta) Abbiamo visto l'uso di una query di tipo SELECT, cioè abbiamo letto dei dati dal database (e li abbiamo visualizzati sulla pagina web) = interrogazione del database Vediamo adesso come fare a: inserire nuovi dati (un nuovo record) modificare dtii dati in un record esistente it t cancellare dati (cancellare un record) NB: l'unica cosa che cambia è il passo 3, cioè la formulazione della query SQL (e viene omesso il passo 4) Goy - a.a. 2012/2013 Programmazione Web 35 PHP e MySQL: inserimento Inserimento di un nuovo record: $co = $_POST["cognome_ut"]; $no = $_POST["nome_ut"]; $em = $_POST["email_ut"]; $dn = $_POST["nascita_ut"]; _ ipotizziamo che l'utente abbia riempito un form con questi dati... $conn =... mysql_select_db("bacheca")... $sql = "INSERT INTO utenti (cognome,nome,email,data_n) VALUES ('$co','$no','$em','$dn')"; $ris = mysql_query($sql)... if (!$ris) { echo "Query fallita!"; else { echo "Inserito utente ".$co." ".$no; mysql_close(); se $ris contiene false (!$ris vale true), significa che l'inserimento ha prodotto un errore... VEDI formdb2.html VEDI provadb2.php Goy - a.a. 2012/2013 Programmazione Web 36 18

PHP e MySQL: modifica Modifica di dati in un record: $old_em = $_POST["old_email"]; $new_em = $_POST["new_email"]; $conn =... VEDI formdb3.html VEDI provadb3.php ipotizziamo che l'utente abbia cambiato l'email attraverso un form... mysql_select_db( select db("bacheca") bacheca )... $sql = "UPDATE utenti SET email='$new_em' WHERE email='$old_em'"; $ris = mysql_query($sql)... if (!$ris) { echo "Query fallita!"; else { echo "Modificato email".$old_em." in ".$new_em; mysql_close(); se $ris contiene false (!$ris vale true), significa che l'aggiornamento ha prodotto un errore... Goy - a.a. 2012/2013 Programmazione Web 37 PHP e MySQL: modifica Cancellazione di un record: $em = $_POST["email_todel"]; $conn =... mysql_select_db("bacheca")... VEDI formdb4.html VEDI provadb4.php ipotizziamo che l'utente abbia chiesto la cancellazione dei suoi dati indicando l'email... $sql = "DELETE FROM utenti WHERE email='$em'"; $ris = mysql_query($sql)... if (!$ris) { echo "Query fallita!"; else { echo "Cancellato utente ".$em; mysql_close(); se $ris contiene false (!$ris vale true), ) significa ifi che la cancellazione ha prodotto un errore... Goy - a.a. 2012/2013 Programmazione Web 38 19

PHP e MySQL: parametri connessione - I Per evitare di avere i parametri necessari alla connessione (nome dell'host, nome-utente e password: parametri della dalla funzione mysql_connect e nome del DB: parametro della funzione mysql_select_db) select ripetuti in molti file (per modificarli, occorrerebbe editare e modificare tutti i file che li contengono) è buona norma definire, in un file separato, quattro variabili; tale file viene incluso quando necessario Per es, definiamo un file, vardb.inc, in cui: <?php $host="localhost"; $user="root"; root $pwd=""; $db="bacheca";?> Goy - a.a. 2012/2013 Programmazione Web 39 PHP e MySQL: parametri connessione - II... e dall'interno della pagine che accedono ai database includiamo il file: Per es: <?php include("vardb.inc");... $conn = mysql_connect($host, $user, $pwd) or die... mysql_select_db($db)......?> NB: le variabili $host, $user, $pwd e $db sono definite nel file vardb.inc Attenzione! Questa modalità è obbligatoria nel progetto d'esame! Goy - a.a. 2012/2013 Programmazione Web 40 20

PHP e MySQL: miglioramenti... necessari! - I Le interazioni viste sin qui sono i "mattoncini" di base; affinché un'interazione sia "corretta" sono necessari maggiori controlli Per es, quando inseriamo un nuovo utente nel database è bene controllare se è già presente il passo 3 diventa: $sql_1 = "SELECT * FROM utenti WHERE email='$em'"; $ris_1 = mysql_query($sql_1) or die ("Query 1 fallita!"); if (mysql_num_rows($ris_1)!= 0) { echo "un utente con questa email è già presente nel DB"; else { $sql_2 = "INSERT INTO utenti ti (cognome,nome,email,data_n) VALUES ('$co','$no','$em','$dn')"; $ris_2 = mysql_query($sql_2) or die ("Query 2 fallita!"); Goy - a.a. 2012/2013 Programmazione Web 41 PHP e MySQL: miglioramenti... necessari! - II NB1: mysql_num_rows(risid) restituisce il numero di righe (record) presenti nel risultato della query (recordset = risid) * usato con SELECT * mysql_affected_rows() restituisce il numero di righe (record) modificate dalla query * usato con INSERT, UPDATE, DELETE * Per es, se volete controllare l'esito di un'update: $sql = "UPDATE utenti SET email='$new_em' WHERE email='$old_em'"; $ris = mysql _query($sql) q or die ("Query fallita!"); if (mysql_affected_rows() = = 0) { echo "Attenzione! L'update non è stato effettuato"; Goy - a.a. 2012/2013 Programmazione Web 42 21

PHP e MySQL: miglioramenti... necessari! - III NB2: Anche quando fate un update o una delete è comunque opportuno controllare prima se il record da modificare/cancellare esiste... : $sql_1 = "SELECT * FROM utenti WHERE email='$em'"; $ris_1 = mysql_query($sql_1) q or die ("Query 1 fallita!"); if (mysql_num_rows($ris_1) = = 0) { echo "L'utente con l'email indicta non esiste"; else { $sql_2 = "UPDATE utenti SET email='$new_em' WHERE email='$old_em'"; /* oppure $sql_2 = "DELETE FROM utenti WHERE email='$em'"; */ $ris_2 = mysql_query($sql_2) or die ("Query 2 fallita!"); Goy - a.a. 2012/2013 Programmazione Web 43 22