710 likes | 821 Views
Corso di Basi di Dati. Implementazione di WIS c on PHP & MySQL Home page del corso : http:// www.cs.unibo.it /~ difelice / dbsi /. Implementazione di WIS & PHP. Per l’implementazione di WIS , sono necessari i seguenti software: DMBS nel nostro caso , MySQL
E N D
Corso di Basi di Dati Implementazione di WIS con PHP & MySQL Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/
Implementazione di WIS & PHP • Per l’implementazione di WIS, sononecessariiseguenti software: • DMBS nelnostrocaso, MySQL • Web server nelnostrocaso, Apache • Linguaggio scripting server-side PHP • Pacchettiintegrati per diverse piattaforme: • LAMP • XAMP • MAMP (http://www.mamp.info)
Implementazione di WIS & PHP Dopo aver installato LAMP/MAMP/XAMP, e’ necessarioavviarei server PHP/MySQL …
Implementazione di WIS & PHP PHP e’ un linguaggio di scripting server-side. • Gli script PHP sonoeseguitidirettamentedall’ • interpretecontenutonel web-server (Apache). • Sicurezza Gli script sonotrasparenti al client. • Compatibilita’ Nessunproblema di compatibilita’ tra client differenti. • Accesso a risorse Gli script possonoaccedereallerisorsecontenutesul server.
Implementazione di WIS & PHP Uno script PHP sipresenta come un insieme di istruzioniracchiusetra tag <?php><?>. <html> <head><title>Primo Script PHP</title></head> <body> <p> <b> Data corrente: </b> <?phpecho date("m.d.y"); ?> </p> </body> </html>
Implementazione di WIS & PHP http://www.cs.unibo.it/data.php RISORSA RICHIESTA <html> <head> </head> <body> <p> <b> Data corrente: </b> <?php echo date("m.d.y"); ?> </p> </body> </html> <html> <head> </head> <body> <p> <b> Data corrente: </b> 11.21.12</p> </body> </html> SERVER-SIDE CLIENT-SIDE
Implementazione di WIS & PHP • PHP e’ a tuttiglieffetti un linguaggio di programmazione ad alto livello(come C, Java, etc): • Costrutti: variabili, costrutti di selezione, iterazione, funzioni, etc • Estensioneobject-oriented • Librerie (integrazione DBMS, web-service, gestionestringhe, etc) • Gestionecomponenti per il Web(cookie, sessioni, etc)
Implementazione di WIS & PHP Il comandoecho consente di inviareunastringasul browser (e solo dopostampa a video!) <html> <head></head> <body> <?php $testVariable=“<b>Salve</b>” echo $testVariable ?> </body> </html> <html> <head></head> <body> Salve </body> </html>
Implementazione di WIS & PHP Il comandoecho consente di inviareunastringasul browser (e solo dopostampa a video!) <html> <head></head> <body> <?php $testVariable=“Salve” echo $testVariable ?> </body> </html> <html> <head></head> <body> Salve </body> </html>
Implementazione di WIS & PHP • E’ possibileinserirecommenti in due modi: • Medianteilcarattere // (commentosusingolariga) • $testVariable=5 // Dichiarazione • Medianteilcarattere: /* (commentisupiurighe) */ • /* Dichiarazione di unavariabile • Commentosupiu’ righe */ • $testVariable=5
Implementazione di WIS & PHP • PHP e’ un linguaggiodebolmentetipato. • Non e’ necessariodichiarareunavariabile prima del suoutilizzo(come inveceavviene in Java) • Unasingolavariabilepuo’ contenere un qualsiasitipo di dato. • I nomidellevariabilisonopreceduti da $. • $testVariable=5 • $testVariable=‘Tre’
Implementazione di WIS & PHP Tramiteilcomandoarray, e’ possibiledefiniredegliarray, non necessariamenteomogeenei … $myarray=array(“hello”,2,3.5,”3”); echo $myarray[0]; echo $myarray[1]; E’ possibileaggiungere/modificareelementidegli array in manieradinamica: $myarray[0]=“world”; $myarray[4]=“4; $myarray[] = “newelem” // Aggiunta in coda!
Implementazione di WIS & PHP Gliindicidegli array non devonoesserenecessariamenteinteri, ma possonoancheesserestringhe (array associativi). $birthdays[“Sara”]=“10/02/1982”; $birthdays[“Michele”]=“12/02/1982”; Creazione di array associativi: $birthdays=array(“Sara” => “10/02/1982”, “Michele” =>”12/02/1982”);
Implementazione di WIS & PHP STRUTTURE DI CONTROLLO: if-else Il comandoif-else consente di eseguire un certoinsieme di istruzioni se e’ soddisfattaunacertacondizione (ramo if) o un altroinsieme (ramo else) se la condizione non e’ soddisfatta. if (condizione) { … IstruzioniRamo if } else { … IstruzioniRamo else }
Implementazione di WIS & PHP STRUTTURE DI CONTROLLO: if-else Il comandoif-else consente di eseguire un certoinsieme di istruzioni se e’ soddisfattaunacertacondizione (ramo if) o un altroinsieme (ramo else) se la condizione non e’ soddisfatta. if ($name==“Marco”) { echo(“Benvenuto, Marco”); } else { echo(“Utentesconosciuto”); }
Implementazione di WIS & PHP STRUTTURE DI CONTROLLO: while Il comandowhile consente di eseguire un certoinsieme di istruzioninelmentre e’ soddisfattaunacertacondizione. while (Condizione) { … Istruzione/i da ripetere } Condizione= unaqualsiasiespressionelogico/matematica.
Implementazione di WIS & PHP STRUTTURE DI CONTROLLO: while Il comandowhile consente di eseguire un certoinsieme di istruzioninelmentre e’ soddisfattaunacertacondizione. $count=1; while ($count<=10) { // Stampo 10 valori echo($count); $count++; } echo(“Fine del ciclo”);
Implementazione di WIS & PHP STRUTTURE DI CONTROLLO: for Il comandofor consente di eseguire un certoinsieme di istruzioninelmentre e’ soddisfattaunacertacondizione. for (espressione; condizione; espressione) { … Istruzione/i da ripetere } Condizione= unaqualsiasiespressionelogico/matematica.
Implementazione di WIS & PHP STRUTTURE DI CONTROLLO: for Il comandofor consente di eseguire un certoinsieme di istruzioninelmentre e’ soddisfattaunacertacondizione. for ($count=1; $count<=10; $count++) { echo($count); // Stampo 10 valori } echo(“Fine del ciclo”);
Implementazione di WIS & PHP DEFINIZIONE DI FUNZIONI: function Un programma PHP puo’ includerefunzioni, chericevonoparametri in ingressoe restituiscono (eventualmente) un valore di ritorno. functionsomma($a, $b, $c) { $result=$a + $b +$c; return $result; } $val=somma(1,5,6); echo($val)
Implementazione di WIS & PHP DEFINIZIONE DI FUNZIONI: function All’interno di unafunzionepossonoessere definite variabililocali. Con l’istruzioneglobalsipuo’ accedere a variabiliglobalidefinite nello script. function somma($b, $c) { global $a; result=$a+ $b +$c; return $result; } $a=10; $val=somma(5,6);
Implementazione di WIS & PHP DEFINIZIONE DI FUNZIONI: function E’ possibileinvocareunafunzioneanchespecificando un numero di parametriinferiore a quelliprevistidall’intestazionedellafunzione. function f1($a, $b, $c=20) { result=$a*$b+$c; return $result; } $a=10; $b=20; $val=f1($a,$b);
Implementazione di WIS & PHP PASSAGGIO DEI PARAMETRI • Esistonodue tecniche per passareparametri in ingressoad uno script PHP: • MetodoGET: I parametrisonoinseriti in appendiceallaURLdello script PHP. • MetodoPOST: I parametrisonoinviati (non in forma visibile) insiemeallarichiesta HTTP.
Implementazione di WIS & PHP PASSAGGIO DEI PARAMETRI: metodoGET Inviodeiparametrilato client: http:/www.cs.unibo.it/script.php?nome=Michele http:/www.cs.unibo.it/script.php? nome=Michele&cognome=Rossi Recuperodeiparametrilato server: (script.php) $name=$_GET[“nome”]; $lastname=$_GET[“cognome”]; $_GET e’ unavariabile di sessione di PHP contenente iparametrinell’URL (array associativo)
Implementazione di WIS & PHP PASSAGGIO DEI PARAMETRI: metodoGET Inviodeiparametrilato client: http:/www.cs.unibo.it/script.php?nome=Michele Utilizzodeiparametrilato server: (script.php) <?php $name=$_GET[“nome”]; Echo(“Benvenuto, “.$name.”!”); ?> Concatenatore di stringhe
Implementazione di WIS & PHP PASSAGGIO DEI PARAMETRI: metodoPOST Inviodeiparametrilato client: <form action=“script.php” method=“post” <div><label for=“firstname”> Nome: </label> <input type=“text” name=“firstname” id=“firstname”> </div> <div><label for=“lastname”> Cognome: </label> <input type=“text” name=“lastame” id=“firstname”> </div> <div> <input type=“submit” value=“Vai”></div> </form>
Implementazione di WIS & PHP PASSAGGIO DEI PARAMETRI: metodoPOST Recuperodeiparametrilato server: (script.php) <?php $name=$_POST[“firstname”]; $name=$_POST[“lastname”]; Echo(“Benvenuto, “$name.$lastname.”!”); ?> Vantaggirispetto al metodo GET: (i) dimensione/numerparametri; (ii) privacy
Implementazione di WIS & PHP PASSAGGIO DEI PARAMETRI: metodoGET/POST Recuperodeiparametrilato server: (script.php) <?php $name=$_REQUEST[“firstname”]; $name=$_REQUEST[“lastname”]; Echo(“Benvenuto, “$name.$lastname.”!”); ?> $REQUEST_ astraedallamodalita’ di invioparametri (GET/POST).
Implementazione di WIS & PHP PROGRAMMAZIONE ad OGGETTI In PHP, e’ possibilecreareunaclasse con ilcostruttoclass. Unaclassepuo’ conteneremetodiedattributi. classmyClass { public $a=10; // Attributo public function sayHello() { echo(“Hello! ”); } }
Implementazione di WIS & PHP PROGRAMMAZIONE ad OGGETTI Con ilcostruttonew, e’ possibilecreareoggetti di unacertaclasse, mentre con ilsimbolo e’ possibileaccedere a metodi/attributi di un oggetto. $myObject=new myClass(); $myObject a = $myObjecta + 5; $myObject printHello();
Implementazione di WIS & PHP PROGRAMMAZIONE ad OGGETTI Se sivuoleaccedere a metodi/attributi di un oggettoall’internodelladefinzionedellaclassestessa, e’ necessariousare la variabilethis per far riferimentoall’oggettocorrente. classmyClass { public $a=10; // Attributo public function sayHello() { echo($thisa); }}
Implementazione di WIS & PHP PROGRAMMAZIONE ad OGGETTI Ogniclassepuo’ avere un costruttore (ilmetodo__construct), chepuo’ ricevereparametri in ingresso per l’inizializzazionedell’oggetto. classmyClass { public $a=10; // Attributo public function __construct($val) { $thisa = $val; } } myObject=new myClass(5);
Implementazione di WIS & PHP PROGRAMMAZIONE ad OGGETTI Unaclassepuo’ disporre di metodiedattributistatici, dichiaratiattraversoilcostruttostatic. classmyClass { public static $var=10; // Attributo public static function hello() { echo(“Salve”); } } echo myClass::$var; myClass::hello();
Implementazione di WIS & PHP PROGRAMMAZIONE ad OGGETTI • Come in altrilinguaggi ad oggetti (Java, C++, etc) anche in PHP e’ possibilecostruiregerarchie di classimediantel’ereditarieta’. • E’ inoltrepossibilelimitare la visibilita’ degliattributi/metodimediantegliindicatori: • public, private, protected
Implementazione di WIS & PHP PROGRAMMAZIONE ad OGGETTI class A { // Definizionedell’oggetto A public $a=10; public $b=20; public function get_a()) { return $thisa; } } class B extends A { // Definizionedell’oggetto B public function get_b() { return $thisb; } } $b=new B(); echo($bget_a()); echo($bget_b());
Implementazione di WIS & PHP PROGRAMMAZIONE ad OGGETTI • Sfruttandol’ereditarieta’ traclassi, e’ possibile fare overriding di metodidefinitidallaclassegenitore. • Altricostrutti OOP in PHP: • Classiastratte(costruttoabstract) • Interfacce (costruttointerface) • Type Hinting (dallaversione 5 in poi …)
Implementazione di WIS & PHP CONNESSIONE CON UN DBMS Per poterinterfacciareuno script PHP con un DBMS, in modo da recuperare/inserire/cancellare/modificaredati da un DB, e’ necessario: Connettersi ad un DB Configurare la connessione Costruire/Eseguire la query SQL Gestireirisultatidella query SQL
Implementazione di WIS & PHP • PDO (PHP Data Object): Estensione di PHP per la connessione con un DBMS (es. MySQL). • E’ necessariocreare un oggetto PDO, specificando come parametri: • Tipo di DB (es. sql) • Hostname del server cheospitail DB • Nome del DB • Credenzialidell’utente (lato DBMS)
Implementazione di WIS & PHP Esempio di connessione: $pdo=newPDO(“mysql:host=localhost;dbname=mydb”, “marco”, “mypassword”); L’istruzioneritornaun oggetto di tipo PDO cherappresenta la connessione con il DB … Chesuccede se la connessione non e’ disponibile? Vienerestituitaun’eccezione da gestire…
Implementazione di WIS & PHP Esempio di connessione con try/catch: try { $pdo=new PDO(‘mysql:host=localhost; dbname=mydb’, ‘marco’,’mypasswd’); } catch(PDOException ex) { echo(“Connessione non riuscita”); exit(); }
Implementazione di WIS & PHP CONNESSIONE CON UN DBMS Per poterinterfacciareuno script PHP con un DBMS, in modo da recuperare/inserire/cancellare/modificaredati da un DB, e’ necessario: Connettersi ad un DB Configurare la connessione Costruire/Eseguire la query SQL Gestireirisultatidella query SQL
Implementazione di WIS & PHP Sollevareun’eccezioneogniqualvolta un oggetto PDO non riesce ad eseguireun’operazionesul DB: $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); Configurare la codificadeidati: $pdoexec(‘SET NAMES “utf8”’);
Implementazione di WIS & PHP CONNESSIONE CON UN DBMS Per poterinterfacciareuno script PHP con un DBMS, in modo da recuperare/inserire/cancellare/modificaredati da un DB, e’ necessario: Connettersi ad un DB Configurare la connessione Costruire/Eseguire la query SQL Gestireirisultatidella query SQL
Implementazione di WIS & PHP • Il comandoexecconsente di inviareuna query SQL di aggiornamento/inserimento/cancellazioneal DBMS e di eseguirla. • Input: Stringadella query SQL da eseguire • Output: Numerorigheinteressatedalla query • $sql=‘INSERT into STUDENTI VALUES (“Marco”, “Rossi”)’; // Creazionedella query in unastringa • $result=$pdoexec($sql);
Implementazione di WIS & PHP • E’ necessarioutilizzaretry/catch in ogni query! • try{ • $sql=‘INSERT into STUDENTI VALUES (“Marco”, “Rossi”)’; • $result=$pdoexec($sql); • } • catch(PDOException $e) { • echo(‘Codiceerrore’.egetMesssage()); • exit(); • } • echo(‘NumeroRigheinserite:’.$result’);
Implementazione di WIS & PHP • Il comandoqueryconsente di inviareuna query SQL di ricerca (SELECT) al DBMS e di eseguirla. • Input: Stringadella query SQL da eseguire. • Output: Un oggettoPDOStatementcontenente un insieme di risultatidella query SQL. • $sql=‘SELECT * FROM STUDENTI’; • $result=$pdoquery($sql);
Implementazione di WIS & PHP CONNESSIONE CON UN DBMS Per poterinterfacciareuno script PHP con un DBMS, in modo da recuperare/inserire/cancellare/modificaredati da un DB, e’ necessario: Connettersi ad un DB Configurare la connessione Costruire/Eseguire la query SQL Gestireirisultatidella query SQL
Implementazione di WIS & PHP • Un oggetto di tipoPDOStatemente’ un result set, contententeun elenco di tutte le righerestituitedalla query. • Il metodofetch()consente di prelevare la rigasuccessiva del result set. • Se non ci sonorighe, vienerestituitofalse (nessunaeccezionesollevata). • Ogniriga e’ un array associativo, con indicipari ad inomidegliattributidellatabellarisultato.
Implementazione di WIS & PHP • Esempio di query SELECT: • try{ • $sql=‘SELECT * FROM STUDENTI’; • $result=$pdoquery($sql); • } • catch(PDOException) { …} • while($row=$resultfetch()) { • echo(‘Nome:’.$row[‘name’]); • } OggettoPDOStatement
Implementazione di WIS & PHP • In alternativa, e’ possibileusareilcostruttoforeach • try{ • $sql=‘SELECT * FROM STUDENTI’; • $result=$pdoquery($sql); • } • catch(PDOException) { …} • foreach($result as $row) { • echo(‘Nome:’.$row[‘name’]); • }