PHP:funzioni e interazione con MySQL

6,695 views

Published on

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,695
On SlideShare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
172
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

PHP:funzioni e interazione con MySQL

  1. 1. Linguaggi di Programmazione per il Web Le Funzioni
  2. 2. Le principali funzioni in PHP (funzioni sulle stringhe) <ul><li>int strlen ( string str) verifica la lunghezza della stringa, cioè il numero di caratteri che la compongono. Restituisce un numero intero. </li></ul><ul><li>string trim ( string str [, string charlist]) elimina gli spazi all'inizio e alla fine della stringa. Restituisce la stringa modificata. </li></ul><ul><li>string ltrim ( string str [, string charlist]) come trim ma solo per l’inizio della stringa. Restituisce la stringa modificata. </li></ul><ul><li>string rtrim ( string str [, string charlist]) come trim ma solo per la fine della stringa. Restituisce la stringa modificata. </li></ul>
  3. 3. Le principali funzioni in PHP (funzioni sulle stringhe) <ul><li>string substr ( string mario, int start [, int length]) restituisce una porzione della stringa, in base al secondo parametro (che indica l'inizio della porzione da estrarre), e all'eventuale terzo parametro, che indica quanti caratteri devono essere estratti. Se il terzo parametro non viene indicato, viene restituita tutta la parte finale della stringa a partire dal carattere indicato. </li></ul><ul><li>Da notare che i caratteri vanno contati a partire da zero , per cui se si chiama la funzione con substr(stringa, 4) verranno restituiti tutti i caratteri a partire dal quinto . Si può anche indicare un numero negativo come carattere iniziale: in questo caso, il carattere iniziale della porzione di stringa restituita verrà contato a partire dal fondo. </li></ul><ul><li>Ad esempio, con substr(stringa, -5, 3) si otterranno tre caratteri a partire dal quintultimo (da notare che in questo caso il conteggio non inizia da zero, ma da 1: cioè -1 indica l'ultimo carattere, -2 il penultimo e così via). </li></ul><ul><li>Se infine si indica un numero negativo come terzo parametro, tale parametro non verrà più utilizzato come numero di caratteri restituiti, ma come numero di caratteri non restituiti a partire dal fondo. Esempio: substr(stringa, 3, -2) restituisce i caratteri dal quarto al terzultimo. </li></ul><ul><li>La funzione restituisce la porzione di stringa richiesta. </li></ul>
  4. 4. Le principali funzioni in PHP (funzioni sulle stringhe) <ul><li>mixed str_replace ( mixed search, mixed replace, mixed subject) effettua una sostituzione della prima stringa (search) con la seconda (replace) all'interno della terza (subject). Ad esempio: str_replace('p', 't', 'pippo') sostituisce le 'p' con le 't' all'interno di 'pippo', e quindi restituisce 'titto'. Al posto delle stringhe e possibile passare un array di stringhe, l’operazione verrà ripetuta su tutte le voci dell’array. Restituisce la terza stringa modificata. Esiste anche la funzione str_ireplace() , che è equivalente ma che cerca la prima stringa nella terza senza tener conto della differenza fra maiuscole e minuscole. </li></ul><ul><li>int strpos ( string mare, string pesce) cerca la posizione della seconda stringa all'interno della prima. Ad esempio: strpos('Lorenzo', 're') restituisce 2. Restituisce un intero che rappresenta la posizione a partire da 0 della stringa cercata. Se la seconda stringa non è presente nella prima, restituisce il valore booleano FALSE. La funzione stripos() fa la stessa ricerca senza tenere conto della differenza fra maiuscole e minuscole. </li></ul>
  5. 5. Le principali funzioni in PHP (funzioni sulle stringhe) <ul><li>string strstr ( string haystack, string needle) cerca la seconda stringa all'interno della prima, e restituisce la prima stringa a partire dal punto in cui ha trovato la seconda. strstr('Lorenzo', 're') restituisce 'renzo'. Restituisce una stringa se la ricerca va a buon fine, altrimenti il valore booleano FALSE. La funzione stristr() funziona allo stesso modo ma non tiene conto della differenza fra maiuscole e minuscole. </li></ul><ul><li>string strtolower ( string str) converte tutti i caratteri alfabetici nelle corrispondenti lettere minuscole. Restituisce la stringa modificata. </li></ul><ul><li>string strtoupper ( string str) converte tutti i caratteri alfabetici nelle corrispondenti lettere maiuscole. Restituisce la stringa modificata. </li></ul>
  6. 6. Le principali funzioni in PHP (funzioni sulle stringhe) <ul><li>string ucfirst ( string str) trasforma in maiuscolo il primo carattere della stringa. Restituisce la stringa modificata. </li></ul><ul><li>string ucwords ( string str) trasforma in maiuscolo il primo carattere di ogni parola della stringa, intendendo come parola una serie di caratteri che segue uno spazio. Restituisce la stringa modificata. </li></ul><ul><li>array explode ( string separatore, string stringa [, int limit]) trasforma la seconda stringa in un array, usando la prima per separare gli elementi. Il terzo parametro può servire ad indicare il numero massimo di elementi che l'array può contenere (se la suddivisione della stringa portasse ad un numero maggiore, la parte finale della stringa sarà interamente contenuta nell'ultimo elemento). Ad esempio: explode(' ', 'ciao Mario') restituisce un array di due elementi in cui il primo è 'ciao' e il secondo 'Mario'. Restituisce un array. </li></ul>
  7. 7. Le principali funzioni in PHP (funzioni sugli array) <ul><li>int count ( mixed var [, int mode]) o int sizeof ( mixed var [, int mode]) conta il numero di elementi dell'array. Restituisce un intero. </li></ul><ul><li>array array_reverse ( array array [, bool preserve_keys]) inverte l'ordine degli elementi dell'array. Se vogliamo mantenere le chiavi dell'array di input, dobbiamo passare il secondo parametro con valore TRUE. Restituisce l'array di input con gli elementi invertiti. </li></ul><ul><li>bool sort ( array array) ordina gli elementi dell'array. Bisogna fare attenzione, perché questa funzione, contrariamente a molte altre, modifica direttamente l'array che le viene passato in input, che quindi andrà perso nella sua composizione originale. I valori vengono disposti in ordine crescente secondo i contenuti. Le chiavi vanno perse: dopo il sort, l'array avrà chiavi numeriche a partire da 0 secondo il nuovo ordinamento. Restituisce un booleano. La funzione rsort() fa la stessa cosa ma effettua l’ordinamento in modo contrario (dal più grande al più piccolo) </li></ul>
  8. 8. Le principali funzioni in PHP (funzioni sugli array) <ul><li>bool in_array ( mixed valore, array array) cerca il valore all'interno dell'array. Restituisce un valore booleano: vero o falso a seconda che il valore cercato sia presente o meno nell'array. </li></ul><ul><li>bool array_key_exists ( mixed valore, array search) cerca il valore fra le chiavi (e non fra i valori) dell'array. Restituisce un valore booleano. </li></ul><ul><li>mixed array_search ( mixed valore, array array) cerca il valore nell'array e ne indica la chiave. Restituisce la chiave del valore trovato o, se la ricerca non va a buon fine, il valore FALSE. </li></ul><ul><li>array array_merge ( array array1, array array2 [, array ...]) fonde gli elementi di due o più array. Gli elementi con chiavi numeriche vengono accodati l'uno all'altro e le chiavi rinumerate. Le chiavi associative invece vengono mantenute, e nel caso vi siano più elementi nei diversi array con le stesse chiavi associative, l'ultimo sovrascrive i precedenti. Restituisce l'array risultante dalla fusione. </li></ul>
  9. 9. Le principali funzioni in PHP (funzioni sugli array) <ul><li>mixed array_pop ( array array) estrae l'ultimo elemento dell'array, che viene 'accorciato'. Restituisce l'elemento in fondo all'array e, contemporaneamente, modifica l'array in input togliendogli lo stesso elemento. </li></ul><ul><li>int array_push ( array array, mixed var [, mixed ...]) accoda i valori indicati all'array. Equivale all'uso dell'istruzione di accodamento $array[]=$valore , con il vantaggio che ci permette di accodare più valori tutti in una volta. Restituisce il numero degli elementi dell'array dopo l'accodamento. </li></ul><ul><li>mixed array_shift ( array array) estrae un elemento come array_pop(), ma in questo caso si tratta del primo. Anche in questo caso l'array viene 'accorciato', ed inoltre gli indici numerici vengono rinumerati. Rimangono invece invariati quelli associativi. Restituisce l'elemento estratto dall'array. </li></ul><ul><li>int array_unshift ( array array, mixed var [, mixed ...]) inserisce i valori indicati in testa all'array. Restituisce il numero degli elementi dell'array dopo l'inserimento. </li></ul>
  10. 10. Le principali funzioni in PHP (funzioni sugli array) <ul><li>string implode ( string glue, array pieces) è la funzione opposta di explode(), e serve a riunire in un'unica stringa i valori dell'array. La stringa indicata come primo parametro viene interposta fra tutti gli elementi dell'array. Restituisce la stringa risultato dell'aggregazione. </li></ul>
  11. 11. Le principali funzioni in PHP (funzioni sulle date) <ul><li>Prima di cominciare dobbiamo fare un accenno al timestamp , sul quale si basano queste funzioni. Il timestamp è un numero intero, in uso da tempo sui sistemi di tipo UNIX, che rappresenta il numero di secondi trascorsi a partire dal 1° gennaio 1970. Ad esempio, il timestamp relativo alle 15.56.20 del 24 aprile 2003 è 1051192580. </li></ul><ul><li>int time ( void ) è la più semplice di tutte, perché fornisce il timestamp relativo al momento in cui viene eseguita. Restituisce un intero (timestamp). </li></ul>
  12. 12. Le principali funzioni in PHP (funzioni sulle date) <ul><li>string date ( string format [, int timestamp]) considera il timestamp in input (se non è indicato, prende quello attuale) e fornisce una data formattata secondo le specifiche indicate nel primo parametro. Tali specifiche si basano su una tabella di cui riassumiamo i valori più usati: </li></ul><ul><li>Y - anno su 4 cifre y - anno su 2 cifre n - mese numerico (1-12) m - mese numerico su 2 cifre (01-12) F - mese testuale ('January' - 'December') M - mese testuale su 3 lettere ('Jan' - 'Dec') d - giorno del mese su due cifre (01-31) j - giorno del mese (1-31) w - giorno della settimana, numerico (0=dom, 6=sab) l - giorno della settimana, testuale ('Sunday' - 'Saturday' ) D - giorno della settimana su 3 lettere ('Sun' - 'Sat') H - ora su due cifre (00-23) G - ora (0-23) i - minuti su due cifre (00-59) s - secondi su due cifre (00-59) </li></ul><ul><li>La funzione date() restituisce la stringa formattata che rappresenta la data. </li></ul>
  13. 13. Le principali funzioni in PHP (funzioni sulle date) <ul><li>int mktime ( [int hh [,int min [,int sec [,int month [,int day [,int year]]]]]]] ) è una funzione molto utile ma che va maneggiata con molta cura, perché i parametri che richiede in input (tutti numeri interi) hanno un ordine abbastanza particolare, che può portare facilmente ad errori. Sulla base di questi parametri, mktime() calcola il timestamp, ma l'aspetto più interessante è che possiamo utilizzarla per fare calcoli sulle date. Infatti, se ad esempio nel parametro mese passiamo 14, PHP lo interpreterà come 12+2, cioè &quot;febbraio dell'anno successivo&quot;, e quindi considererà il mese come febbraio ed aumenterà l'anno di 1. Ovviamente lo stesso tipo di calcoli si può fare su tutti gli altri parametri. Restituisce un intero (timestamp). </li></ul><ul><li>bool checkdate ( int month, int day, int year) verifica se i valori passati costituiscono una data valida. Restituisce un valore booleano. </li></ul>
  14. 14. ESERCIZIO Funzioni <ul><li>Creare una form che permette di inserire una data in un campo di testo, verificare che la data inserita sia una data valida e in caso positivo stampare a video il giorno della settimana relativo. (Es. 05/07/2007 => Giovedì) </li></ul><ul><li>Creare uno script che permetta di sommare un numero N di giorni ad una data D (con D e N che vengono inseriti come parametri in una form) </li></ul><ul><li>Creare uno script che calcola la differenza tra due due date date in input </li></ul>
  15. 15. Le funzioni personalizzate <ul><li>Oltre alle funzioni incorporate in PHP abbiamo la possibilità di definire delle nostre funzioni che ci permettono di svolgere determinati compiti in diverse parti del nostro script, o in script diversi, semplicemente richiamando la porzione di codice relativa, alla quale avremo attribuito un nome che identifichi la funzione stessa. </li></ul><ul><li>Vediamo quindi ora come definire una funzione, fermo restando che, al momento di eseguirla, la chiamata si svolge con le stesse modalità con cui vengono chiamate le funzioni incorporate del linguaggio. </li></ul><ul><li>function grassetto ( $stringa1 ) { </li></ul><ul><li>echo “ <strong> ”. $stringa1 .” </strong> ”; </li></ul><ul><li>} echo “ questo non è grassetto ”; grassetto(“ questo è grassetto ”); </li></ul><ul><li>$stringa2 = “ anche questo è grassetto ”; grassetto( $stringa2 ); </li></ul>
  16. 16. Le funzioni personalizzate <ul><li>Le funzioni possono restituire dei valori utilizzando la dichiarazione return </li></ul><ul><li>function grassetto ( $stringa1 ) { </li></ul><ul><li>$app = “ <strong> ”. $stringa1 .” </strong> ”; return $app; } echo “ questo non è grassetto ”; $risultato = grassetto(“ questo è grassetto ”); echo $risultato ; </li></ul><ul><li>$stringa2 = “ anche questo è grassetto ”; echo grassetto( $stringa2 ); </li></ul>
  17. 17. Le funzioni personalizzate <ul><li>La dichiarazione return causa la terminazione dell’esecuzione della funzione. Esempio: </li></ul><ul><li>function divisione($num1, $num2 ) {   if ( $num2==0 ) {     return false ;   } return ( $num1/$num2 ); } </li></ul><ul><li>$a = 5; $b = 0; $m = divisione( $a, $b ); //$m diventa false $m = divisione( 4,2 ) ; //$m diventa 2 </li></ul>
  18. 18. Scope delle variabili <ul><li>Le variabili utilizzate all’interno di una funzione sono diverse da quelle all’esterno. In particolare quelle all’interno sono efficaci solo nei limiti della funzione stessa. Questo è il concetto di scope di una variabile, l’ambito di applicazione. </li></ul><ul><li>function raddoppia($num1 ) {    $temp = $num1*2; </li></ul><ul><li>} </li></ul><ul><li>$variabile = 5; $raddoppia($variabile); echo $temp; </li></ul><ul><li>Riceveremo un errore perché $temp non esiste </li></ul>
  19. 19. Scope delle variabili <ul><li>Il modo corretto per poter usare un valore locale ad una funzione in altri punti dello script è quello di restituirlo con return </li></ul><ul><li>function raddoppia($num1 ) {    $valorerestituito = $num1*2; return $valorerestituito; </li></ul><ul><li>} </li></ul><ul><li>$variabile = 5; $temp = $raddoppia($variabile); echo $temp; </li></ul><ul><li>In questo caso verrà stampato il valore 10 Potevamo utilizzare il nome $temp anche all’interno. Tuttavia il $temp all’interno della funzione è una variabile differente dal $temp all’esterno </li></ul><ul><li>Questa regola non vale per le variabili superglobali: $_GET e $_POST </li></ul>
  20. 20. Valori di default per i parametri <ul><li>Possiamo prevedere delle funzioni in cui non è obbligatorio che tutti gli argomenti previsti vengano passati al momento della chiamata. Abbiamo visto, infatti, che alcune funzioni di PHP prevedono dei parametri facoltativi. </li></ul><ul><li>La stessa cosa vale per le funzioni definite da noi: se infatti, al momento in cui definiamo le funzioni, prevediamo un valore di default per un certo parametro, quel parametro diventerà facoltativo in fase di chiamata della funzione, e, nel caso manchi, la funzione utilizzerà il valore di default. </li></ul><ul><li>function anagrafe($nome, $indirizzo, $cf='non disponibile') {   echo ‘Nome: ‘.$nome.’<br>’;   echo ‘Indirizzo: ‘.$indirizzo.’<br>’;   echo ‘Codice fiscale: ’.$cf.’<br>’; } </li></ul><ul><li>anagrafe('Mario Rossi', 'via Roma 2', 'RSSMRA69S12A944X'); anagrafe('Paolo Verdi', 'via Parigi 9'); </li></ul>
  21. 21. Riuso di funzioni con i file include e require <ul><li>La possibilità di riusare funzioni è una delle caratteristiche preziose del PHP, che fornisce le dichiarazioni include e require per poter riusare gli script PHP contenenti dichiarazioni, definizioni di funzioni e anche HTML statico. </li></ul><ul><li>funzioni.php </li></ul><ul><li><?php </li></ul><ul><li>Function grassetto($stringa1) { return “<strong>”.$stringa1.”</strong>”; } </li></ul><ul><li>?> </li></ul><ul><li>esempio.php </li></ul><ul><li><?php </li></ul><ul><li>include “funzioni.php”; </li></ul><ul><li>grassetto(“questo è grassetto”); </li></ul><ul><li>?> </li></ul><ul><li>Sia include che require leggono file esterni la differenza è nel caso di errore. Se include non riesce ad includere un file mostra semplicemente un warning mentre require blocca l’esecuzione dello script. </li></ul>
  22. 22. Costruiamo insieme il Calendario <ul><li>Questo è quello che dobbiamo realizzare !!! </li></ul><ul><li>Un calendario dinamico che mi permette di “essere sfogliato” mese x mese e di selezionare un giorno in particolare </li></ul>
  23. 23. Da dove cominciamo? <ul><li>Innanzi tutto creiamo il file calendario.php inserendo all’interno l’HTML necessario a creare la base per la pagina: </li></ul><ul><li><!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot; > </li></ul><ul><li><html> </li></ul><ul><li><head><title>Esercizio - Calendario</title></head> </li></ul><ul><li><body> </li></ul><ul><li><h1>Calendario</h1> </li></ul><ul><li><br> </li></ul><ul><li><?php </li></ul><ul><li>.... </li></ul><ul><li>?> </li></ul><ul><li></body> </li></ul><ul><li></html> </li></ul>
  24. 24. Scriviamo il codice PHP <ul><li>La prima cosa che faremo nel codice PHP e controllare la presenza dei parametri in ingresso che potremmo avere e cioè le tre indicazioni GIORNO, MESE e ANNO. </li></ul><ul><li>Verifichiamo se ci sono state inviate e in caso negativo le impostiamo con il valore di default preso dalla data di oggi: </li></ul><ul><li>if (isset( $_GET [ 'giorno' ])) { </li></ul><ul><li>if (is_numeric( $_GET [ 'giorno' ])) { </li></ul><ul><li>$giorno = $_GET [ 'giorno' ]; </li></ul><ul><li>} else { </li></ul><ul><li>//Prende il giorno di oggi </li></ul><ul><li>$giorno = date( &quot;d&quot; ); </li></ul><ul><li>} </li></ul><ul><li>} else { </li></ul><ul><li>//Prende il giorno di oggi </li></ul><ul><li>$giorno = date( &quot;d&quot; ); </li></ul><ul><li>} </li></ul><ul><li>La stessa cosa la faremo per il mese ( date( “m” ) ) e per l’anno ( date( “Y” ) ) </li></ul>
  25. 25. Il giorno della settimana <ul><li>Per stampare il giorno della settimana utilizzeremo la funzione date() con il parametro “w” che ci indica il numero del giorno all’interno della settimana (0=domenica, 1= lunedì, ecc…) </li></ul><ul><li>Ci prepariamo quinidi un array di conversione: </li></ul><ul><li>//Preparo l'array con i giorni della settimana </li></ul><ul><li>$arrayDay [ 0 ]= 'Domenica' ; //Lo scriviamo x esteso perché ci servirà alla fine </li></ul><ul><li>$arrayDay [ 1 ]= 'Lunedi' ; </li></ul><ul><li>$arrayDay [ 2 ]= 'Martedi' ; </li></ul><ul><li>$arrayDay [ 3 ]= 'Mercoledi' ; </li></ul><ul><li>$arrayDay [ 4 ]= 'Giovedi' ; </li></ul><ul><li>$arrayDay [ 5 ]= 'Venerdi' ; </li></ul><ul><li>$arrayDay [ 6 ]= 'Sabato' ; </li></ul><ul><li>In questo modo potremo scrivere: </li></ul><ul><li>$arrayDay [date( &quot;w&quot; )]; </li></ul><ul><li>Che restituirà la lettera corrispondente al giorno della settimana </li></ul>
  26. 26. Iniziamo a disegnare la tabella <ul><li>echo '<table border=&quot;1&quot;><tr>' ; </li></ul><ul><li>echo '<td colspan=&quot;2&quot;><strong>Giorno scelto:'; </li></ul><ul><li>echo $giorno . '/' . $mese . '/' . $anno . '<strong></td>' ; </li></ul><ul><li>Che ci permette di creare questa parte di tabella: </li></ul><ul><li>Ora dovremmo stampare le celle relativi alle sigle dei giorni della settimana. </li></ul>
  27. 27. I giorni della settimana <ul><li>Consideriamo che, una volta scoperto il giorno della settimana del primo del mese i giorni seguenti saranno ovviamente chiari basterà scorrere seguendo l’ordine presente nel nostro $arrayDay </li></ul><ul><li>Scopriamo quindi qual è il primo giorno del mese, ricavando prima il timestamp relativo: </li></ul><ul><li>mktime( 0 , 0 , 0 , $mese , 1 , $anno ) </li></ul><ul><li>E poi passandolo alla funzione date con il parametro “w” </li></ul><ul><li>$primo = date( &quot;w&quot; ,mktime( 0 , 0 , 0 , $mese , 1 , $anno )); </li></ul><ul><li>Dobbiamo inoltre sapere qual è l’ultimo giorno del mese in modo da poter creare il ciclo: </li></ul><ul><li>$max = date( &quot;t&quot; ,mktime( 0 , 0 , 0 , $mese , 1 , $anno )); </li></ul><ul><li>Ora possiamo fare il nostro ciclo: $giorni_della_settimana = $primo //inizializzo con il primo giorno del mese </li></ul><ul><li>for ( $j = 1 ; $j <= $max ; $j ++) { </li></ul><ul><li>//{0} mi permette di prendere il pirmo carattere di una stringa </li></ul><ul><li>echo &quot;<td>&quot; . $arrayDay [ $giorni_della_settimana ]{0}. &quot;</td>&quot; ; </li></ul><ul><li>if ( $giorni_della_settimana == 6 ) //$giorni_della_settimana si riazzera ogni 7 </li></ul><ul><li>$giorni_della_settimana = 0 ; </li></ul><ul><li>else </li></ul><ul><li>$giorni_della_settimana ++; </li></ul><ul><li>} </li></ul>
  28. 28. Navigazione tra i mesi <ul><li>Abbiamo terminato la creazione della prima riga. La seconda riga comincia con i link necessari alla navigazione tra i mesi: </li></ul><ul><li>Per fare la navigazione tra i mesi non utilizzeremo una FORM ma invieremo i dati in modo GET utilizzando un semplice link in questo modo: </li></ul><ul><li><a href=&quot; calendario.php?giorno=31&mese=3&anno=2004 &quot;>&lt;&lt;</a> </li></ul><ul><li>I parametri che verranno inviati (per il link mese precedente) saranno: </li></ul><ul><li>$_GET[“giorno”] = contiene l’ultimo giorno del mese precedente </li></ul><ul><li>$_GET[“mese”] = contiene il mese precedente </li></ul><ul><li>$_GET[“anno”] = contiene l’anno del mese precedente </li></ul>
  29. 29. Navigazione tra i mesi <ul><li>Per poterlo fare dobbiamo prima prepararci i dati da inviare: </li></ul><ul><li>//Trovo l'ultimo giorno del mese precedente </li></ul><ul><li>$max_prec = date( “t&quot; ,mktime( 0 , 0 , 0 , $mese - 1 , 1 , $anno )); //Preparo il timestamp dell'ultimo giorno del mese precedente </li></ul><ul><li>$timestamp_prec = mktime( 0 , 0 , 0 , $mese - 1 , $max_prec , $anno ); </li></ul><ul><li>//Creo i parametri da inviare </li></ul><ul><li>$giorno_prec =date( “d&quot; , $timestamp_prec ); </li></ul><ul><li>$mese_prec =date( &quot;m&quot; , $timestamp_prec ); </li></ul><ul><li>$anno_prec =date( &quot;Y&quot; , $timestamp_prec ); </li></ul><ul><li>Stampo il link “mese precedente”: </li></ul><ul><li>//LINK PER ANDARE AL MESE PRECEDENTE </li></ul><ul><li>echo ‘</tr><tr><td>' ; </li></ul><ul><li>echo '<a href=&quot;calendario.php?giorno=' . $giorno_prec . '&mese=' . $mese_prec . '&anno=' . $anno_prec . '&quot;>' ; </li></ul><ul><li>echo ' &lt;&lt;</a></td> ' ; </li></ul>
  30. 30. Navigazione tra i mesi <ul><li>La stessa cosa la dobbiamo fare per il mese successivo: </li></ul><ul><li>//Preparo il timestamp delprimo giorno del mese successivo </li></ul><ul><li>$timestamp_succ = mktime( 0 , 0 , 0 , $mese + 1 , 1 , $anno ); //Creo i parametri da inviare </li></ul><ul><li>$giorno_succ =date( “d&quot; , $timestamp_succ ); </li></ul><ul><li>$mese_succ =date( &quot;m&quot; , $timestamp_succ ); </li></ul><ul><li>$anno_succ =date( &quot;Y&quot; , $timestamp_succ ); </li></ul><ul><li>Stampo il link “mese successivo”: </li></ul><ul><li>//LINK PER ANDARE AL MESE SUCCESSIVO </li></ul><ul><li>echo '<td>' ; </li></ul><ul><li>echo '<a href=&quot;calendario.php?giorno=' . $giorno_succ . '&mese=' . $mese_succ . '&anno=' . $anno_succ . '&quot;>' ; </li></ul><ul><li>echo ' &gt;&gt;</a></td> ' ; </li></ul>
  31. 31. Non resta che stampare i giorni <ul><li>Per stampare il numero dei giorni, ricorriamo allo stesso ciclo che avevamo utilizzato per le sigle dei giorni della settimana: </li></ul><ul><li>//Ciclo per stampare i giorni della settimana </li></ul><ul><li>for ( $j = 1 ; $j <= $max ; $j ++) { </li></ul><ul><li>… </li></ul><ul><li>} </li></ul><ul><li>Dove $max (per chi non se lo ricorda conteneva il numero di giorni del mese che vogliamo stampare). </li></ul><ul><li>All’interno del ciclo non faremo altro che stampare il numero e il link per spostarci in quel giorno: </li></ul><ul><li>$timestamp_giorno = mktime( 0 , 0 , 0 , $mese , $j , $anno ); </li></ul><ul><li>echo '<td><a href=&quot;calendario.php?' ; </li></ul><ul><li>echo 'giorno=' .date( &quot;d&quot; , $timestamp_giorno ); </li></ul><ul><li>echo '&mese=' .date( &quot;m&quot; , $timestamp_giorno ); </li></ul><ul><li>echo '&anno=' .date( &quot;Y&quot; , $timestamp_giorno ). '&quot;>' . $j . '</a></td>' ; </li></ul>
  32. 32. Chiudiamo lo script <ul><li>Chiudiamo prima la tabella che abbiamo utilizzato per il calendario: </li></ul><ul><li>echo '</tr></table>' ; </li></ul><ul><li>Come abbiamo fatto per i giorni della settimana ci prepariamo un array di conversione per i mesi dell’anno: </li></ul><ul><li>//Preparo l'array con i mesi </li></ul><ul><li>$arrayMonth [ '01' ]= 'Gennaio' ; </li></ul><ul><li>$arrayMonth [ '02' ]= 'Febbraio' ; </li></ul><ul><li>[..] </li></ul><ul><li>$arrayMonth [ '12' ]= 'Dicembre' ; </li></ul><ul><li>E infine stampiamo il messaggio finale: </li></ul><ul><li>$giorno_sett =date( &quot;w&quot; ,mktime( 0 , 0 , 0 , $mese , $giorno , $anno )); </li></ul><ul><li>echo '<h2>Il giorno scelto &egrave;: ' ; </li></ul><ul><li>echo $arrayDay [ $giorno_sett ]. ' ' . $giorno . ' ' . $arrayMonth [ $mese ]; </li></ul><ul><li>echo ' ' . $anno . '</h2>' ; </li></ul>
  33. 33. Ottimizziamo lo script <ul><li>Trasformando alcune parti del nostro codice in funzioni, possiamo ottimizzare il nostro codice cioè, renderlo più semplice da leggere e da modificare. </li></ul><ul><li>Ad esempio il codice utilizzato per verificare se un parametro ci è stato passato o no ed eventualmente settarlo con un valore di default può essere inserito in una funzione tipo: </li></ul><ul><li>function verifica_parametro_numerico( $strParametro , $valore_default = 0 ) { </li></ul><ul><li>if (isset($_GET[ $strParametro] )) { </li></ul><ul><li>if (is_numeric($_GET[$strParametro])) { </li></ul><ul><li>return $_GET[$strParametro]; </li></ul><ul><li>} else { </li></ul><ul><li>//Prende il valore di default </li></ul><ul><li>return $valore_default ; </li></ul><ul><li>} </li></ul><ul><li>} else { </li></ul><ul><li>//Prende il valore di default </li></ul><ul><li>return $valore_default ; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  34. 34. Ottimizziamo lo script <ul><li>A questo punto le 39 righe di codice necessarie per verificare la presenza dei tre parametri giorno mese e anno diventano semplicemente: </li></ul><ul><li>// Controllo il giorno </li></ul><ul><li>$giorno = verifica_parametro_numerico( “giorno” ,date( &quot;d&quot; )); </li></ul><ul><li>// Controllo il mese </li></ul><ul><li>$mese = verifica_parametro_numerico( “mese” ,date( &quot;m&quot; )); </li></ul><ul><li>// Controllo l'anno </li></ul><ul><li>$anno = verifica_parametro_numerico( “anno” ,date( &quot;Y&quot; )); </li></ul>
  35. 35. Ottimizziamo lo script <ul><li>Per ottimizzare ancora il nostro script, creiamo un altro file “definizioni.inc.php” dove all’interno mettiamo: </li></ul><ul><li><?php </li></ul><ul><li>function verifica_parametro_numerico( $strParametro , $valore_default = 0 ) { </li></ul><ul><li>[...] </li></ul><ul><li>} </li></ul><ul><li>//Preparo l'array con i giorni della settimana </li></ul><ul><li>$arrayDay [ 0 ]= 'Domenica' ; </li></ul><ul><li>[...] </li></ul><ul><li>$arrayDay [ 6 ]= 'Sabato' ; </li></ul><ul><li>//Preparo l'array con i mesi </li></ul><ul><li>$arrayMonth [ '01' ]= 'Gennaio' ; </li></ul><ul><li>[...] </li></ul><ul><li>$arrayMonth [ '12' ]= 'Dicembre' ; </li></ul><ul><li>?> </li></ul><ul><li>Abbiamo inserito nel file anche la definizione degli array costanti, nel nostro script principale basterà inserire: require &quot;definizioni.inc.php&quot; ; </li></ul>
  36. 36. PHP & MySql <ul><li>Come abbiamo già detto, la possibilità di interagire con i database è una delle potenzialità più interessanti offerte da PHP. </li></ul><ul><li>PHP ci dà la possibilità di connetterci con un numero elevatissimo di database server (MySql, PostgreSql, Oracle, Microsoft Sql Server, Access, Sybase, Informix, mSql ecc.). </li></ul><ul><li>Prenderemo in considerazione MySql , che è il database server che si è affermato prepotentemente negli ultimi anni per la sua velocità e la sua stabilità, oltre che per il fatto di essere open source. </li></ul><ul><li>L'interazione tra PHP e MySql viene ottenuta attraverso una serie di funzioni, il cui nome inizia sempre per mysql_ e dall'indicazione specifica della funzione. </li></ul><ul><li>Buona parte di queste funzioni ha delle funzioni corrispondenti, relative agli altri tipi di database, che si differenziano in base al prefisso nel nome (ad esempio &quot;pg&quot; per PostgreSql, &quot;ora&quot; per Oracle, &quot;mssql&quot; per Sql Server, ecc.). E' ovvio però che non ci si può attendere una corrispondenza al 100%, sia nella definizione delle funzioni, sia nei parametri che tali funzioni si aspettano. </li></ul>
  37. 37. Connessione <ul><li>La prima cosa da fare è stabilire il collegamento con il server MySql. A tale scopo si utilizza la funzione mysql_connect(server, utente, password) , alla quale dobbiamo passare l'indirizzo su cui si trova il server MySql ('localhost' quando gira sulla stessa macchina su cui si trova il nostro web server), il nome utente col quale ci vogliamo collegare e la sua password. </li></ul><ul><li>Questa funzione restituisce , se il collegamento è riuscito, un identificativo della connessione, cioè una variabile di tipo resource . </li></ul><ul><li>Questo è un tipo di variabile che non possiamo usare per fare elaborazioni o calcoli, ma che ci serve semplicemente come &quot;puntatore&quot; al database. </li></ul><ul><li>In pratica, quando richiameremo le funzioni successive per lavorare con MySql, uno dei parametri che utilizzeremo sarà proprio questo identificatore. </li></ul><ul><li>Se non riesce, la funzione restituisce il valore booleano FALSE. </li></ul><ul><li>Nel momento in cui ci interfacciamo con un database, può capitare che sia il server del database a rilevare un errore (per restare al caso della connessione, può capitare che l'utente non sia autorizzato a collegarsi e quindi la connessione venga rifiutata). </li></ul><ul><li>In questa situazione, PHP non rileverà alcun errore , e saremo noi a doverci preoccupare di verificare che l'istruzione inviata al database sia andata a buon fine. </li></ul><ul><li>Questo significa che è molto importante verificare sempre l'esito di una richiesta inviata al database . </li></ul>
  38. 38. Connessione <ul><li>$conn = mysql_connect( 'localhost' , 'mario' , 'xxx' ) or die ( &quot;Errore nella connessione a MySql: &quot; . mysql_error()); </li></ul><ul><li>Questa istruzione cerca di connettersi al server MySql che si trova sulla macchina locale (localhost), fornendo il nome utente 'mario' e la password 'xxx'. </li></ul><ul><li>Ciò che si trova dopo la parola chiave or viene eseguito solo nel caso in cui la prima parte dell'istruzione prenda un valore falso (cioè se mysql_connect() restituisce FALSE, ovvero se la connessione non è riuscita). </li></ul><ul><li>In questo caso quindi viene eseguita la funzione die() , che termina l'esecuzione dello script stampando a video ciò che abbiamo indicato fra parentesi. </li></ul><ul><li>E fra le parentesi, oltre alla frase che segnala genericamente l'errore, troviamo un'altra funzione fondamentale, che è mysql_error() : questa funzione (senza parametri) effettua la stampa dell'errore segnalato dal server MySql. </li></ul><ul><li>In questo modo, se la nostra connessione non è riuscita, sapremo immediatamente qual è il motivo. Se invece è riuscita, la variabile $conn contiene il nostro identificativo di connessione. </li></ul>
  39. 39. Selezione DataBase <ul><li>Una volta stabilita la connessione, il passo successivo è selezionare il database col quale vogliamo lavorare. </li></ul><ul><li>Per questo si usa la funzione mysql_select_db(nomedb,connessione) : col primo parametro passiamo il nome del db al quale vogliamo connetterci, col secondo l'identificativo di connessione (cioè quello che abbiamo ottenuto da mysql_connect ). </li></ul><ul><li>Questa funzione restituisce un valore booleano che indica se la selezione del database è riuscita o no. Anche in questo caso però vale il discorso fatto in precedenza: nel caso in cui la selezione non riesca, vogliamo sapere qual è stato il problema. </li></ul><ul><li>Quindi ci conviene fare: </li></ul><ul><li>mysql_select_db( 'mio_database' , $conn ) or die ( &quot;Errore nella selezione del db: &quot; . mysql_error()); </li></ul><ul><li>Così facendo, non abbiamo bisogno di assegnare l'esito della funzione ad una variabile, perché se la selezione va male il nostro script si bloccherà segnalandoci l'errore, in caso contrario possiamo proseguire. </li></ul>
  40. 40. Esecuzione di una Query <ul><li>Per eseguire la query si usa la funzione mysql_query(query,connessione) , alla quale viene passata la query da eseguire insieme all'identificativo di connessione già visto prima. </li></ul><ul><li>Anche questa funzione restituisce un valore, per il quale però dobbiamo distinguere due possibilità rispetto al tipo di query che abbiamo lanciato: </li></ul><ul><li>1) Se si tratta di una query di interrogazione (SELECT), la funzione restituisce un identificativo del risultato (cioè un'altra variabile di tipo resource), che ci servirà successivamente, se la query è andata a buon fine; se invece MySql ha rilevato degli errori, la funzione restituisce FALSE; </li></ul><ul><li>2) Se invece si tratta di una query di aggiornamento (INSERT, UPDATE, DELETE), la funzione restituirà in ogni caso un valore booleano, ad indicare se l'esecuzione è andata a buon fine oppure no. </li></ul><ul><li>$query = 'SELECT * FROM tabella' ; </li></ul><ul><li>$ris = mysql_query( $query , $conn ) or die ( &quot;Errore nella query: &quot; . mysql_error()); </li></ul>
  41. 41. Verifica dei risultati di una Query <ul><li>Il fatto che una query sia stata eseguita correttamente non significa necessariamente che abbia prodotto dei risultati. </li></ul><ul><li>Può infatti verificarsi il caso in cui una query, pur essendo perfettamente corretta, non produce alcun risultato, ad esempio perché le condizioni che abbiamo specificato nella clausola WHERE non sono mai verificate sulle tabelle interessate. </li></ul><ul><li>Se vogliamo sapere quante righe sono state restituite da una SELECT, possiamo usare la funzione mysql_num_rows(risultato) , che ci restituisce il numero di righe contenute dall'identificativo del risultato che le passiamo. </li></ul><ul><li>Se invece abbiamo eseguito una query di aggiornamento (INSERT, UPDATE, DELETE) e vogliamo sapere quante righe sono state modificate, possiamo usare mysql_affected_rows(connessione) , che ci restituisce il numero di righe modificate dall'ultima query di aggiornamento. </li></ul>
  42. 42. Verifica dei risultati di una Query <ul><li>$query = 'SELECT * FROM tabella' ; </li></ul><ul><li>$ris = mysql_query( $query , $conn ) or die( &quot;Errore nella query: &quot; . mysql_error()); </li></ul><ul><li>$righe = mysql_num_rows( $ris ); /* $righe riceve il numero di righe restituite dalla select */ </li></ul><ul><li>$query = &quot;UPDATE tabella SET campo1='valore' WHERE campo2='val'&quot; ; </li></ul><ul><li>mysql_query( $query , $conn ) or die( &quot;Errore nella query: &quot; . mysql_error()); </li></ul><ul><li>$righe = mysql_affected_rows( $conn ); /* $righe riceve il numero di righe modificate dall'UPDATE */ </li></ul><ul><li>E' importante notare la differenza nel parametro da passare alle due funzioni: mentre mysql_num_rows() richiede un identificativo di risultato , mysql_affected_rows() richiede un identificativo di connessione ; infatti, come abbiamo visto prima, una query di aggiornamento non restituisce un identificativo di risultato . </li></ul>
  43. 43. Lettura dei risultati di una query <ul><li>Come abbiamo visto prima, una volta effettuata una query di interrogazione abbiamo a disposizione un identificativo del suo risultato. </li></ul><ul><li>Per poter leggere questo risultato possiamo utilizzare la funzione mysql_fetch_array(risultato) , la quale, ogni volta che viene chiamata, ci restituisce una riga del nostro risultato; quando non ci sono più righe da leggere, la funzione restituisce FALSE . </li></ul><ul><li>Quindi, per scorrere tutto il risultato, dovremo usare questa funzione come condizione di un ciclo, che si concluderà quando restituisce FALSE. </li></ul><ul><li>$query = 'SELECT * FROM tabella' ; </li></ul><ul><li>$ris = mysql_query( $query , $conn ) or die( &quot;Errore nella query: &quot; . mysql_error()); </li></ul><ul><li>while ( $riga = mysql_fetch_array( $ris )) { </li></ul><ul><li>//codice che elabora i dati </li></ul><ul><li>} </li></ul>
  44. 44. Lettura dei risultati di una query <ul><li>Ogni volta che questo ciclo viene eseguito, quindi, avremo a disposizione, nella variabile $riga , una riga del nostro risultato. </li></ul><ul><li>Questa variabile è in effetti un array che contiene i valori delle colonne restituiti dalla nostra query. </li></ul><ul><li>Gli indici dell'array sono i nomi delle colonne, ed i loro valori sono i valori estratti dal database. </li></ul><ul><li>$query = 'SELECT nome, indirizzo, telefono FROM tabella' ; </li></ul><ul><li>$ris = mysql_query( $query , $conn ) or die( &quot;Errore nella query: &quot; . mysql_error()); </li></ul><ul><li>while ( $riga = mysql_fetch_array( $ris )) { </li></ul><ul><li>echo &quot;Nome: &quot; . $riga [ &quot;nome&quot; ]. &quot;<br>&quot; ; </li></ul><ul><li>echo &quot;Indirizzo: &quot; . $riga [ &quot;indirizzo&quot; ]. &quot;<br>&quot; ; </li></ul><ul><li>echo &quot;Telefono: &quot; . $riga [ &quot;telefono&quot; ]. &quot;<br>&quot; ; </li></ul><ul><li>echo &quot;<br>&quot; ; </li></ul><ul><li>} </li></ul>
  45. 45. Chiusura della connessione <ul><li>Abbiamo quindi completato questa veloce carrellata sulle principali funzioni da utilizzare per interagire da PHP con un database MySql. </li></ul><ul><li>Rimane da citare la funzione mysql_close(connessione) , che serve per chiudere la connessione aperta con mysql_connect(), ma in pratica questa funzione è usata pochissimo, in quanto PHP si preoccupa da solo, al termine dello script, di chiudere le connessioni che abbiamo aperto. </li></ul>
  46. 46. Altre funzioni x MySQL: <ul><li>resource mysql_pconnect ( string server , string nome_utente , string password) </li></ul><ul><li>Apre una connessione persistente ad un server MySQL </li></ul><ul><li>bool mysql_create_db ( string nome_database , resource identificativo_connessione) </li></ul><ul><li>Crea un database MySQL </li></ul><ul><li>bool mysql_drop_db ( string nome_database , resource identificativo_connessione) </li></ul><ul><li>Elimina (cancella) un database MySQL </li></ul><ul><li>bool mysql_data_seek ( resource identificativo_risultato, int numero_riga) </li></ul><ul><li>Muove il puntatore interno del risultato </li></ul><ul><li>string mysql_escape_string ( string stringa_senza_escape) </li></ul><ul><li>Aggiunge le sequenze di escape in una stringa per l'uso in mysql_query. </li></ul><ul><li>int mysql_insert_id ( [resource identificativo_connessione]) </li></ul><ul><li>Ottiene l'identificativo generato dalla precedente operazione INSERT </li></ul>
  47. 47. Altre funzioni x MySQL: <ul><li>resource mysql_list_fields ( string nome_database, string nome_tabella , resource identificativo_connessione) </li></ul><ul><li>Elenca i campi di un risultato MySQL </li></ul><ul><li>int mysql_num_fields ( resource risultato) </li></ul><ul><li>Ottiene il numero di campi nel risultato </li></ul><ul><li>string mysql_field_name ( resource risultato, int indice_campo) </li></ul><ul><li>Ottiene il nome del campo specificato in un risultato </li></ul><ul><li>string mysql_field_type ( resource risultato, int indice_campo) </li></ul><ul><li>Ottiene il tipo del campo specificato in un risultato </li></ul>
  48. 48. Esempio lettura campi <ul><li>$connessione = mysql_connect( 'localhost' , 'ut_mysql' , 'pass_mysql' ); </li></ul><ul><li>$campi = mysql_list_fields( &quot;db1&quot; , &quot;tab1&quot; , $connessione ); </li></ul><ul><li>$colonne = mysql_num_fields( $campi ); </li></ul><ul><li>for ( $i = 0 ; $i < $colonne ; $i ++) { </li></ul><ul><li>echo mysql_field_name( $campi , $i ) . “<br>&quot; ; </li></ul><ul><li>} </li></ul><ul><li>L'esempio riportato sopra dovrebbe produrre il seguente output: </li></ul><ul><li>campo1 </li></ul><ul><li>campo2 </li></ul><ul><li>campo3 </li></ul><ul><li>... </li></ul>
  49. 49. La funzione header() <ul><li>La funzione header permette di inviare al browser una qualsiasi intestazione http, informazioni che di solito vengono inviate direttamente dal server web. Può essere utilizzata per effettuare reindirizzamenti a pagine diverse direttamente da uno script php, per cambiare il set di caratteri utilizzato, per indicare il tipo di documento, ecc.. </li></ul><ul><li>header(“nuovapagina.php&quot;); //reindirizza il browser a “nuovapagina.php” </li></ul><ul><li>exit; </li></ul><ul><li>header(&quot;Content-type: application/pdf&quot;); </li></ul><ul><li>header(&quot;Content-Disposition: attachment; filename=downloaded.pdf&quot;); </li></ul><ul><li>/* indica che quello che verrà inviato al browser è un file pdf */ </li></ul>
  50. 50. Le session <ul><li>l supporto delle sessioni in PHP consiste nel mantenere certi dati attraverso accessi successivi. </li></ul><ul><li>Al visitatore che accede al vostro sito web viene assegnato un id unico, il cosidetto id di sessione. Questo viene registrato in un cookie sul lato utente o è propagato tramite l'URL. </li></ul><ul><li>Il supporto delle sessioni vi permette di salvare valori in variabili che vengono rese disponibili, se voi volete, attraverso script diversi. </li></ul><ul><li>Quando un visitatore accede al vostro sito, PHP controllerà su vostra richiesta (esplicitamente tramite session_start()) se esiste l’id di sessione. In questo caso , le variabili salvate nella sessione vengono rese disponibili. </li></ul><ul><li>$_SESSION[“count”] = 50; //registrare un valore nella sessione </li></ul><ul><li>unset($_SESSION[“count”]); //eliminare un valore dalla sessione </li></ul>
  51. 51. Grazie per l’attenzione. Lorenzo Massacci [email_address]

×