utilizzare php 5 corso interazione uomo – macchina aa 2005/2006

33
Utilizzare PHP 5 Utilizzare PHP 5 Corso Interazione Uomo – Corso Interazione Uomo – Macchina Macchina AA 2005/2006 AA 2005/2006

Upload: tina-fontana

Post on 01-May-2015

218 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Utilizzare PHP 5Utilizzare PHP 5

Corso Interazione Uomo – Corso Interazione Uomo – MacchinaMacchina

AA 2005/2006AA 2005/2006

Page 2: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Le variabili GET e POST Le variabili GET e POST

• La principale particolarità del ‘web dinamico’ è la La principale particolarità del ‘web dinamico’ è la possibilità di variare i contenuti delle pagine in possibilità di variare i contenuti delle pagine in base alle richieste degli utenti. base alle richieste degli utenti.

• Questa possibilità si materializza attraverso i Questa possibilità si materializza attraverso i meccanismi che permettono agli utenti, oltre che meccanismi che permettono agli utenti, oltre che di richiedere una pagina ad un web server, anche di richiedere una pagina ad un web server, anche di specificare determinati parametri che saranno di specificare determinati parametri che saranno utilizzati dallo script PHP per determinare quali utilizzati dallo script PHP per determinare quali contenuti la pagina dovrà mostrarecontenuti la pagina dovrà mostrare

• Esistono due sistemi per passare dati ad uno Esistono due sistemi per passare dati ad uno script: script: – Metodo GET Metodo GET – Metodo POSTMetodo POST

Page 3: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Il metodo GET Il metodo GET

• Il Il metodo GETmetodo GET consiste nell'accodare i dati consiste nell'accodare i dati all'indirizzo della pagina richiesta, facendo all'indirizzo della pagina richiesta, facendo seguire il nome della pagina da un punto seguire il nome della pagina da un punto interrogativo e dalle coppie nome/valore dei interrogativo e dalle coppie nome/valore dei dati che ci interessano. Nome e valore sono dati che ci interessano. Nome e valore sono separati da un segno di uguale. Le diverse separati da un segno di uguale. Le diverse coppie nome/valore sono separate dal segno coppie nome/valore sono separate dal segno '&‘'&‘

• La stringa che si trova dopo il punto La stringa che si trova dopo il punto interrogativo, contenente nomi e valori dei interrogativo, contenente nomi e valori dei parametri, viene detta parametri, viene detta query stringquery string

<a href="prodotto.php?cod=a7&cat=2"> <a href="prodotto.php?cod=a7&cat=2">

Page 4: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Accesso ai dati GETAccesso ai dati GET

• Quando una pagina è utilizzata con il Quando una pagina è utilizzata con il metodo GET, essa avrà a metodo GET, essa avrà a disposizione, al suo interno un array disposizione, al suo interno un array denominato $_GET che è un array denominato $_GET che è un array superglobalesuperglobale in quanto è disponibile in quanto è disponibile anche all'interno delle funzionianche all'interno delle funzioni

• Nell’esempio precedente avremo a Nell’esempio precedente avremo a disposizione disposizione – $_GET['cod'] (con valore 'a7') $_GET['cod'] (con valore 'a7') – $_GET['cat'] (con valore '2')$_GET['cat'] (con valore '2')

Page 5: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Il metodo POST Il metodo POST

• Il Il metodo POSTmetodo POST è utilizzato con i moduli: è utilizzato con i moduli: quando una pagina HTML contiene un tag quando una pagina HTML contiene un tag <form>, uno dei suoi attributi è "method", <form>, uno dei suoi attributi è "method", che può valere GET o POST. Se il metodo è che può valere GET o POST. Se il metodo è GET, i dati vengono passati nella query GET, i dati vengono passati nella query string, come abbiamo visto prima. Se il string, come abbiamo visto prima. Se il metodo è POST, i dati vengono invece inviati metodo è POST, i dati vengono invece inviati al server mediante lo standard input di al server mediante lo standard input di questoquesto

<form action="elabora.php" method="post"><input type="text" name="nome"> <input type="checkbox" name="nuovo" value="si"><input type="submit" name="submit" value="invia">

</form>

<form action="elabora.php" method="post"><input type="text" name="nome"> <input type="checkbox" name="nuovo" value="si"><input type="submit" name="submit" value="invia">

</form>

Page 6: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Accesso ai dati POSTAccesso ai dati POST

• Quando una pagina è utilizzata con il Quando una pagina è utilizzata con il metodo POST i dati che vengono metodo POST i dati che vengono passati sono memorizzati nell'array passati sono memorizzati nell'array $_POST. Anche questo array, come $_POST. Anche questo array, come $_GET, è un array superglobale$_GET, è un array superglobale

• Nell’esempio precedente avremo a Nell’esempio precedente avremo a disposizione:disposizione:– $_POST['nome']$_POST['nome']– $_POST['nuovo']$_POST['nuovo']

Page 7: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Cookies Cookies

• Come ogni buon linguaggio legato alla Come ogni buon linguaggio legato alla generazione dinamica di pagine web, generazione dinamica di pagine web, anche il PHP consente di gestire i anche il PHP consente di gestire i Cookies: piccoli file di testo contenenti Cookies: piccoli file di testo contenenti informazioni utili e non dannose per la informazioni utili e non dannose per la gestione delle sessioni sul webgestione delle sessioni sul web

• Le funzioni relative ai Cookies sono Le funzioni relative ai Cookies sono interne al PHP stesso, differentemente interne al PHP stesso, differentemente da come avviene per altri linguaggi, da come avviene per altri linguaggi, Perl su tutti Perl su tutti

Page 8: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Vediamo di chiarire le opzioni che si possono passare Vediamo di chiarire le opzioni che si possono passare alla funzione:alla funzione:

• NomeNome: è il nome del cookie, che può essere : è il nome del cookie, che può essere arbitrariamente sceltoarbitrariamente scelto

• ValoreValore: è il valore, anch'esso arbitrario, da : è il valore, anch'esso arbitrario, da assegnare al cookieassegnare al cookie

• EspirazioneEspirazione: è la data di espirazione del cookie: è la data di espirazione del cookie• PercorsoPercorso: è la directory, a partire dal dominio (vedi : è la directory, a partire dal dominio (vedi

sotto) per la quale il cookie è validosotto) per la quale il cookie è valido• DominioDominio: è il dominio per il quale il dominio è valido: è il dominio per il quale il dominio è valido• SecureSecure: è un valore che imposta se il cookie debba : è un valore che imposta se il cookie debba

essere inviato tramite una connessione HTTPSessere inviato tramite una connessione HTTPS

Cookies: setcookie() Cookies: setcookie()

setcookie(Nome,Valore,Espirazione,Percorso,Dominio,Secure); setcookie(Nome,Valore,Espirazione,Percorso,Dominio,Secure);

Page 9: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Cookies: leggereCookies: leggere

• La lettura dei Cookies avviene La lettura dei Cookies avviene mediante la variabile pre-assegnata: mediante la variabile pre-assegnata: – $HTTP_COOKIE_VARS (tipo array)$HTTP_COOKIE_VARS (tipo array)

• Mediante la variabile è possibile Mediante la variabile è possibile accedere a tutti i Cookies creati nel accedere a tutti i Cookies creati nel nostro browser nostro browser

• Per accedere ad un particolare Cookie Per accedere ad un particolare Cookie è necessario passare come indice è necessario passare come indice dell’array il nome del Cookie creatodell’array il nome del Cookie creato

Page 10: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Cookies: leggereCookies: leggere

setcookie("Test", "Prova per il cookie Test", time()+60); setcookie("Test", "Prova per il cookie Test", time()+60);

• Creare un Creare un cookie:cookie:

• Leggere un Leggere un cookie:cookie:

$nome = "Test";$valore = $HTTP_COOKIE_VARS[$nome];echo "<h2>Nome del cookie: $nome <br> Valore: $valore</h2>";

$nome = "Test";$valore = $HTTP_COOKIE_VARS[$nome];echo "<h2>Nome del cookie: $nome <br> Valore: $valore</h2>";

• Leggere tutti i Leggere tutti i cookies:cookies:

while (list($nome,$valore)=each($HTTP_COOKIE_VARS)) {echo "<h2>Nome del cookie: $nome - Valore: $valore</h2>";

}

while (list($nome,$valore)=each($HTTP_COOKIE_VARS)) {echo "<h2>Nome del cookie: $nome - Valore: $valore</h2>";

}

Page 11: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Cookies: esempioCookies: esempio

SETCOOKIE.PHP<?phpif (setcookie("Test","Prova per il cookie Test",time()+60)){

echo "Cookie Impostato";} else {

echo "Cookie non impostato";}?>

<html>…<a href="readcookie.php">Clicca qui<a>…</html>

SETCOOKIE.PHP<?phpif (setcookie("Test","Prova per il cookie Test",time()+60)){

echo "Cookie Impostato";} else {

echo "Cookie non impostato";}?>

<html>…<a href="readcookie.php">Clicca qui<a>…</html>

READCOOKIE.PHP<?php$nome = "Test";$valore = $HTTP_COOKIE_VARS[$nome];echo "<h2>Nome del cookie: $nome <br> Valore: $valore</h2>";?>

READCOOKIE.PHP<?php$nome = "Test";$valore = $HTTP_COOKIE_VARS[$nome];echo "<h2>Nome del cookie: $nome <br> Valore: $valore</h2>";?>

Page 12: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Le sessioni Le sessioni • La gestione delle sessioni è una delle novità più importanti La gestione delle sessioni è una delle novità più importanti

introdotte dalla versione 4 di PHP. Essa infatti ci permette introdotte dalla versione 4 di PHP. Essa infatti ci permette di stabilire un "dialogo" con l'utente del sito web, di stabilire un "dialogo" con l'utente del sito web, superando uno dei limiti del protocollo HTTP, che è quello superando uno dei limiti del protocollo HTTP, che è quello di "non avere stato”di "non avere stato”

• La normale navigazione può avvenire senza il loro utilizzoLa normale navigazione può avvenire senza il loro utilizzo• Ma ad esempio in un sistema di e-commerce, nel quale Ma ad esempio in un sistema di e-commerce, nel quale

l'utente prima riempie un carrello scegliendo una serie di l'utente prima riempie un carrello scegliendo una serie di prodotti, poi viene portato sulla schermata che gli prodotti, poi viene portato sulla schermata che gli consente di effettuare il pagamento. Quando è il momento consente di effettuare il pagamento. Quando è il momento di effettuare il pagamento il sistema deve "sapere" quali di effettuare il pagamento il sistema deve "sapere" quali sono i prodotti che l'utente ha sceltosono i prodotti che l'utente ha scelto

• Un altro esempio, più semplice, è quello dei siti con aree Un altro esempio, più semplice, è quello dei siti con aree riservate: se un certo numero di pagine è visibile solo agli riservate: se un certo numero di pagine è visibile solo agli utenti registrati, questi dovranno presentarsi per poterle utenti registrati, questi dovranno presentarsi per poterle vedere, ma una volta effettuata la presentazione (login) vedere, ma una volta effettuata la presentazione (login) dovranno essere messi in grado di vedere dovranno essere messi in grado di vedere tuttetutte le pagine le pagine dell'area riservata, senza, ovviamente, doversi dell'area riservata, senza, ovviamente, doversi ripresentare per ciascuna paginaripresentare per ciascuna pagina

Page 13: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Le sessioni: funzionamentoLe sessioni: funzionamento

• Con le sessioni è possibile associare uno stato ad Con le sessioni è possibile associare uno stato ad ogni client e mantenerlo nell'arco di più accessiogni client e mantenerlo nell'arco di più accessi

• Il mantenimento di una sessione richiede la Il mantenimento di una sessione richiede la collaborazione di client (il browser) e server. Tutte le collaborazione di client (il browser) e server. Tutte le informazioni della sessione sono sul serverinformazioni della sessione sono sul server

• Il server codifica (serializzazione) le informazioni di Il server codifica (serializzazione) le informazioni di sessione per la memorizzazione su file o database, e sessione per la memorizzazione su file o database, e le ripristina alla successiva richiesta dello stesso le ripristina alla successiva richiesta dello stesso clientclient

• Il client deve fornire al server le informazioni per Il client deve fornire al server le informazioni per associare alla richiesta la sessione corrispondenteassociare alla richiesta la sessione corrispondente

• Ciò è reso possibile da un identificativo di sessione Ciò è reso possibile da un identificativo di sessione (SID, session identifier) univoco generato all’avvio di (SID, session identifier) univoco generato all’avvio di una nuova sessioneuna nuova sessione

Page 14: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Le sessioni: Le sessioni: implementazioneimplementazione

• La problematica principale riguardo le sessioni, è la La problematica principale riguardo le sessioni, è la propagazione del SID. Le tecniche di propagazione sono propagazione del SID. Le tecniche di propagazione sono tramite cookies e tramite URLtramite cookies e tramite URL

• Grazie ad un cookie l'identificativo di sessione viene Grazie ad un cookie l'identificativo di sessione viene memorizzato sul browser, diventando accessibile in PHPmemorizzato sul browser, diventando accessibile in PHP

• Non e sufficientemente affidabile; il visitatore, potrebbe Non e sufficientemente affidabile; il visitatore, potrebbe aver configurato il proprio browser con i cookie disabilitatiaver configurato il proprio browser con i cookie disabilitati

• La propagazione tramite URL è del tutto identica al La propagazione tramite URL è del tutto identica al passaggio di parametri con il metodo GETpassaggio di parametri con il metodo GET

• Si tratta di modificare i link alle varie pagine PHP in modo Si tratta di modificare i link alle varie pagine PHP in modo che contengano, nella parte di query string, il valore della che contengano, nella parte di query string, il valore della costante SIDcostante SID

...<a href="successiva.php?<?php print SID?>">Clicca qui</a>per propagare la sessione......

...<a href="successiva.php?<?php print SID?>">Clicca qui</a>per propagare la sessione......

Page 15: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Le sessioni: funzioni PHPLe sessioni: funzioni PHP• Le funzioni PHP per la gestione delle sessioni sono:Le funzioni PHP per la gestione delle sessioni sono:

– session_startsession_start(), crea una nuova sessione o la ripristina se (), crea una nuova sessione o la ripristina se esistenteesistente

– session_registersession_register(), registra variabili come variabili di sessione(), registra variabili come variabili di sessione– session_destroysession_destroy(), distrugge una sessione, liberando le risorse(), distrugge una sessione, liberando le risorse

• L'interprete PHP verifica, in base ai cookie e ai parametri L'interprete PHP verifica, in base ai cookie e ai parametri nella URL, se è stato fornito un identificativo (SID) di una nella URL, se è stato fornito un identificativo (SID) di una sessionesessione

• In caso affermativo provvede a ripristinare la sessione In caso affermativo provvede a ripristinare la sessione corrispondente diversamente ne avvia una nuovacorrispondente diversamente ne avvia una nuova

• Affinché Affinché session_startsession_start() possa impostare il cookie () possa impostare il cookie contenente il SID, dovrà essere invocata prima che contenente il SID, dovrà essere invocata prima che l’output sia inviato al browserl’output sia inviato al browser

• A questo punto qualsiasi variabile può essere resa A questo punto qualsiasi variabile può essere resa variabile di sessione, tramite la funzione variabile di sessione, tramite la funzione session_registersession_register()()

Page 16: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Le sessioni: un esempioLe sessioni: un esempio(session_cookie.php)(session_cookie.php)

<?phpsession_start();if (!session_is_registered('contatore')) {

session_register('contatore');$_SESSION[contatore] = 1;

}else {

$_SESSION[contatore]++;}?><html>

<head><title>Sessioni</title>

</head><body>

<?phpecho "<h2>Ciao, Hai visto questa pagina $_SESSION[contatore] volte.</h2>";echo "Per continuare, <A HREF=\"session_cookie.php\">clicca qui</A>";

?></body>

</html>

<?phpsession_start();if (!session_is_registered('contatore')) {

session_register('contatore');$_SESSION[contatore] = 1;

}else {

$_SESSION[contatore]++;}?><html>

<head><title>Sessioni</title>

</head><body>

<?phpecho "<h2>Ciao, Hai visto questa pagina $_SESSION[contatore] volte.</h2>";echo "Per continuare, <A HREF=\"session_cookie.php\">clicca qui</A>";

?></body>

</html>

Page 17: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

<?phpsession_start();if (!session_is_registered('contatore')) {

session_register('contatore');$_SESSION[contatore] = 1;

}else {

$_SESSION[contatore]++;}?><html>

<head><title>Sessioni</title>

</head><body>

<?phpecho "<h2>Ciao, Hai visto questa pagina $_SESSION[contatore] volte.</h2>";echo "Per continuare, <A HREF=\"session_url.php?\".SID.">clicca qui</A>";

?></body>

</html>

<?phpsession_start();if (!session_is_registered('contatore')) {

session_register('contatore');$_SESSION[contatore] = 1;

}else {

$_SESSION[contatore]++;}?><html>

<head><title>Sessioni</title>

</head><body>

<?phpecho "<h2>Ciao, Hai visto questa pagina $_SESSION[contatore] volte.</h2>";echo "Per continuare, <A HREF=\"session_url.php?\".SID.">clicca qui</A>";

?></body>

</html>

Le sessioni: un esempioLe sessioni: un esempio(session_url.php)(session_url.php)

Page 18: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Le sessioni: outputLe sessioni: output

Page 19: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Utilizzare un database Utilizzare un database • La possibilità di interagire con i database è una delle La possibilità di interagire con i database è una delle

potenzialità più interessanti offerte da PHP potenzialità più interessanti offerte da PHP • I database relazionali sono infatti lo strumento I database relazionali sono infatti lo strumento

universalmente utilizzato per conservare basi di dati universalmente utilizzato per conservare basi di dati di qualsiasi dimensionedi qualsiasi dimensione

• PHP ci dà la possibilità di connetterci con un numero PHP ci dà la possibilità di connetterci con un numero elevatissimo di database server (MySql, PostgreSql, elevatissimo di database server (MySql, PostgreSql, Oracle, Access, Sybase, Informix, mSql ecc.)Oracle, Access, Sybase, Informix, mSql ecc.)

• L’interazione con un database è il seguente:L’interazione con un database è il seguente:– Collegamento al databaseCollegamento al database– Scelta del catalogo del database sul quale Scelta del catalogo del database sul quale

lavorarelavorare– Esecuzione di query (creazione, interrogazione, Esecuzione di query (creazione, interrogazione,

cancellazione)cancellazione)– Chiusura del collegamento al databaseChiusura del collegamento al database

Page 20: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Interazione con MySQLInterazione con MySQL

• L'interazione viene ottenuta attraverso una L'interazione viene ottenuta attraverso una serie di funzioni, il cui nome inizia sempre per serie di funzioni, il cui nome inizia sempre per "mysql" seguito da un underscore e "mysql" seguito da un underscore e dall'indicazione specifica della funzionedall'indicazione specifica della funzione

• Per chi avesse la necessità di utilizzare un Per chi avesse la necessità di utilizzare un database di tipo diverso, diciamo subito che database di tipo diverso, diciamo subito che buona partebuona parte di queste funzioni ha delle di queste funzioni ha delle funzioni corrispondenti, relative agli altri tipi funzioni corrispondenti, relative agli altri tipi di database, che si differenziano in base al di database, che si differenziano in base al prefisso nel nome (ad esempio "pg" per prefisso nel nome (ad esempio "pg" per PostgreSql, "ora" per Oracle, "mssql" per Sql PostgreSql, "ora" per Oracle, "mssql" per Sql Server, etc.)Server, etc.)

Page 21: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Connessione al databaseConnessione al database

• La connessione si realizza attraverso La connessione si realizza attraverso la funzione la funzione mysql_connectmysql_connect. Che . Che necessita dei seguenti parametri:necessita dei seguenti parametri:– server server : l’URL del database: l’URL del database– utenteutente : nome di accesso : nome di accesso – passwordpassword : password dell’utente : password dell’utente

mysql_connect(server, utente, password);mysql_connect(server, utente, password);

Page 22: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Scelta del databaseScelta del database

• Una volta stabilita la connessione, il passo Una volta stabilita la connessione, il passo successivo è selezionare il database col successivo è selezionare il database col quale vogliamo lavorare. Per questo si usa la quale vogliamo lavorare. Per questo si usa la funzione funzione mysql_select_db mysql_select_db che necessita dei che necessita dei seguenti parametri: seguenti parametri: – nomedbnomedb: il nome del db al quale vogliamo : il nome del db al quale vogliamo

connetterciconnetterci– connessioneconnessione: l'identificativo di connessione (cioè : l'identificativo di connessione (cioè

quello che abbiamo ottenuto da mysql_connect) quello che abbiamo ottenuto da mysql_connect)

• Questa funzione Questa funzione restituiscerestituisce un valore un valore booleanobooleano

mysql_select_db(nomedb,connessione); mysql_select_db(nomedb,connessione);

Page 23: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Esecuzione di una query Esecuzione di una query • Siamo quindi arrivati alla parte fondamentale del Siamo quindi arrivati alla parte fondamentale del

colloquio con un database, cioè l'esecuzione di una colloquio con un database, cioè l'esecuzione di una query. Per eseguire la query si usa la funzione query. Per eseguire la query si usa la funzione mysql_query mysql_query i cui parametri sono: i cui parametri sono: – queryquery:: query da eseguire query da eseguire – connessioneconnessione: identificativo di connessione : identificativo di connessione

• Anche questa funzione Anche questa funzione restituiscerestituisce un valore, per il un valore, per il quale però dobbiamo distinguere due possibilità quale però dobbiamo distinguere due possibilità rispetto al tipo di query che abbiamo lanciato: rispetto al tipo di query che abbiamo lanciato: – query di interrogazionequery di interrogazione (SELECT, SHOW, EXPLAIN, (SELECT, SHOW, EXPLAIN,

DESCRIBE), la funzione restituisce un DESCRIBE), la funzione restituisce un identificativo del identificativo del risultatorisultato (cioè un'altra variabile di tipo resource), che ci (cioè un'altra variabile di tipo resource), che ci servirà successivamente, se la query è andata a buon fine; se servirà successivamente, se la query è andata a buon fine; se invece MySql ha rilevato degli errori, la funzione restituisce invece MySql ha rilevato degli errori, la funzione restituisce FALSEFALSE

– query di aggiornamentoquery di aggiornamento (INSERT, UPDATE, DELETE), la (INSERT, UPDATE, DELETE), la funzione restituirà in ogni caso un valore booleano, ad indicare funzione restituirà in ogni caso un valore booleano, ad indicare se l'esecuzione è andata a buon fine oppure nose l'esecuzione è andata a buon fine oppure no

Page 24: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Verifica dei risultati della Verifica dei risultati della query query

• Il fatto che una query sia stata eseguita Il fatto che una query sia stata eseguita correttamente non significa necessariamente che correttamente non significa necessariamente che abbia prodotto dei risultati. Può infatti verificarsi il abbia prodotto dei risultati. Può infatti verificarsi il caso in cui una query, pur essendo perfettamente caso in cui una query, pur essendo perfettamente corretta, non produce alcun risultatocorretta, non produce alcun risultato

• Se vogliamo sapere Se vogliamo sapere quantequante righe sono state righe sono state restituite da una SELECT, possiamo usare la funzione restituite da una SELECT, possiamo usare la funzione mysql_num_rows(risultato)mysql_num_rows(risultato), che ci , che ci restituiscerestituisce il il numero di righe contenute dall'identificativo del numero di righe contenute dall'identificativo del risultato che le passiamo. risultato che le passiamo.

• Se invece abbiamo eseguito una query di Se invece abbiamo eseguito una query di aggiornamento (INSERT, UPDATE, DELETE) e vogliamo aggiornamento (INSERT, UPDATE, DELETE) e vogliamo sapere quante righe sono state modificate, possiamo sapere quante righe sono state modificate, possiamo usare usare mysql_affected_rows(connessione)mysql_affected_rows(connessione), che ci , che ci restituiscerestituisce il numero di righe modificate dall'ultima il numero di righe modificate dall'ultima query di aggiornamentoquery di aggiornamento

Page 25: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Lettura dei risultati di una Lettura dei risultati di una SELECT SELECT

• Come abbiamo visto prima, una volta effettuata una query Come abbiamo visto prima, una volta effettuata una query di interrogazione abbiamo a disposizione un identificativo di interrogazione abbiamo a disposizione un identificativo del suo risultato. Per poter leggere questo risultato del suo risultato. Per poter leggere questo risultato possiamo utilizzare la funzione possiamo utilizzare la funzione mysql_fetch_array(risultato)mysql_fetch_array(risultato), la quale, , la quale, ogni voltaogni volta che che viene chiamata, ci viene chiamata, ci restituisce una riga restituisce una riga (array) del nostro (array) del nostro risultato; quando non ci sono più righe da leggere, la risultato; quando non ci sono più righe da leggere, la funzione funzione restituisce FALSErestituisce FALSE

• Quindi, per scorrere tutto il risultato, dovremo usare questa Quindi, per scorrere tutto il risultato, dovremo usare questa funzione come condizione di un ciclo, che si concluderà funzione come condizione di un ciclo, che si concluderà quando restituisce FALSE (in questo modo quando restituisce FALSE (in questo modo non abbiamo non abbiamo bisognobisogno di sapere a priori quante sono le righe contenute di sapere a priori quante sono le righe contenute nel risultato stesso)nel risultato stesso)

$query = 'SELECT * FROM tabella';$ris = mysql_query($query,$conn) or

die("Errore nella query: " . mysql_error());

while($riga = mysql_fetch_array($ris)) {  //codice che elabora i dati

}

$query = 'SELECT * FROM tabella';$ris = mysql_query($query,$conn) or

die("Errore nella query: " . mysql_error());

while($riga = mysql_fetch_array($ris)) {  //codice che elabora i dati

}

Page 26: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Chiusura connessioneChiusura connessione

• Rimane da citare la funzione Rimane da citare la funzione mysql_close mysql_close accetta come parametro accetta come parametro – connessioneconnessione: puntatore alla connessione : puntatore alla connessione

aperta con mysql_connect()aperta con mysql_connect()

• In pratica questa funzione è usata In pratica questa funzione è usata pochissimo, in quanto PHP si pochissimo, in quanto PHP si preoccupa da solo, al termine dello preoccupa da solo, al termine dello script, di chiudere le connessioni che script, di chiudere le connessioni che abbiamo aperto abbiamo aperto

Page 27: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Esempio di utilizzo PHP - Esempio di utilizzo PHP - MySQLMySQL

• Creiamo un applicativo che consenta diCreiamo un applicativo che consenta di– Creare la struttura del databaseCreare la struttura del database– Inserire dati nelle tabelle createInserire dati nelle tabelle create– Visualizzare tutti i dati inseritiVisualizzare tutti i dati inseriti– Visualizzare un dato in particolareVisualizzare un dato in particolare

• Realizzeremo il sistema mediante i seguenti Realizzeremo il sistema mediante i seguenti file:file:– config.inc.php: configurazione del sistemaconfig.inc.php: configurazione del sistema– install.php: creazione del databaseinstall.php: creazione del database– insert.php: form per l’inserimento dei datiinsert.php: form per l’inserimento dei dati– save.php: salvataggio dei dati nel databasesave.php: salvataggio dei dati nel database– index.php: visualizzazione di tutti i dati del databaseindex.php: visualizzazione di tutti i dati del database– view.php: visualizzazione completamente di un view.php: visualizzazione completamente di un

prodotto prodotto

Page 28: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Es: Configurazione del Es: Configurazione del sistema (config.inc.php) sistema (config.inc.php)

• Prima di tutto avremo bisogno di alcune Prima di tutto avremo bisogno di alcune informazioni relative all'accesso al database e altre informazioni relative all'accesso al database e altre relative all’applicazione:relative all’applicazione:– db_hostdb_host da cui si può raggiungere MySQL ( da cui si può raggiungere MySQL (localhostlocalhost))– db_user db_user e e db_passworddb_password per l'accesso al database per l'accesso al database– db_nomedb_nome del database del database– password password per la verifica dell’utente che esegue per la verifica dell’utente che esegue

l’inserimentol’inserimento

CONFIG.INC.PHP//parametri del database$db_host = "localhost";$db_user = "root";$db_password = "prova";$db_name = "test"; $password = "super";

CONFIG.INC.PHP//parametri del database$db_host = "localhost";$db_user = "root";$db_password = "prova";$db_name = "test"; $password = "super";

Page 29: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Es: Connessione e creazione Es: Connessione e creazione del database (install.php)del database (install.php)

INSTALL.PHPinclude("config.inc.php");$db = mysql_connect($db_host, $db_user, $db_password); if ($db == FALSE){

die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

}else{

mysql_select_db($db_name, $db) or die ("Errore selezione database. Verificare i parametri nel file config.inc.php"); $query = "CREATE TABLE news (id INT (5) UNSIGNED not null AUTO_INCREMENT, titolo VARCHAR (255) not null , testo TEXT not null , data INT (11) , autore VARCHAR (50) , mail VARCHAR (50) , PRIMARY KEY (id))"; if (mysql_query($query, $db))

echo "L'installazione è stata eseguita correttamente";else

echo "Errore durante l'installazione"; }

INSTALL.PHPinclude("config.inc.php");$db = mysql_connect($db_host, $db_user, $db_password); if ($db == FALSE){

die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

}else{

mysql_select_db($db_name, $db) or die ("Errore selezione database. Verificare i parametri nel file config.inc.php"); $query = "CREATE TABLE news (id INT (5) UNSIGNED not null AUTO_INCREMENT, titolo VARCHAR (255) not null , testo TEXT not null , data INT (11) , autore VARCHAR (50) , mail VARCHAR (50) , PRIMARY KEY (id))"; if (mysql_query($query, $db))

echo "L'installazione è stata eseguita correttamente";else

echo "Errore durante l'installazione"; }

• Effettuiamo la connessione al server database e Effettuiamo la connessione al server database e scegliamo il database sul quale lavorare e scegliamo il database sul quale lavorare e creiamo una tabella sulla quale lavoreremocreiamo una tabella sulla quale lavoreremo

Page 30: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Es: Form di inserimento dati Es: Form di inserimento dati (insert.php)(insert.php)

INSERT.PHP<form method=post action=save.php>Titolo:<br><input type=text size=40 name=titolo><br><br>Data:<br><select name=giorno><?php for ($i=1; $i<=31; $i++) echo "<option value=$i>$i";?></select><select name=mese><option value=1>Gennaio<option value=2>Febbraio<option value=3>Marzo<option value=4>Aprile…</select>

INSERT.PHP<form method=post action=save.php>Titolo:<br><input type=text size=40 name=titolo><br><br>Data:<br><select name=giorno><?php for ($i=1; $i<=31; $i++) echo "<option value=$i>$i";?></select><select name=mese><option value=1>Gennaio<option value=2>Febbraio<option value=3>Marzo<option value=4>Aprile…</select>

…<select name=anno><option value=2001>2001<option value=2002>2002<option value=2003>2003<option value=2004>2004<option value=2005>2005</select><br><br>Autore:<br><input type=text size=40 name=autore><br><br>E-mail:<br><input type=text size=40 name=mail><br><br>Testo:<br><textarea cols=60 rows=40 name=testo></textarea><br><br>Password:<br><input type=password size=40 name=pass><br><br> <input type=submit value=Invia> </form>

…<select name=anno><option value=2001>2001<option value=2002>2002<option value=2003>2003<option value=2004>2004<option value=2005>2005</select><br><br>Autore:<br><input type=text size=40 name=autore><br><br>E-mail:<br><input type=text size=40 name=mail><br><br>Testo:<br><textarea cols=60 rows=40 name=testo></textarea><br><br>Password:<br><input type=password size=40 name=pass><br><br> <input type=submit value=Invia> </form>

Page 31: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

SAVE.PHPinclude("config.inc.php");if ($_POST[pass] != $password){ echo "Password errata";}elseif (trim($_POST[titolo]) == "" OR trim($_POST[testo]) == ""){ echo "I campi Titolo e Testo devono essere riempiti!";}else{ $titolo = $_POST[titolo])); $autore = $_POST[autore])); $mail = $_POST[mail])); $testo = $_POST[testo])); $data = mktime("0", "0", "0",$_POST[mese],$_POST[giorno],$_POST[anno]); $db = mysql_connect($db_host, $db_user, $db_password); if ($db == FALSE)

die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

mysql_select_db($db_name, $db)or die ("Errore nella selezione del database. Verificare i

parametri nel file config.inc.php"); $query = "INSERT INTO news (titolo, testo, data, autore, mail) VALUES ('$titolo', '$testo', '$data', '$autore', '$mail')"; if (mysql_query($query, $db))

echo "L'articolo è stato inserito correttamente"; else

echo "Erorre durante l'inserimento";}

SAVE.PHPinclude("config.inc.php");if ($_POST[pass] != $password){ echo "Password errata";}elseif (trim($_POST[titolo]) == "" OR trim($_POST[testo]) == ""){ echo "I campi Titolo e Testo devono essere riempiti!";}else{ $titolo = $_POST[titolo])); $autore = $_POST[autore])); $mail = $_POST[mail])); $testo = $_POST[testo])); $data = mktime("0", "0", "0",$_POST[mese],$_POST[giorno],$_POST[anno]); $db = mysql_connect($db_host, $db_user, $db_password); if ($db == FALSE)

die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

mysql_select_db($db_name, $db)or die ("Errore nella selezione del database. Verificare i

parametri nel file config.inc.php"); $query = "INSERT INTO news (titolo, testo, data, autore, mail) VALUES ('$titolo', '$testo', '$data', '$autore', '$mail')"; if (mysql_query($query, $db))

echo "L'articolo è stato inserito correttamente"; else

echo "Erorre durante l'inserimento";}

Es: Salvataggio dati nel Es: Salvataggio dati nel database (save.php)database (save.php)

Page 32: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Es: Lettura di un indice dei Es: Lettura di un indice dei dati dal database dati dal database

(index.php)(index.php)INDEX.PHPinclude("config.inc.php");$db = mysql_connect($db_host, $db_user, $db_password);if ($db == FALSE)

die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

mysql_select_db($db_name, $db)or die ("Errore nella selezione del database. Verificare

i parametri nel file config.inc.php");$query = "SELECT id,data,titolo FROM news ORDER BY data DESC$result = mysql_query($query, $db);while ($row = mysql_fetch_array($result)){

echo "<a href=\"view.php?id=$row[id]\">". date("j/n/y", $row[data]). " - $row[titolo]</a><br>";

}

INDEX.PHPinclude("config.inc.php");$db = mysql_connect($db_host, $db_user, $db_password);if ($db == FALSE)

die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

mysql_select_db($db_name, $db)or die ("Errore nella selezione del database. Verificare

i parametri nel file config.inc.php");$query = "SELECT id,data,titolo FROM news ORDER BY data DESC$result = mysql_query($query, $db);while ($row = mysql_fetch_array($result)){

echo "<a href=\"view.php?id=$row[id]\">". date("j/n/y", $row[data]). " - $row[titolo]</a><br>";

}

Page 33: Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006

Es: Lettura di un particolare Es: Lettura di un particolare dato (view.php)dato (view.php)

VIEW.PHPinclude("config.inc.php");$db = mysql_connect($db_host, $db_user, $db_password);if ($db == FALSE)

die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

mysql_select_db($db_name, $db)or die ("Errore nella selezione del database. Verificare i

parametri nel file config.inc.php");$query = "SELECT titolo,testo,data,autore,mail FROM news WHERE id='$_GET[id]'";$result = mysql_query($query, $db);$row = mysql_fetch_array($result);

$data = date("j/n/y", $row[data]);echo "<b>$row[titolo]</b><br><br>";echo "$row[testo]<br><br>";if ($row[mail] != "") echo "$data, <a href=mailto:$row[mail]>$row[autore]</a><br>"; else echo "$data, $row[autore]<br>";echo "<br><a href=index.php>Torna alla pagina iniziale</a><br>";

VIEW.PHPinclude("config.inc.php");$db = mysql_connect($db_host, $db_user, $db_password);if ($db == FALSE)

die ("Errore nella connessione. Verificare i parametri nel file config.inc.php");

mysql_select_db($db_name, $db)or die ("Errore nella selezione del database. Verificare i

parametri nel file config.inc.php");$query = "SELECT titolo,testo,data,autore,mail FROM news WHERE id='$_GET[id]'";$result = mysql_query($query, $db);$row = mysql_fetch_array($result);

$data = date("j/n/y", $row[data]);echo "<b>$row[titolo]</b><br><br>";echo "$row[testo]<br><br>";if ($row[mail] != "") echo "$data, <a href=mailto:$row[mail]>$row[autore]</a><br>"; else echo "$data, $row[autore]<br>";echo "<br><a href=index.php>Torna alla pagina iniziale</a><br>";