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



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

Programmazione lato server PHP + MySQL

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

MySQL Command Line Client: operazioni fondamentali

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

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

MySQL Database Management System

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

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

19. LA PROGRAMMAZIONE LATO SERVER

PHP e Structured Query Language

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

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

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

Preparazione. Introduzione a MySQL: costruzione di una base di dati e gestione degli accessi. Accesso all area condivisa. Avvio Server MySQL

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Esercitazione PAM. (Php Apache MySQL)

Laboratorio di Basi di Dati e Web

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

Lezione 8. Metadati, Viste e Trigger

Corso sul linguaggio SQL

Unità 2.1 Comandi sui database

Lavorare con MySQL Parte Prima.

Lavorare con MySQL Parte Seconda.

DBMS (Data Base Management System)

Un client su arduino invia i dati acquisiti ad un database

Introduzione a MySQL

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

GERARCHIE RICORSIVE - SQL SERVER 2008

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

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

PHP 5. Accesso a database

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

Strumenti Software per Esercitazioni (ambiente Windows) Basi di Dati L LS Ing. Gestionale

Benvenuti. Luca Biffi, Direttore Tecnico di Achab Achab techjam Archive Server for MDaemon

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

2104 volume III Programmazione

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

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

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE TABELLA ATTORI

Basi di Da( MySQL & MySQL Workbench. Anna Monreale

MANUALE ESSENZIALE MYSQL

RELAZIONE TECNICA GESTIONE CARTE DI CREDITO. a cura di EMANUELE CESARI

Introduzione a phpmyadmin

Configurazione avanzata di XAMPP

Corso sul linguaggio SQL

Esercitazione sulle libpq - libreria C per PostgreSQL

SQL Server Introduzione all uso di SQL Server e utilizzo delle opzioni Olap. Dutto Riccardo - SQL Server 2005.

DBMS: MySQL CORSO DI BASI DI DATI 2014/2015

SQL PER LA DEFINIZIONE DI BASI DI DATI

IL DAT A B A S E DI ALGE B R A N D O

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

Esercitazione: Il DBMS MySQL

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

Portale Materiali Grafiche Tamburini. Grafiche Tamburini Materials Portal

SQL non è solo un linguaggio di interrogazione (Query Language), ma. Un linguaggio per la definizione di basi di dati (Data-definition language (DDL))

<?php include './include/page.php';

COG.I.T.O. Manuale tecnico

Gestione Orario Lezioni: Schema del Database

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

MySQL Database Management System

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

L interfaccia a riga di comando di MySql

Il sistema IBM DB2. Sistemi Informativi T. Versione elettronica: L01.1.IntroduzioneDB2.pdf

PHP - Storia. Inizialmente sviluppato da Rasmus Lerdorf come serie di script CGI

SQL Sintassi Dei Comandi

INDICI. Prevediamo di effettuare spesso interrogazioni simili alle seguenti:

Non vedo l ora Realizzazione di un sistema per la gestione dell orario scolastico

Laboratorio di Basi di Dati

Definizione di domini

DBMS. Esempi di database. DataBase. Alcuni esempi di DBMS DBMS. (DataBase Management System)

Basi di Dati. S Q L Lezione 5

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

PHP e MySQL. Guida scaricata da

Stored Procedures. Massimo Mecella Dipartimento di Ingegneria informatica automatica e gestionale Antonio Ruberti Sapienza Università di Roma

Esercizi ed appunti PHP

SVILUPPO DEL BLOG Autori: Ilari Michele, Cimini Oscar, Zaleski Dawid

Anno 2013 Informatica ABACUS

Lezione 9. Applicazioni tradizionali

Lezione 6: Form 27/04/2012

The world s most advanced class on PostgreSQL o quasi! 4 Marzo 8 Aprile L'Antipasto 11 Marzo

MODULO 1 PARTE 3. Programmazione (scripting) server-side con PHP 3.c Cookies e sessioni. Goy - a.a. 2012/2013 Programmazione Web 1

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

Informatica per le discipline umanistiche 2 lezione 10

Manuale d uso della libreria Volta Log

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

MODULO 5 ACCESS Basi di dati. Lezione 4

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 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 2

MySQL: accesso al server 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 26944 to server version: 3.23.49-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>; 3

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 27328 to server version: 3.23.49-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 4

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) ); 5

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; 6

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 SLQ $ 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> 7

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 su webapp ribaudo ********* 8

MySQL: phpmyadmin su webapp 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 ogni gruppo avrà un suo username (webappx1, webappx2, webappx3, ) 9

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 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]; 10

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 MySQL: privilegi Esempio mysql> GRANT select, insert, update, delete, index, alter, create, drop ON webappxy.* TO webappxy IDENTIFIED BY ***** ; 11

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; 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 12

Accesso a MySQL mediante PHP Esistono molte funzioni di libreria che permettono di portare a termine i passi 2, 3, 4 Tutte queste funzioni iniziano con il prefisso mysql_ 1) Controllare i dati in arrivo $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) 13

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");?> 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()); 14

3) Interrogare il database $query= select attr1,, attrn from where ; $res = mysql_query($query); attr1 attr2 attrn false 4) Ottenere il risultato attr1 attr2 attrn $num_res = mysql_num_rows($res); $row = mysql_fetch_array($res); $row[ attr1 ] $row[ attr2 ] $row[ attrn ] 15

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 5) Formattare il risultato per l utente echo <tr> ; echo <td>. $row[ attr1 ]. </td>\n ; echo <td>. $row[ attr2 ]. </td>\n ; echo <td>. $row[ attrn ]. </td>\n ; echo </tr> 16

Esempio: negozio virtuale Codice sorgente degli esempi sulle pagine della lezione Esempio: negozio virtuale Codice sorgente degli esempi sulle pagine della lezione 17

Invio di e-mail $to=$email; $subject="grazie per aver scelto spesaclik"; $msg="$nome $cognome, abbiamo ricevuto "; $msg = $msg. "Grazie, lo lo staff di di spesaclick"; $from="ribaudo@disi.unige.it"; mail($to, $subject, $msg, $from); Problemi dell esempio Tanti Ogni volta un cliente deve inserire i propri dati per effettuare un nuovo ordine Il catalogo è lo stesso per tutti gli utenti Si pùo effettuare un solo ordine alla volta Non aggiorno il database dopo ogni ordine! 18

Una esempio di struttura più complessa Login page Forgot password? Registration Change profile View catalogue Add/delete to/from shopping basket Buy Logout Problemi Tanti ma soprattutto HTTP è stateless e quindi richieste successive non sono associate tra loro Non possiamo chiedere all utente di digitare login e password ogni volta che visita una nuova pagina 19

Alcune soluzioni possibili Usare campi nascosti Farsi aiutare dal web server mediante il meccanismo di autenticazione fornito da.htaccess (bisogna avere accesso al web server come amministratori) Usare cookies e sessioni Campi nascosti Al momento della registrazione si crea un valore che identifica l utente, per esempio una stringa generata in modo casuale Si memorizza questo dato nel database insieme ai dati dell utente 20

Campi nascosti In tutte le pagine successive, se c è un modulo, si deve introdurre un campo nascosto <input type= hidden name= pin value= ****** > se non c è un modulo, si deve associare ai link una stringa di interrogazione <a href= file.php?pin=***** >next</a> Campi nascosti In tutti i file PHP, prima di tutto si legge dalla variabile $pin il valore del campo nascosto Si riconosce l utente e si prosegue Problema Il campo nascosto è nel sorgente HTML (quindi modificabile!!!) inoltre è un po macchinoso 21