Laboratorio di sistemi Web Application in Php5 Php



Documenti analoghi
Laboratorio di Sistemi Prototipo applicazione Biblioteca Jsp [Java]

// inizializzazione della biblioteca con utenti, libri e prestiti // non richiesta Biblioteca.inizializza();

Laboratorio di Sistemi Programmare in Php con NetBeans Php. Programmare in Php con Xampp e NetBeans IDE

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

Laboratorio di sistemi SELECT e checkbox Jsp [Java]

Laboratorio di Sistemi Fattoriale di un numero Jsp [Java]

PHP e MySQL. Guida scaricata da

Lavorare con MySQL Parte Seconda.

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

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

Laboratorio di Sistemi CRUD con MySQL JSP (Java)

Laboratorio di sistemi MVC versione 2 Jsp (NetBeans)

1 Gestione dell utente connesso in sessione con Java Server Pages, Java Beans, Servlet

MySQL Database Management System

APPUNTI DI PHP : V INFORMATICA SEZIONE G

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

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

Esercizio data base "Biblioteca"

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Un client su arduino invia i dati acquisiti ad un database

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

Trasformare una Java (Console) Application in una Web Application (con utilizzo di un database MySQL)

Laboratorio di Tecnologie Web Laurea in Scienze e Tecnologie Multimediali

bool mysql_select_db([string database_name [,resource link_identifier]]) Connessione ad un server MySQL vuole conettere

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

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

Laboratorio di Sistemi Autenticazione utente mediante MySQL Jsp [Java]

PHP 5. Accesso a database

Istruzioni per l installazione del software per gli esami ICoNExam (Aggiornate al 15/01/2014)

Architettura MVC-2: i JavaBeans

Progetto di Ingegneria del Software 2. SWIMv2

Aspetti applicativi e tecnologia

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

ISI s.r.l. Corso di Access 05 CREARE UN ELENCO MAILING ED INVIARE MESSAGGI DI POSTA ELETTRONICA Pag. 1/6

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1

lo PERSONALIZZARE LA FINESTRA DI WORD 2000

Prova di Laboratorio di Programmazione

Esercitazione 4 JDBC

Lezioni di Laboratorio sui Data Base

phpmyedit con codice offuscato (Editor istantaneo di tabelle MySQL e generatore di codice PHP, open source)

<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body>

MySQL Database Management System

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

Architettura a tre livelli (1)

4 Pubblicare i dati MySQL

Eprogram ITIS V anno Unità 6 - PHP e MySQL

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Laboratorio di sistemi Prima Web Application JSP [Java]

I FORM. L'attributo action contiene l'url del file php a cui devono essere inviati i file per essere elaborati.

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

Java: la libreria delle classi

Mac Application Manager 1.3 (SOLO PER TIGER)

Corso su LINQ Lezione 16. Introduzione

Modulo 4: Ereditarietà, interfacce e clonazione

La connessione php-mysql con MySQLi

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

Scrivere uno script php che, dato un array associativo PERSONE le cui chiavi sono i

GateManager. 1 Indice. tecnico@gate-manager.it

Interazione con l utente : i moduli.

Guida Joomla. di: Alessandro Rossi, Flavio Copes

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

PHP: Professional Hypertext Preprocessor

GUIDA RAPIDA PER LA REGISTRAZIONE DELLE INFORMAZIONI EDITORIALI E PER L INSERIMENTO E LA GESTIONE DEI PRODOTTI

Esercizi di JavaScript

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

Interfaccia di base di GroupWise WebAccess

ACTIVE SERVICE PAGES E DATABASE: tecnologia ADO

Introduzione JDBC interfaccia java.sql driver caricare i driver

Laboratorio di reti II: Gestione di database lato server

Sicurezza Informatica: Tecniche di SQL INJECTION

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

PHP Survival Kit (Ovvero gestire un database MySQL tramite PHP)

Esercizi sulla definizione di classi (Fondamenti di Informatica 1 Walter Didimo) Soluzioni

Installazione e configurazione di Java DB in Windows (7)

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

Esercitazione 8. Basi di dati e web

Tale attività non è descritta in questa dispensa

- La formattazione con foglio di stile esterno: Come realizzare e collegare un file con codice di stile ad una pagina web.

LEGGERE E VISUALIZZARE I DATI DI UNA TABELLA IN UNA PAGINA WEB

Basi di dati e Web (Moduli: Laboratorio e Siti Web centrati sui Dati) Prova scritta del 14 luglio 2008

Database 1 biblioteca universitaria. Testo del quesito

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

MODULO DOMANDE INDICE

CakePHP Creare un'applicazione con CakePHP. massimoi@impronta48.it

19. LA PROGRAMMAZIONE LATO SERVER

MANUALE EDICOLA 04.05

Presentazione del progetto

Anno 2013 Informatica ABACUS

Transcript:

Applicazioni web con Xampp, Php5 e NetBeans 6.5 (Windows) Vogliamo ora riscrivere a titolo di prova un'applicazione web precedentemente scritta in Java (si legga l'articolo all'indirizzo http://www.mauriziocozzetto.net/pdf/dao_mysql.pdf). Il problema è quello solito: da una casella a scorrimento, l'utente seleziona uno scrittore e l'applicativo restituisce l'elenco dei libri scritti da quell'autore. Se l'utente clicca su Dettagli libro, è possibile vedere ulteriori dettagli del libro selezionato. Fig. 1 I libri (in questo caso solo uno) scritti da Michael Bowers Fig. 2 Dettagli del libro con immagine di copertina e introduzione DAO_mySQL_Php5.pdf Pag. 1/13 Cozzetto

Il modello a oggetti e il modello relazionale I due modelli sviluppati per l'applicazione Java (modello relazionale e corrispondente modello a oggetti) sono ancora validi e non vi sono segnalazioni particolari da fare, eccetto forse qualche leggera differenza nei nomi dei metodi della classe DAO e la presenza di una classe di utilità contenente un unico metodo statico per la redirezione dell'url. L'applicativo web è costituito dalle classi Autore.php, Libro.php, DAO.php, Editore.php, Utility.php (raccolte in un'unica cartella di nome classes), da due pagine php, index.php e index2.php e da un insieme di risorse (immagini delle copertine dei libri) collocate nella cartella img. Il database usato è biblio_db, che è lo stesso database usato nell'applicazione web Java BibliotecaDAOWebApp2, con la stessa struttura delle tabelle e gli stessi dati. Codice Riportiamo di seguito tutto il codice delle classi per consentirvi di confrontare le due soluzioni (Java e Php): noterete davvero molte analogie. Le differenze riguardano invece la gestione degli errori in Java (mentre in Php possiamo controllare i valori assunti dalle funzioni), l'uso intensivo degli array associativi in Php (che non dispone di strutture dati di particolare interesse) mentre in Java abbiamo usato l' interfaccia List e le corrispondente struttura dati concreta che la implementa (ArrayList). Per l'accesso al database MySQL, abbiamo fatto uso delle funzioni built-in del Php mysql_connect(), mysql_select_db(), mysql_query(), mysql_fetch_array() ecc. In questo caso (Php) in effetti l'accesso al database MySQL risulta semplificato in quanto non dobbiamo scaricare driver particolari, mentre, se desideriamo cambiare tipo di database, dobbiamo invece riscrivere e riadattare gran parte del codice della classe DAO. In Java non è necessario intervenire sul codice direttamente ma è sufficiente cambiare i driver e la url di accesso al db come spiegato a suo tempo. In alternativa possiamo appoggiarci ad un ulteriore strato software aggiuntivo (database abstraction layer) che farà da ponte tra l'applicativo e i diversi tipi di database (usando ad esempio le classi del package MDB2 del repository PEAR, http://pear.php.net/manual/en/package.database.mdb2.intro.php). /** * Description of Autore * * @author maurizio */ class Autore { private $idautore; private $cognome; private $nome; // costruttore // si può scrivere anche function Autore(...) function construct($idautore, $cognome, $nome) { $this->idautore = $idautore; $this->cognome = $cognome; $this->nome = $nome; // setter e getter function set_idautore($idautore){ $this->idautore = $idautore; DAO_mySQL_Php5.pdf Pag. 2/13 Cozzetto

function get_idautore() { return $this->idautore; function set_cognome($cognome){ $this->cognome = $cognome; function get_cognome() { return $this->cognome; function set_nome($nome){ $this->nome = $nome; function get_nome() { return $this->nome; function anagrafica() { return $this->nome." ".$this->cognome; // fine classe Autore /** * Description of DAO * * @author maurizio */ class DAO { private $conn; // rappresenta la connessione al database // costruttore // E' possibile scrivere anche function DAO() ecc function construct() { function setconn($conn) { $this->conn = $conn; function getconn() { return $this->conn; // trova gli autori dei libri function trovalistaautori() { $listaautori = array(); $rs = @mysql_query("select DISTINCT * FROM autori_tbl",$this->conn); DAO_mySQL_Php5.pdf Pag. 3/13 Cozzetto

// se per qualche motivo la query fallisce ritorniamo -1 if ($rs==false) { return -1; // leggiamo le righe risultato while ($row = mysql_fetch_array($rs)) { $autore = new Autore($row["idAutore"],$row["cognome"],$row["nome"]); // carico l'autore in un vettore $listaautori[]= $autore; // veramente necessario per grandi insiemi di risultati //mysql_free_result($rs); return $listaautori; // fine metodo trovalistaautori // trova l'elenco dei libri disponibili function trovalistalibri() { $listalibri = array(); //$lista[]=new Libro("23-434-3233-4","Titolo1"); //$lista[]=new Libro("43-234-5444-3","Titolo2"); // si leggano i commenti del metodo precedente... $rs = @mysql_query("select * FROM libri_tbl",$this->conn); if ($rs==false) { return -1; while ($row = mysql_fetch_array($rs)) { // carico il libro in un vettore dei libri $listalibri[]=new Libro($row["isbn"],$row["titolo"]); //mysql_free_result($rs); return $listalibri; // fine metodo trovalistalibri // restituisce l'elenco dei libri scritti da un certo autore function trovalistalibriperanagraficaautore($anagrafica) { $listalibri = array(); $rs = @mysql_query("select * FROM libri_tbl, autori_tbl, editori_tbl WHERE autori_tbl.idautore = libri_tbl.idautore AND editori_tbl.ideditore = libri_tbl.ideditore AND Concat(RTrim(autori_tbl.nome),' ',RTrim(autori_tbl.cognome)) = '".$anagrafica."'",$this- >conn); if ($rs==false) { return -1; DAO_mySQL_Php5.pdf Pag. 4/13 Cozzetto

while ($row = mysql_fetch_array($rs)) { $isbn = $row["isbn"]; $titolo = $row["titolo"]; $idautore = $row["idautore"]; $cognome = $row["cognome"]; $nome = $row["nome"]; $ideditore = $row["ideditore"]; $nomeeditore = $row["nomeeditore"]; $imgurl = $row["imgurl"]; $intro = $row["intro"]; // istanziamo l' autore $autore = new Autore($idAutore, $cognome, $nome); // istanziamo l'editore $editore = new Editore( $ideditore, $nomeeditore); // istanziamo il libro $libro = new Libro($isbn, $titolo, $imgurl, $intro, $autore, $editore); // carico il listro in un vettore $listalibri[] = $libro; //mysql_free_result($rs); return $listalibri; // fine function // restituisce un libro noto l'isbn function libro($isbn) { $libro=null; $rs = @mysql_query("select * FROM libri_tbl, autori_tbl, editori_tbl WHERE autori_tbl.idautore = libri_tbl.idautore AND editori_tbl.ideditore = libri_tbl.ideditore AND libri_tbl.isbn = '".$isbn."'",$this->conn); if ($rs==false) { return -1; $row = mysql_fetch_array($rs); if ($row!=null) { $isbn = $row["isbn"]; $titolo = $row["titolo"]; $idautore = $row["idautore"]; $cognome = $row["cognome"]; $nome = $row["nome"]; $ideditore = $row["ideditore"]; $nomeeditore = $row["nomeeditore"]; $imgurl = $row["imgurl"]; $intro = $row["intro"]; DAO_mySQL_Php5.pdf Pag. 5/13 Cozzetto

// creo l'autore $autore = new Autore($idAutore, $cognome, $nome); // creo l'editore $editore = new Editore( $ideditore, $nomeeditore); // creo il libro $libro = new Libro($isbn, $titolo, $imgurl, $intro, $autore, $editore); // carico il libro in un vettore $listalibri[] = $libro; //mysql_free_result($rs); return $libro; // apro la connessione al db function openconn() { $this->conn = @mysql_connect("localhost", "root", ""); if ($this->conn) { $db = @mysql_select_db("biblio_db", $this->conn); if ($db==false) return false; else return true; else return false; // fine metodo openconn // chiudo la connessione col db function closeconn() { $closedconn = @mysql_close($this->conn); if ($closedconn==false) { return false; else return true; // fine metodo closeconn // fine classe DAO /** * Description of Editore * * @author maurizio */ class Editore { DAO_mySQL_Php5.pdf Pag. 6/13 Cozzetto

private $ideditore; private $nomeeditore; private $indirizzoeditore; private $cittaeditore; // costruttore function construct($ideditore, $nomeeditore) { $this->ideditore = $ideditore; $this->nomeeditore = $nomeeditore; // setter e getter function set_nomeeditore($nomeeditore) { $this->nomeeditore = $nomeeditore; function get_nomeeditore() { return $this->nomeeditore; function set_ideditore($ideditore) { $this->ideditore = $ideditore; function get_ideditore() { return $this->ideditore; function set_indirizzoeditore($indirizzoeditore) { $this->indirizzoeditore = $indirizzoeditore; function get_indirizzoeditore() { return $this->indirizzoeditore; function set_cittaeditore($cittaeditore) { $this->cittaeditore = $cittaeditore; function get_cittaeditore() { return $this->cittaeditore; // fine classe Editore /** * Description of Libro * @author maurizio */ class Libro { private $isbn; private $titolo; private $prezzo; DAO_mySQL_Php5.pdf Pag. 7/13 Cozzetto

private $imgurl; private $intro; private $editore; private $autore; // costruttore function construct($isbn, $titolo, $imgurl, $intro, $autore, $editore) { $this->isbn = $isbn; $this->titolo = $titolo; $this->autore = $autore; $this->editore = $editore; $this->imgurl = $imgurl; $this->intro = $intro; // setter e getter function set_isbn($isbn){ $this->isbn = $isbn; function get_isbn() { return $this->isbn; function set_titolo($titolo){ $this->titolo = $titolo; function get_titolo() { return $this->titolo; function set_prezzo($prezzo){ $this->prezzo = $prezzo; function get_prezzo() { return $this->prezzo; function set_editore($editore){ $this->editore = $editore; function get_editore() { return $this->editore; function set_autore($autore){ $this->autore = autore; function get_autore() { return $this->autore; DAO_mySQL_Php5.pdf Pag. 8/13 Cozzetto

function get_imgurl() { return $this->imgurl; function get_intro() { return $this->intro; function set_imgurl($imgurl) { $this->imgurl=$imgurl; function set_intro($intro) { $this->intro=$intro; // fine classe Libro /** * Description of Utility * @author maurizio */ class Utility { // metodo statico per la redirezione della url static function redirect($url,$tempo = FALSE ) { if(!headers_sent() && $tempo == FALSE ){ header('location:'. $url); elseif(!headers_sent() && $tempo!= FALSE ){ header('refresh:'. $tempo. ';'. $url); else{ if($tempo == FALSE ){ $tempo = 0; echo "<meta http-equiv=\"refresh\" content=\"". $tempo. ";url=". $url. "\">"; // fine if // fine metodo File index.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> include("classes/autore.php"); include("classes/dao.php"); include("classes/editore.php"); include("classes/libro.php"); <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-2"> DAO_mySQL_Php5.pdf Pag. 9/13 Cozzetto

<title>libri scritti da un certo autore</title> <style type="text/css"> body,td,th { font-family: "Trebuchet MS"; font-size: 16px; </style> </head> <body> <h3>libri scritti da un certo autore</h3> // creo l'oggetto dao $dao = new DAO(); // apro la connessione col db // la disconnessione avviene automaticamente quando o chiudo la pagina // o quando cambio pagina quindi non è riportata esplicatamente if ($dao->openconn()==false) { echo("impossibile aprire la connessione col server di database e con biblio_db"); // trovo gli autori e li carico in una combo box $listaautori = $dao->trovalistaautori(); if ($listaautori==-1) { echo("errori nella query: ".mysql_error()); if ($listaautori==null) { echo ("Non ci sono autori"); <form name="provafrm" action=" echo($_server['php_self']); " method="get"> <select name="autoremnu"> // caricamento della combo box for ($i=0; $i<count($listaautori); $i++) echo ("<option>".$listaautori[$i]->anagrafica()."</option>"); </select> <input type="submit" name="inviabtn" value="invia"/> </form> DAO_mySQL_Php5.pdf Pag. 10/13 Cozzetto

// se l'utente non ha premuto il tasto Invia if ($_GET["inviaBtn"]==null) { // mi faccio dare l'anagrafica $anagrafica = $_GET["autoreMnu"]; // trovo tutti i libri scritti da un certo autore di cui è nota l'anagrafica $listalibri = $dao->trovalistalibriperanagraficaautore($anagrafica); if ($listalibri==-1) { echo("errori nella query: ".mysql_error()); // fine if if ($listalibri==null) { echo("non ci sono libri scritti da ".$anagrafica); // visualizzo l'elenco dei titoli for ($i=0; $i<count($listalibri); $i++) { $editore = $listalibri[$i]->get_editore(); $autore = $listalibri[$i]->get_autore(); echo ($listalibri[$i]->get_isbn()." ".$listalibri[$i]->get_titolo()." ".$editore- >get_nomeeditore()." ".$autore->anagrafica()." <a href='index2.php?isbn=". $listalibri[$i]->get_isbn()."'>dettagli</a><br/>"); </body> </html> File index2.php <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> include("classes/autore.php"); include("classes/dao.php"); include("classes/editore.php"); include("classes/libro.php"); include("classes/utility.php"); <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-2"> <title>scheda libro</title> <style type="text/css"> body,td,th { font-family: Verdana; font-size: 16px; border: 0px; DAO_mySQL_Php5.pdf Pag. 11/13 Cozzetto

.sinistra { float: left;.testograndecorsivo { font-style: italic; font-size: 16px; </style> </head> <body> <h3>dettagli libro</h3> // creo l'oggetto dao $dao = new DAO(); // apro la connessione col db if ($dao->openconn()==false) { echo("impossibile aprire la connessione col server di database e con biblio_db"); // se l'utente ha cliccato sul link Dettagli nella pagina index.php if ($_GET["isbn"]!=null) { $isbn = $_GET["isbn"]; // trovo il libro con questo isbn $l = $dao->libro($isbn); if ($l==-1) { echo ("Errori nella query: ".mysql_error()); // se c'è un libro if ($l!=null) { // se il libro ha una immagine di copertina if ($l->get_imgurl()!=null) { echo("<img src=img/".$l->get_imgurl()." align=left />"); // visualizzo la scheda del libro echo("<i>isbn</i>: ".$l->get_isbn()); echo("<br/>"); echo("<i>titolo</i>: ".$l->get_titolo()); echo("<br/>"); $editore = $l->get_editore(); echo("<i>editore</i>: ".$editore->get_nomeeditore()); DAO_mySQL_Php5.pdf Pag. 12/13 Cozzetto

echo("<br/>"); $autore = $l->get_autore(); echo("<i>autore</i>: ".$autore->anagrafica()); echo("<br/><br/>"); echo("<i>introduzione</i>: ".$l->get_intro()); else { echo("il codice isbn non è valido.<br/>"); echo("attendere qualche secondo...<br/>"); Utility::redirect("index.php",3); else { echo("l'utente non ha selezionato il link Dettagli.<br/>"); echo("attendere qualche secondo...<br/>"); Utility::redirect("index.php",3); </body> </html> DAO_mySQL_Php5.pdf Pag. 13/13 Cozzetto