PHP + MySQL. Programmazione lato server. Cosa vediamo. web server. database server. request. response. web client

Documenti analoghi
PHP + MySQL. Programmazione lato server. Cosa vediamo. web server. database server. request. response. web client. PHP engine. MySQL server.

PHP + MySQL. Programmazione lato server. Cosa vediamo. MySQL. MySQL: comandi utili. MySQL: accesso al server. web server.

PHP + MySQL. Programmazione lato server. Cosa vediamo. web server. database server. request. response. web client

Programmazione lato server PHP + MySQL

La connessione ai database MySQL tramite script PHP versione 5.5

CORSO DI: SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI I

Connessione con MySQL

Connessione con MySQL

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

MY SQL Guida MySQL di base

MySQL Command Line Client: operazioni fondamentali

Istruzioni DCL di SQL. Pag. 119 par.5

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

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

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

PHP - MYSQL Ing. Bruno Di Caprio

DATABASE PER IL WEB. Programmazione Web 1

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

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

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

Laboratorio di Basi di Dati

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

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

MySQL. Basi di Dati e Sistemi Informativi Prof. Marco Di Felice Dott.sa Sara Zuppiroli A.A

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

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

Esercitazione: Il DBMS MySQL. Insegnamento di Basi di Dati. Laurea in Ingegneria Informatica SAPIENZA Università di Roma

A. Veneziani Linguaggio SQL

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

OBIETTIVI DELL'ESERCITAZIONE

2011 Politecnico di Torino 1

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

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

SQL. Lezione 1. Docente: Alberto Belussi

PHP 5. Accesso a database

Laboratorio di Progettazione Web

Spiegazioni esercizio Gestione Tabella con PHP e MySQL

Il linguaggio SQL: autorizzazioni

Lavorare con MySQL Parte Prima.

PROGETTAZIONE DI DATABASE Linguaggio SQL

Basi di Dati CREAZIONE E POPOLAMENTO DI UNA BASE DI DATI

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

Ing. Lucia Vaira

Laboratorio di Basi di Dati

DBMS: MySQL CORSO DI BASI DI DATI 2014/2015

MANUALE ESSENZIALE MYSQL

MySQL Database Management System

Soluzione esercitazione 01

Titolo presentazione sottotitolo SISTEMI INFORMATIVI. Esercitazione 5 - MySQL Dott. Michele Zanella

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

Introduzione a MySQL. Definizione SQL. Esempio

Laboratorio di Basi di Dati

ASSISTENZA TECNICA RELAZIONE

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

Laboratorio di Sistemi Informativi

PRODOTTO CARTESIANO Caso Generale

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

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

Basi di Dati: Corso di laboratorio

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

Basi di Da( MySQL & MySQL Workbench. Anna Monreale

SQL - Structured Query Language

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

Un client su arduino invia i dati acquisiti ad un database

Breve guida a PostgreSQL (versione per Windows) Gianluca Cima

Aspetti avanzati nella definizione degli schemi DDL2 1

Fondamenti di Informatica A. A / 1 9

Esercitazione: Il DBMS MySQL

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

Python e Mysql. E' possibile interagire direttamente con un database mysql (ma anche con altri) utilizzando moduli appositi in python

Sistemi di Elaborazione delle Informazioni

DBMS. DataBase Management System. L. Vigliano

ESERCITAZIONE: Fornitore-Fornisce-Articolo

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Tecnologie di Sviluppo per il Web

Esercizio: database LibriTesto DBMS MySQL

SQL Server Introduzione all uso di SQL Server Dutto Riccardo. Dutto Riccardo - SQL Server 2008.

(1) Collegarsi all indirizzo (più un codice numerico comunicato durante l esercitazione)

Esercitazione: Il DBMS MySQL

Breve guida a MySQL. (versione per Windows)

Tecnologia e Applicazioni Internet 2011/12

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

Laboratorio di Basi di dati

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

Connesione ad un Database Access con PHP. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San giovanni

LABORATORIO SQL. a riga di comando. Ivano Mazzarotto

SQL Server Architettura Client-Server. SQL Server Introduzione all uso di SQL Server Dutto Riccardo.

SQL. SQL come Data Manipulation Language - Inserimento, cancellazione e aggiornamento di righe

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

Stringhe di caratteri

Gestire il database attraverso Javascript. Antonio Gallo

A. Veneziani Primi elementi di Linguaggio SQL

Laboratorio di Progettazione Web

SQL Injection for beginners

Data Definition in MySQL

Transcript:

Programmazione lato server PHP + MySQL Cosa vediamo web server request response web client database server 1

Cosa vediamo browser Apache PHP engine MySQL server Esempio: negozio virtuale 2

Esempio: negozio virtuale MySQL MySQL is a very fast, robust, relational database management system. The MySQL server controls access to your data to ensure that multiple users can work with it concurrently MySQL has been publicly available since 1996, but has a development history going back to 1979 3

MySQL monitor Digitando > mysql h hostname u username p Enter password: ****** si invoca il monitor MySQL, un client che permette di utilizzare il server MySQL Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 to server version: 4.0.22-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> MySQL: comandi utili mysql> show databases; mysql> use <nomedb>; mysql> show tables; mysql> describe <nometable>; 4

MySQL: comandi utili > mysql -h localhost -u ribaudo -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 to server version: 4.0.22-log Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> use mysql; ERROR 1044: Access denied for user: 'ribaudo@localhost' to database 'mysql' mysql> use negozio; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> MySQL: creazione di un database Database dell esempio id animale id cliente foto nascita razza descrizione prezzo animali ordini clienti nome cognome indirizzo citta email data_ordine 5

MySQL: creazione di un database mysql> CREATE DATABASE negozio; mysql> CREATE TABLE animali ( id_animale INT NOT NULL AUTO_INCREMENT, foto CHAR(255) NOT NULL, razza CHAR(100) NOT NULL, nascita DATE NOT NULL, descrizione TEXT, prezzo FLOAT(4,2), PRIMARY KEY (id_animale) ); NB: tutte le istruzioni devono sempre terminare con ; MySQL: creazione di un database mysql> CREATE TABLE clienti ( id_cliente INT NOT NULL AUTO_INCREMENT, nome CHAR(100), cognome CHAR(100) NOT NULL, indirizzo CHAR(255) NOT NULL, citta CHAR(100) NOT NULL, email CHAR(100) NOT NULL, PRIMARY KEY (id_cliente) ); mysql> CREATE TABLE ordini ( id_cliente INT NOT NULL, id_animale INT NOT NULL, data DATE NOT NULL, PRIMARY KEY (id_cliente, id_animale) ); 6

MySQL: popolare il database mysql> INSERT INTO animali (id_animale,foto,razza,nascita,descrizione,prezzo) VALUES (NULL, images/pappagalli.jpg, Pappagallus giallus, 2002-12-21, Coppia di pappagalli (maschio e femmina) bla bla ); Poichè id_animale è di tipo AUTO_INCREMENT si può specificare il valore NULL (oppure nessun valore), lasciando a MySQL il compito di creare il valore per questo campo MySQL: comandi utili Si può salvare il codice SQL che serve per creare e popolare un database in un file di testo, es. negozio.sql, e poi usare il comando $ mysql u username p < negozio.sql; $ Enter password: ****** 7

MySQL: comandi utili mysql> show databases; mysql> use <nomedb>; mysql> show tables; mysql> describe <nometable>; mysql> describe animali; +-------------+---------------+------+-----+------------+----------------+ Field Type Null Key Default Extra +-------------+---------------+------+-----+------------+----------------+ id_animale int(11) PRI NULL auto_increment foto varchar(255) razza varchar(100) nascita date 0000-00-00 descrizione text YES NULL prezzo float(4,2) 0 +-------------+---------------+------+-----+------------+----------------+ 6 rows in set (0.00 sec) mysql> MySQL: select Una volta creato e popolato un database lo si può interrogare e/o modificare usando il linguaggio SQL $ mysql u username p $ Enter password: ****; mysql> use negozio; mysql> select id_animale,foto,razza, prezzo from animali; +------------+-----------------------+-----------------------+--------+ id_animale foto razza prezzo +------------+-----------------------+-----------------------+--------+ 1 images/gatti.jpg Persiano fulgidus 50 2 images/pesci.jpg Pesce rosso cunilicus 20 3 images/pappagalli.jpg Pappagallus giallus 100 4 images/cane.jpg Lupus tuscanus 100 +------------+-----------------------+-----------------------+--------+ 4 rows in set (0.00 sec) mysql> 8

MySQL: front-end Per fortuna esistono dei pacchetti software (open source) che forniscono l accesso ad un server MySQL mediante un interfaccia grafica più o meno user-friendly Useremo phpmyadmin MySQL: phpmyadmin 9

MySQL: utenti Un server MySQL può gestire più utenti L utente root deve essere usato solo per l amministrazione del DBMS Per ogni utente che deve usare il sistema (ancor meglio, per ogni applicazione web) si dovrebbero definire 1) username e 2) password Per il progetto di laboratorio avete già gli utenti sul server: ar04xy MySQL: privilegi A privilege is the right to perform a particular action on a particular object, and is associated with a particular user. You can create a user within MySQL, you grant her a set of privileges to specify what she can and cannot do within the system principle of Least Privilege: a user (or process) should have the lowest level of privilege required in order to perform his task assigned 10

MySQL: privilegi MySQL fornisce 4 livelli di privilegi Global, Database, Table, Column Per assegnare (cancellare) un privilegio ad un utente si usa il comando GRANT (REVOKE) mysql> GRANT <privileges> [columns] ON <item> TO <username> [IDENTIFIED BY <password> ] [WITH GRANT OPTION]; MySQL: privilegi I privilegi sono espressi mediante un elenco di nomi separati dalla virgola MySQL permette di definire privilegi per l utente generico, privilegi per l amministratore, e dei privilegi speciali Per l utente generico si possono specificare i seguenti privilegi (che corrispondono alle operazioni che si possono fare su un database con SQL) SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER, CREATE, DROP 11

MySQL: privilegi Su speedy mysql> GRANT select, insert, update, delete, index, alter, create, drop ON ar04xy.* tutte le tabelle del vostro database TO ar04xy vostro utente IDENTIFIED BY ***** ; vostra password MySQL: privilegi I privilegi sono memorizzati in alcune tabelle del database di sistema mysql mysql.user mysql.db mysql.tables_priv mysql_column_priv Invece di usare il comando GRANT si possono modificare direttamente queste tabelle Perchè il server MySQL senta le modifiche sui privilegi ci vuole il comando mysql> FLUSH PRIVILEGES; 12

Accesso a MySQL mediante PHP I passi fondamentali sono 1. Controllare e filtrare i dati in arrivo dell utente 2. Stabilire una connessione con il database 3. Interrogare il database 4. Ottenere il risultato 5. Formattare il risultato per l utente Accesso a MySQL mediante PHP Esistono molte funzioni di libreria che permettono di portare a termine i passi 2, 3, 4 Se si usa MySQL server, queste funzioni iniziano con il prefisso mysql_ Nel caso di SQL server iniziano con sql_ Nel caso di Oracle iniziano con oci_ Quest anno useremo PEAR::DB 13

1) Controllare i dati in arrivo $nomevar = $_POST[ ]; $nomevar = trim($nomevar) $nomevar = addslashes($nomevar) $nomevar = stripslashes($nomevar) In alternativa, nel file php.ini magic_quotes_gpc On magic_quotes_runtime On $nomevar = htmlspecialchars($nomevar) $nomevar = strip_tags($nomevar) 2) Stabilire una connessione con il database <?php $db = mysql_pconnect( localhost, username, password ); if (!$db) { echo ** Attenzione, non riesco a creare la connessione ; exit; } mysql_select_db( nomedb") or die ("** Attenzione, non trovo il database");?> 14

2) Stabilire una connessione con il database mysql_pconnect(): crea una connessione persistente mysql_connect(): la connessione viene chiusa quando termina lo script La funzione die() permette di terminare l esecuzione di uno script fornendo un messaggio di errore. Si può anche richiamare una funzione, es. function err_msg(){ echo Si è verificato il seguente errore: ; echo mysql_error(); } die(err_msg()); 3) Interrogare il database $query= select attr1,, attrn from where ; $res = mysql_query($query); attr1 attr2 attrn false 15

4) Ottenere il risultato attr1 attr2 attrn $num_res = mysql_num_rows($res); $row = mysql_fetch_array($res); $row[ attr1 ] $row[ attr2 ] $row[ attrn ] 4) Ottenere il risultato $row = mysql_fetch_row($res); $row[0] $row[1] $row[n] $row = mysql_fetch_object($res); attr1 attr2 attrn $row->attr1 $row->attr2 $row->attrn 16

5) Formattare il risultato per l utente echo <tr> ; echo <td>.stripslashes($row[ attr1 ]); echo </td>\n ; echo <td>.stripslashes($row[ attr2 ]); echo </td>\n ; echo <td>.stripslashes($row[ attrn ]); echo </td>\n ; echo </tr> Insert / Update / Delete Si deve scrivere la query Supponiamo di voler inserire un nuovo cliente nel database di SpesaClick Nome Cognome Indirizzo $nome $nome $cogn $cogn $indr $indr = trim($_post[ nome ]); = addslashes($nome); = trim($_post[ cognome ]); = addslashes($cognome); = trim($_post[ indirizzo ]); = addslashes($indirizzo); 17

Insert / Update / Delete Dopo aver validato l input si scrive la query $query = INSERT INTO clienti (nome, cognome, indirizzo, )VALUES (`$nome, $cogn, $indr, ) ; NB: Bisogna fare attenzione all alternanza tra gli apici! Insert / Update / Delete Si esegue la query $res = mysql_query($query); Poi si si può trovare il il numero di di record che sono stati modificati $affected_rows = mysql_affected_rows[$res]; 18

PEAR::DB abstraction layer Insieme di classi che permettono di astrarre dal DBMS sottostante Le funzioni mysql_ vengono sostituite da funzioni generali che si occupano di redirigere le chiamate al DBMS MySQL Per usare PEAR::DB è necessario includere la libreria DB.php require_once( DB.php ); PEAR::DB 2) Stabilire una connessione Stabilire una connessione $db = DB::connect($dsn, true); $db = DB::connect($dsn, true); Stringa di connessione $dsn = mysql://$user:$pass@host/$db_name ; $dsn = mysql://$user:$pass@host/$db_name ; 19

PEAR::DB 2) Stabilire una connessione Controllo della connessione if if (DB::isError($db) { echo $db->getmessage(); exit; } PEAR::DB 3) Interrogare il database Esecuzione della query $res = $db->query($query); $res = $db->query($query); SELECT: cardinalità del risultato $num_res = $res->numrows(); $num_res = $res->numrows(); 20

PEAR::DB 4) Ottenere il risultato Ottenere il risultato $row = $res->fetchrow(db_fetchmode_assoc); $row = $res->fetchrow(db_fetchmode_ordered); $row = $res->fetchrow(db_fetchmode_object); PEAR::DB 5) Formattare il risultato echo <ul> ; // // per per ogni record nel nel risultato for ($i=0; $i<$num_res; $i++) { // // estraggo il il record $row = $res->fetchrow(db_fetchmode_assoc); echo <li>. stripslashes($row[ attr1 ]). </li> ; echo <li>. stripslashes($row[ attr2 ]). </li> ; } echo </ul> ; 21

PEAR::DB - Insert / Update / Delete Si costruisce la query e la si esegue $res = $db->query($query); Poi si si può trovare il il numero di di record che sono stati modificati $affected_rows = $db->affectedrows(); PEAR::DB vantaggi/svantaggi Si deve ricordare un solo insieme di metodi per l accesso al database Il codice NON cambia se cambia il DBMS, basta solo modificare la stringa di connessione Le funzioni di libreria native (es. mysql_ ) sono più veloci. 22

Per il progetto Userete PEAR::DB Importante Per motivi di sicurezza le istruzioni di connessione al database (ricordate che qui memorizzate username e password) devono stare su un file a parte, possibilmente al di fuori del sotto albero visibile tramite il browser 23