SlideShare a Scribd company logo
Linguaggi di Programmazione per il Web Le Funzioni
Le principali funzioni in PHP   (funzioni sulle stringhe) int  strlen  ( string str)  verifica la lunghezza della stringa, cioè il numero di caratteri che la compongono.  Restituisce  un numero intero.   string  trim  ( string str [, string charlist])  elimina gli spazi all'inizio e alla fine della stringa.  Restituisce  la stringa modificata.   string  ltrim  ( string str [, string charlist])   come trim ma solo per l’inizio della stringa.  Restituisce  la stringa modificata.   string  rtrim  ( string str [, string charlist])   come trim ma solo per la fine della stringa.  Restituisce  la stringa modificata.
Le principali funzioni in PHP   (funzioni sulle stringhe) 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. 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.  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). 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. La funzione  restituisce  la porzione di stringa richiesta.
Le principali funzioni in PHP   (funzioni sulle stringhe) 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.   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.
Le principali funzioni in PHP   (funzioni sulle stringhe) 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.  string  strtolower  ( string str)  converte tutti i caratteri alfabetici nelle corrispondenti lettere minuscole.  Restituisce  la stringa modificata.  string  strtoupper  ( string str)  converte tutti i caratteri alfabetici nelle corrispondenti lettere maiuscole.  Restituisce  la stringa modificata.
Le principali funzioni in PHP   (funzioni sulle stringhe) string  ucfirst  ( string str)  trasforma in maiuscolo il primo carattere della stringa.  Restituisce  la stringa modificata.  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.  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.
Le principali funzioni in PHP  (funzioni sugli array) int  count  ( mixed var [, int mode])  o  int  sizeof  ( mixed var [, int mode])   conta il numero di elementi dell'array.  Restituisce  un intero.   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.  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)
Le principali funzioni in PHP  (funzioni sugli array) 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.  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.  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. 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.
Le principali funzioni in PHP  (funzioni sugli array) 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.   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.   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. 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.
Le principali funzioni in PHP  (funzioni sugli array) 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.
Le principali funzioni in PHP  (funzioni sulle date) 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.  int  time  ( void )  è la più semplice di tutte, perché fornisce il timestamp relativo al momento in cui viene eseguita.  Restituisce  un intero (timestamp).
Le principali funzioni in PHP  (funzioni sulle date) 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:   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) La funzione date()  restituisce  la stringa formattata che rappresenta la data.
Le principali funzioni in PHP  (funzioni sulle date) 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è "febbraio dell'anno successivo", 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).  bool  checkdate  ( int month, int day, int year)  verifica se i valori passati costituiscono una data valida.  Restituisce  un valore booleano.
ESERCIZIO Funzioni 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ì) 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) Creare uno script che calcola la differenza tra due due date date in input
Le funzioni personalizzate 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. 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. function  grassetto  ( $stringa1 ) { echo “ <strong> ”. $stringa1 .” </strong> ”; } echo “ questo non è grassetto ”; grassetto(“ questo è grassetto ”); $stringa2  = “ anche questo è grassetto ”; grassetto( $stringa2 );
Le funzioni personalizzate Le funzioni possono restituire dei valori utilizzando la dichiarazione  return function  grassetto  ( $stringa1 ) { $app = “ <strong> ”. $stringa1 .” </strong> ”;   return $app; } echo “ questo non è grassetto ”; $risultato  = grassetto(“ questo è grassetto ”); echo  $risultato ; $stringa2  = “ anche questo è grassetto ”; echo   grassetto( $stringa2 );
Le funzioni personalizzate La dichiarazione return causa la terminazione dell’esecuzione della funzione. Esempio: function  divisione($num1, $num2 ) {   if ( $num2==0 ) {     return  false ;   }   return ( $num1/$num2 ); }  $a = 5; $b = 0; $m =  divisione( $a, $b );  //$m diventa false $m =  divisione( 4,2 ) ; //$m diventa 2
Scope delle variabili 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. function  raddoppia($num1 ) {    $temp = $num1*2; }  $variabile = 5; $raddoppia($variabile); echo $temp; Riceveremo un errore perché $temp non esiste
Scope delle variabili Il modo corretto per poter usare un valore locale ad una funzione in altri punti dello script è quello di restituirlo con return function  raddoppia($num1 ) {    $valorerestituito = $num1*2;   return  $valorerestituito; }  $variabile = 5; $temp = $raddoppia($variabile); echo $temp; 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 Questa regola non vale per le variabili  superglobali:  $_GET   e   $_POST
Valori di default per i parametri 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. 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.  function anagrafe($nome, $indirizzo, $cf='non disponibile') {   echo ‘Nome: ‘.$nome.’<br>’;   echo ‘Indirizzo: ‘.$indirizzo.’<br>’;   echo ‘Codice fiscale: ’.$cf.’<br>’; }  anagrafe('Mario Rossi', 'via Roma 2', 'RSSMRA69S12A944X'); anagrafe('Paolo Verdi', 'via Parigi 9');
Riuso di funzioni con i file include e require 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. funzioni.php <?php Function grassetto($stringa1) {   return “<strong>”.$stringa1.”</strong>”; } ?> esempio.php <?php include “funzioni.php”; grassetto(“questo è grassetto”); ?> 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.
Costruiamo insieme il Calendario Questo è quello che dobbiamo realizzare !!! Un calendario dinamico che mi permette di “essere sfogliato” mese x mese e di selezionare un giorno in particolare
Da dove cominciamo? Innanzi tutto creiamo il file  calendario.php  inserendo all’interno l’HTML necessario a creare la base per la pagina: <!DOCTYPE HTML PUBLIC  &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;   &quot;http://www.w3.org/TR/html4/loose.dtd&quot; > <html> <head><title>Esercizio - Calendario</title></head> <body> <h1>Calendario</h1> <br> <?php .... ?> </body> </html>
Scriviamo il codice PHP 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. Verifichiamo se ci sono state inviate e in caso negativo le impostiamo con il valore di default preso dalla data di oggi: if (isset( $_GET [ 'giorno' ])) { if (is_numeric( $_GET [ 'giorno' ])) { $giorno  =  $_GET [ 'giorno' ];  } else { //Prende il giorno di oggi $giorno  = date( &quot;d&quot; ); } } else { //Prende il giorno di oggi $giorno  = date( &quot;d&quot; ); } La stessa cosa la faremo per il mese ( date( “m” ) ) e per l’anno ( date( “Y” ) )
Il giorno della settimana 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…) Ci prepariamo quinidi un array di conversione: //Preparo l'array con i giorni della settimana $arrayDay [ 0 ]= 'Domenica' ;  //Lo scriviamo x esteso perché ci servirà alla fine $arrayDay [ 1 ]= 'Lunedi' ; $arrayDay [ 2 ]= 'Martedi' ; $arrayDay [ 3 ]= 'Mercoledi' ; $arrayDay [ 4 ]= 'Giovedi' ; $arrayDay [ 5 ]= 'Venerdi' ; $arrayDay [ 6 ]= 'Sabato' ; In questo modo potremo scrivere: $arrayDay [date( &quot;w&quot; )]; Che restituirà la lettera corrispondente al giorno della settimana
Iniziamo a disegnare la tabella echo  '<table border=&quot;1&quot;><tr>' ; echo  '<td colspan=&quot;2&quot;><strong>Giorno scelto:'; echo  $giorno . '/' . $mese . '/' . $anno . '<strong></td>' ; Che ci permette di creare questa parte di tabella: Ora dovremmo stampare le celle relativi alle sigle dei giorni della settimana.
I giorni della settimana 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 Scopriamo quindi qual è il primo giorno del mese, ricavando prima il timestamp relativo: mktime( 0 , 0 , 0 , $mese , 1 , $anno ) E poi passandolo alla funzione date con il parametro “w” $primo  = date( &quot;w&quot; ,mktime( 0 , 0 , 0 , $mese , 1 , $anno )); Dobbiamo inoltre sapere qual è l’ultimo giorno del mese in modo da poter creare il ciclo: $max  = date( &quot;t&quot; ,mktime( 0 , 0 , 0 , $mese , 1 , $anno )); Ora possiamo fare il nostro ciclo: $giorni_della_settimana = $primo //inizializzo con il primo giorno del mese for ( $j = 1 ;  $j <= $max ;  $j ++) { //{0} mi permette di prendere il pirmo carattere di una stringa echo  &quot;<td>&quot; . $arrayDay [ $giorni_della_settimana ]{0}. &quot;</td>&quot; ;  if ( $giorni_della_settimana == 6 )  //$giorni_della_settimana si riazzera ogni 7 $giorni_della_settimana = 0 ; else $giorni_della_settimana ++; }
Navigazione tra i mesi Abbiamo terminato la creazione della prima riga. La seconda riga comincia con i link necessari alla navigazione tra i mesi:  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: <a href=&quot; calendario.php?giorno=31&mese=3&anno=2004 &quot;>&lt;&lt;</a> I parametri che verranno inviati (per il link mese precedente) saranno: $_GET[“giorno”] = contiene l’ultimo giorno del mese precedente $_GET[“mese”] = contiene il mese precedente $_GET[“anno”] = contiene l’anno del mese precedente
Navigazione tra i mesi Per poterlo fare dobbiamo prima prepararci i dati da inviare: //Trovo l'ultimo giorno del mese precedente $max_prec  = date( “t&quot; ,mktime( 0 , 0 , 0 , $mese - 1 , 1 , $anno )); //Preparo il timestamp dell'ultimo giorno del mese precedente $timestamp_prec  = mktime( 0 , 0 , 0 , $mese - 1 , $max_prec , $anno ); //Creo i parametri da inviare $giorno_prec =date( “d&quot; , $timestamp_prec ); $mese_prec =date( &quot;m&quot; , $timestamp_prec ); $anno_prec =date( &quot;Y&quot; , $timestamp_prec ); Stampo il link “mese precedente”: //LINK PER ANDARE AL MESE PRECEDENTE echo  ‘</tr><tr><td>' ; echo  '<a href=&quot;calendario.php?giorno=' . $giorno_prec . '&mese=' . $mese_prec . '&anno=' . $anno_prec . '&quot;>' ; echo  '   &lt;&lt;</a></td> '  ;
Navigazione tra i mesi La stessa cosa la dobbiamo fare per il mese successivo: //Preparo il timestamp delprimo giorno del mese successivo $timestamp_succ  = mktime( 0 , 0 , 0 , $mese + 1 , 1 , $anno ); //Creo i parametri da inviare $giorno_succ =date( “d&quot; , $timestamp_succ ); $mese_succ =date( &quot;m&quot; , $timestamp_succ ); $anno_succ =date( &quot;Y&quot; , $timestamp_succ ); Stampo il link “mese successivo”: //LINK PER ANDARE AL MESE SUCCESSIVO echo  '<td>' ; echo  '<a href=&quot;calendario.php?giorno=' . $giorno_succ . '&mese=' . $mese_succ . '&anno=' . $anno_succ . '&quot;>' ; echo  '   &gt;&gt;</a></td> '  ;
Non resta che stampare i giorni Per stampare il numero dei  giorni, ricorriamo allo stesso ciclo che avevamo utilizzato per le sigle dei giorni della settimana: //Ciclo per stampare i giorni della settimana for ( $j = 1 ;  $j <= $max ;  $j ++) { … } Dove $max (per chi non se lo ricorda conteneva il numero di giorni del mese che vogliamo stampare). All’interno del ciclo non faremo altro che stampare il numero e il link per spostarci in quel giorno: $timestamp_giorno  = mktime( 0 , 0 , 0 , $mese , $j , $anno ); echo  '<td><a href=&quot;calendario.php?' ; echo  'giorno=' .date( &quot;d&quot; , $timestamp_giorno ); echo  '&mese=' .date( &quot;m&quot; , $timestamp_giorno ); echo  '&anno=' .date( &quot;Y&quot; , $timestamp_giorno ). '&quot;>' . $j . '</a></td>' ;
Chiudiamo lo script Chiudiamo prima la tabella che abbiamo utilizzato per il calendario: echo  '</tr></table>' ; Come abbiamo fatto per i giorni della settimana ci prepariamo un array di conversione per i mesi dell’anno: //Preparo l'array con i mesi $arrayMonth [ '01' ]= 'Gennaio' ; $arrayMonth [ '02' ]= 'Febbraio' ; [..] $arrayMonth [ '12' ]= 'Dicembre' ; E infine stampiamo il messaggio finale: $giorno_sett =date( &quot;w&quot; ,mktime( 0 , 0 , 0 , $mese , $giorno , $anno )); echo  '<h2>Il giorno scelto &egrave;: ' ; echo  $arrayDay [ $giorno_sett ]. ' ' . $giorno . ' ' . $arrayMonth [ $mese ]; echo  ' ' . $anno . '</h2>' ;
Ottimizziamo lo script Trasformando alcune parti del nostro codice in funzioni, possiamo ottimizzare il nostro codice cioè, renderlo più semplice da leggere e da modificare. 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: function  verifica_parametro_numerico( $strParametro , $valore_default = 0 ) { if  (isset($_GET[ $strParametro] )) { if  (is_numeric($_GET[$strParametro])) { return  $_GET[$strParametro]; }  else  { //Prende il valore di default return   $valore_default ; } }  else  { //Prende il valore di default return   $valore_default ; } }
Ottimizziamo lo script A questo punto le 39 righe di codice necessarie per verificare la presenza dei tre parametri giorno mese e anno diventano semplicemente: // Controllo il giorno $giorno  = verifica_parametro_numerico( “giorno” ,date( &quot;d&quot; )); // Controllo il mese $mese  = verifica_parametro_numerico( “mese” ,date( &quot;m&quot; )); // Controllo l'anno $anno  = verifica_parametro_numerico( “anno” ,date( &quot;Y&quot; ));
Ottimizziamo lo script Per ottimizzare ancora il nostro script, creiamo un altro file “definizioni.inc.php” dove all’interno mettiamo: <?php function  verifica_parametro_numerico( $strParametro , $valore_default = 0 ) { [...] } //Preparo l'array con i giorni della settimana $arrayDay [ 0 ]= 'Domenica' ; [...] $arrayDay [ 6 ]= 'Sabato' ; //Preparo l'array con i mesi $arrayMonth [ '01' ]= 'Gennaio' ; [...] $arrayMonth [ '12' ]= 'Dicembre' ; ?> Abbiamo inserito nel file anche la definizione degli array costanti, nel nostro script principale basterà inserire:  require  &quot;definizioni.inc.php&quot; ;
PHP & MySql Come abbiamo già detto, la possibilità di interagire con i database è una delle potenzialità più interessanti offerte da PHP. 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.). 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. 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.  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.
Connessione 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.  Questa funzione  restituisce , se il collegamento è riuscito, un identificativo della connessione, cioè una variabile di tipo  resource . 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.  In pratica, quando richiameremo le funzioni successive per lavorare con MySql, uno dei parametri che utilizzeremo sarà proprio questo identificatore.  Se non riesce, la funzione restituisce il valore booleano FALSE.  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).  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. Questo significa che  è molto importante verificare sempre l'esito di una richiesta inviata al database .
Connessione $conn  = mysql_connect( 'localhost' , 'mario' , 'xxx' )  or  die ( &quot;Errore nella connessione a MySql: &quot;   .  mysql_error()); Questa istruzione cerca di connettersi al server MySql che si trova sulla macchina locale (localhost), fornendo il nome utente 'mario' e la password 'xxx'. 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).  In questo caso quindi viene eseguita la funzione  die() , che termina l'esecuzione dello script stampando a video ciò che abbiamo indicato fra parentesi.  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.  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.
Selezione DataBase Una volta stabilita la connessione, il passo successivo è selezionare il database col quale vogliamo lavorare. 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 ).   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. Quindi ci conviene fare: mysql_select_db( 'mio_database' , $conn )  or  die ( &quot;Errore nella selezione del db: &quot;  . mysql_error());  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.
Esecuzione di una Query 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. Anche questa funzione  restituisce  un valore, per il quale però dobbiamo distinguere due possibilità rispetto al tipo di query che abbiamo lanciato:  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;  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.  $query  =  'SELECT * FROM tabella' ; $ris  = mysql_query( $query , $conn )  or  die ( &quot;Errore nella query: &quot;  .  mysql_error());
Verifica dei risultati di una Query Il fatto che una query sia stata eseguita correttamente non significa necessariamente che abbia prodotto dei risultati. 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. 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.  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.
Verifica dei risultati di una Query $query  =  'SELECT * FROM tabella' ; $ris  = mysql_query( $query , $conn )  or  die( &quot;Errore nella query: &quot;  . mysql_error()); $righe  = mysql_num_rows( $ris );  /* $righe riceve il numero di righe restituite dalla select */ $query  =  &quot;UPDATE tabella SET campo1='valore' WHERE campo2='val'&quot; ; mysql_query( $query , $conn )  or  die( &quot;Errore nella query: &quot;  . mysql_error()); $righe  = mysql_affected_rows( $conn );  /* $righe riceve il numero di righe modificate dall'UPDATE */ 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 .
Lettura dei risultati di una query Come abbiamo visto prima, una volta effettuata una query di interrogazione abbiamo a disposizione un identificativo del suo risultato.  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 .  Quindi, per scorrere tutto il risultato, dovremo usare questa funzione come condizione di un ciclo, che si concluderà quando restituisce FALSE.  $query  =  'SELECT * FROM tabella' ; $ris  = mysql_query( $query , $conn )  or  die( &quot;Errore nella query: &quot;  . mysql_error()); while ( $riga  = mysql_fetch_array( $ris )) { //codice che elabora i dati }
Lettura dei risultati di una query Ogni volta che questo ciclo viene eseguito, quindi, avremo a disposizione, nella variabile  $riga , una riga del nostro risultato.  Questa variabile è in effetti un  array  che contiene i valori delle colonne restituiti dalla nostra query.  Gli indici dell'array sono i nomi delle colonne, ed i loro valori sono i valori estratti dal database.  $query  =  'SELECT nome, indirizzo, telefono FROM tabella' ; $ris  = mysql_query( $query , $conn )  or  die( &quot;Errore nella query: &quot;  . mysql_error()); while ( $riga  = mysql_fetch_array( $ris )) { echo  &quot;Nome: &quot; . $riga [ &quot;nome&quot; ]. &quot;<br>&quot; ; echo  &quot;Indirizzo: &quot; . $riga [ &quot;indirizzo&quot; ]. &quot;<br>&quot; ; echo  &quot;Telefono: &quot; . $riga [ &quot;telefono&quot; ]. &quot;<br>&quot; ; echo  &quot;<br>&quot; ; }
Chiusura della connessione Abbiamo quindi completato questa veloce carrellata sulle principali funzioni da utilizzare per interagire da PHP con un database MySql.  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.
Altre funzioni x MySQL: resource  mysql_pconnect  ( string server , string nome_utente , string password) Apre una connessione persistente ad un server MySQL bool  mysql_create_db  ( string nome_database , resource identificativo_connessione) Crea un database MySQL bool  mysql_drop_db  ( string nome_database , resource identificativo_connessione) Elimina (cancella) un database MySQL bool  mysql_data_seek  ( resource identificativo_risultato, int numero_riga) Muove il puntatore interno del risultato string  mysql_escape_string  ( string stringa_senza_escape) Aggiunge le sequenze di escape in una stringa per l'uso in mysql_query. int  mysql_insert_id  ( [resource identificativo_connessione]) Ottiene l'identificativo generato dalla precedente operazione INSERT
Altre funzioni x MySQL: resource  mysql_list_fields  ( string nome_database, string nome_tabella , resource identificativo_connessione) Elenca i campi di un risultato MySQL int  mysql_num_fields  ( resource risultato) Ottiene il numero di campi nel risultato string  mysql_field_name  ( resource risultato, int indice_campo) Ottiene il nome del campo specificato in un risultato string  mysql_field_type  ( resource risultato, int indice_campo) Ottiene il tipo del campo specificato in un risultato
Esempio lettura campi $connessione  = mysql_connect( 'localhost' ,  'ut_mysql' ,  'pass_mysql' ); $campi  = mysql_list_fields( &quot;db1&quot; ,  &quot;tab1&quot; ,  $connessione ); $colonne  = mysql_num_fields( $campi ); for ( $i  =  0 ;  $i  <  $colonne ;  $i ++) { echo mysql_field_name( $campi ,  $i ) .  “<br>&quot; ; }  L'esempio riportato sopra dovrebbe produrre il seguente output:  campo1 campo2 campo3 ...
La funzione header() 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.. header(“nuovapagina.php&quot;);  //reindirizza il browser a “nuovapagina.php” exit;  header(&quot;Content-type: application/pdf&quot;); header(&quot;Content-Disposition: attachment; filename=downloaded.pdf&quot;); /* indica che quello che verrà inviato al browser è un file pdf */
Le session l supporto delle sessioni in PHP consiste nel mantenere certi dati attraverso accessi successivi. 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. Il supporto delle sessioni vi permette di salvare valori in variabili che vengono rese disponibili, se voi volete, attraverso script diversi.  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. $_SESSION[“count”] = 50;   //registrare un valore nella sessione unset($_SESSION[“count”]);  //eliminare un valore dalla sessione
Grazie per l’attenzione. Lorenzo Massacci [email_address]

More Related Content

What's hot (20)

PDF
Gcc & Make
N3mes1s Uncategorized
 
PDF
2006 Py03 intermedio
Loris Michielutti
 
PDF
14 - Programmazione: Stream e File
Majong DevJfu
 
PDF
Bash Scripting
Mariano Fiorentino
 
PPTX
Funzioni anonime in PHP 5.3
Zend by Rogue Wave Software
 
PDF
Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti...
Fulvio Corno
 
PDF
Comandi bash
Crismer La Pignola
 
PDF
Cattive abitudini e-lineeguida
Robert Casanova
 
PPT
Attacchi alle applicazioni basati su buffer overflow
Giacomo Antonino Fazio
 
PDF
Attacchi alle applicazioni basati su buffer overflow
Giacomo Antonino Fazio
 
PPT
7 Sottoprogrammi
guest60e9511
 
PDF
Gianfrasoft Corso Di Php Parte 2
Gianfranco Fedele
 
PDF
Lezione 12 (28 marzo 2012)
STELITANO
 
PDF
Spyppolare o non spyppolare
PyCon Italia
 
PDF
Lezione 12 (28 marzo 2012)
STELITANO
 
DOC
Linguaggi Di Programmazione Caso Di Studio
Alartzero
 
PDF
Corso PHP ENAIP - lezione #03 - 24/01/2014
Matteo Moro
 
PDF
Il simulatore NS-2
Paolo Campegiani
 
PPT
Php Funzioni Built In Barbiera 97
Roberto Barbiera
 
2006 Py03 intermedio
Loris Michielutti
 
14 - Programmazione: Stream e File
Majong DevJfu
 
Bash Scripting
Mariano Fiorentino
 
Funzioni anonime in PHP 5.3
Zend by Rogue Wave Software
 
Scripting - Esecuzione condizionale - Costrutti iterativi - Variabili (quoti...
Fulvio Corno
 
Comandi bash
Crismer La Pignola
 
Cattive abitudini e-lineeguida
Robert Casanova
 
Attacchi alle applicazioni basati su buffer overflow
Giacomo Antonino Fazio
 
Attacchi alle applicazioni basati su buffer overflow
Giacomo Antonino Fazio
 
7 Sottoprogrammi
guest60e9511
 
Gianfrasoft Corso Di Php Parte 2
Gianfranco Fedele
 
Lezione 12 (28 marzo 2012)
STELITANO
 
Spyppolare o non spyppolare
PyCon Italia
 
Lezione 12 (28 marzo 2012)
STELITANO
 
Linguaggi Di Programmazione Caso Di Studio
Alartzero
 
Corso PHP ENAIP - lezione #03 - 24/01/2014
Matteo Moro
 
Il simulatore NS-2
Paolo Campegiani
 
Php Funzioni Built In Barbiera 97
Roberto Barbiera
 

Viewers also liked (20)

PDF
Internet e animazione
Pivari.com
 
PPT
Il Backup Di Word Press
Andrea Beggi
 
PDF
Lezione WordPress Università degli Studi di Milano: Installazione e Gestione
alessandro gasparotto
 
PDF
2 regole del corso tecniche di modellazione digitale – computer 3d
Daniele Francaviglia
 
PDF
Corso PHP ENAIP - lezione #01 - 17/01/2014
Matteo Moro
 
PPTX
CINEMA 4D
MassimilianoNardi09
 
ODP
Joomla fap-joomla-day-2012
elpaso66
 
PDF
Portfolio of Expertise and Credentials
Portante Andrea
 
PDF
Laboratori e Workshop
Portante Andrea
 
PDF
Musica, illustrazione e social media: una storia da raccontare
InSide Training
 
PPT
08 09 26 Hyves At Picnic
Jeroen De Bakker
 
PDF
Media tools e significati simbolici 11 aprile 2014 Orient@ti
Università degli Studi di Milano-Bicocca
 
PDF
Creativity and graphic design 3
Daniele Francaviglia
 
PDF
Creativity and graphic design 4
Daniele Francaviglia
 
PDF
Luigi ricca portfolio
Luigi Ricca
 
PDF
Misurazione del video sul Web
Portante Andrea
 
ODP
Presentazione Blog Università la Sapienza
fabio73
 
PDF
Wordpress Installation for Windows and Mac
Marcello Mingardi
 
PDF
Workshop lezione_3_stand
Daniele Francaviglia
 
PPTX
Decustruzione progetto e mood board
Daniele Francaviglia
 
Internet e animazione
Pivari.com
 
Il Backup Di Word Press
Andrea Beggi
 
Lezione WordPress Università degli Studi di Milano: Installazione e Gestione
alessandro gasparotto
 
2 regole del corso tecniche di modellazione digitale – computer 3d
Daniele Francaviglia
 
Corso PHP ENAIP - lezione #01 - 17/01/2014
Matteo Moro
 
Joomla fap-joomla-day-2012
elpaso66
 
Portfolio of Expertise and Credentials
Portante Andrea
 
Laboratori e Workshop
Portante Andrea
 
Musica, illustrazione e social media: una storia da raccontare
InSide Training
 
08 09 26 Hyves At Picnic
Jeroen De Bakker
 
Media tools e significati simbolici 11 aprile 2014 Orient@ti
Università degli Studi di Milano-Bicocca
 
Creativity and graphic design 3
Daniele Francaviglia
 
Creativity and graphic design 4
Daniele Francaviglia
 
Luigi ricca portfolio
Luigi Ricca
 
Misurazione del video sul Web
Portante Andrea
 
Presentazione Blog Università la Sapienza
fabio73
 
Wordpress Installation for Windows and Mac
Marcello Mingardi
 
Workshop lezione_3_stand
Daniele Francaviglia
 
Decustruzione progetto e mood board
Daniele Francaviglia
 
Ad

Similar to PHP:funzioni e interazione con MySQL (16)

PDF
php: back to basics
Fabio Mora
 
PDF
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Codemotion
 
PPT
Php e mysql (primi passi)
Sergio Roselli ✫✫✫
 
PPT
Corso di php01
Emilia Calzetta
 
PDF
Php mysql e cms
orestJump
 
PDF
Php mysql3
orestJump
 
PDF
Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014
Andrea Telatin
 
PDF
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
guestbe916c
 
PDF
Gianfrasoft Corso Di Php Parte 1
Gianfranco Fedele
 
PDF
Php e database: php mysql
High Secondary School
 
PDF
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Cristian Randieri PhD
 
PDF
PHP e crittografia
Enrico Zimuel
 
PPSX
Array
Mariangela Mone
 
PDF
Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...
Fulvio Corno
 
PPT
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
 
ODP
Interazione di PHP con Mysql
I.S.I.S. "Antonio Serra" - Napoli
 
php: back to basics
Fabio Mora
 
Enrico Zimuel - PUG Milano meetup - Codemotion Milan 2017
Codemotion
 
Php e mysql (primi passi)
Sergio Roselli ✫✫✫
 
Corso di php01
Emilia Calzetta
 
Php mysql e cms
orestJump
 
Php mysql3
orestJump
 
Introduzione al Perl (BMR Genomics) - Lezione 1 Agosto 2014
Andrea Telatin
 
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
guestbe916c
 
Gianfrasoft Corso Di Php Parte 1
Gianfranco Fedele
 
Php e database: php mysql
High Secondary School
 
Lezioni di programmazione in c le stringhe By Cristian Randieri - www.intelli...
Cristian Randieri PhD
 
PHP e crittografia
Enrico Zimuel
 
Componenti dello stack LAMP - PHP, il linguaggio, l'installazione - MySQL, in...
Fulvio Corno
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
 
Interazione di PHP con Mysql
I.S.I.S. "Antonio Serra" - Napoli
 
Ad

More from extrategy (20)

PDF
Un approccio Frameworkless per sviluppare la tua Single Page Application
extrategy
 
PDF
L'arte di massimizzare la quantità di lavoro non svolto
extrategy
 
PDF
Adaptive planning
extrategy
 
PDF
Usare i Design System - Un approccio Frameworkless per la tua Web Application
extrategy
 
PDF
Il Pair Coaching come evoluzione professionale e personale
extrategy
 
PDF
L’arte di massimizzare la quantità di lavoro non svolto
extrategy
 
PDF
CSS day 2018 - Layout Saga in the web application era
extrategy
 
PDF
Learning over Delivery: il business e l'innovazione ai tempi della complessità
extrategy
 
PDF
Mini IAD Torino: Il collante strategico durante lo sviluppo: Continuous Disco...
extrategy
 
PDF
IAD17 Il collante strategico durante lo sviluppo: Continuous Discovery
extrategy
 
PDF
Real time project portfolio management
extrategy
 
PDF
Dalle Styleguide alla Pattern Libraries: cosa serve e quando
extrategy
 
PDF
Web design patterns nell'era della digital transformation
extrategy
 
PDF
visione e immaginazione: dove vogliamo portare le nostre aziende domani?
extrategy
 
PDF
Real time strategy for you
extrategy
 
PDF
come il front-end automation aiuta tutto il team
extrategy
 
PDF
Inclusiveness, openness, leanness: dove voglio portare l’azienda?
extrategy
 
PDF
Innovazione. ovvero, le imprese non sono più quelle di una volta.
extrategy
 
PDF
ModulAngular
extrategy
 
PDF
Co-creare una strategia con Lego Serious Play
extrategy
 
Un approccio Frameworkless per sviluppare la tua Single Page Application
extrategy
 
L'arte di massimizzare la quantità di lavoro non svolto
extrategy
 
Adaptive planning
extrategy
 
Usare i Design System - Un approccio Frameworkless per la tua Web Application
extrategy
 
Il Pair Coaching come evoluzione professionale e personale
extrategy
 
L’arte di massimizzare la quantità di lavoro non svolto
extrategy
 
CSS day 2018 - Layout Saga in the web application era
extrategy
 
Learning over Delivery: il business e l'innovazione ai tempi della complessità
extrategy
 
Mini IAD Torino: Il collante strategico durante lo sviluppo: Continuous Disco...
extrategy
 
IAD17 Il collante strategico durante lo sviluppo: Continuous Discovery
extrategy
 
Real time project portfolio management
extrategy
 
Dalle Styleguide alla Pattern Libraries: cosa serve e quando
extrategy
 
Web design patterns nell'era della digital transformation
extrategy
 
visione e immaginazione: dove vogliamo portare le nostre aziende domani?
extrategy
 
Real time strategy for you
extrategy
 
come il front-end automation aiuta tutto il team
extrategy
 
Inclusiveness, openness, leanness: dove voglio portare l’azienda?
extrategy
 
Innovazione. ovvero, le imprese non sono più quelle di una volta.
extrategy
 
ModulAngular
extrategy
 
Co-creare una strategia con Lego Serious Play
extrategy
 

PHP:funzioni e interazione con MySQL

  • 1. Linguaggi di Programmazione per il Web Le Funzioni
  • 2. Le principali funzioni in PHP (funzioni sulle stringhe) int strlen ( string str) verifica la lunghezza della stringa, cioè il numero di caratteri che la compongono. Restituisce un numero intero. string trim ( string str [, string charlist]) elimina gli spazi all'inizio e alla fine della stringa. Restituisce la stringa modificata. string ltrim ( string str [, string charlist]) come trim ma solo per l’inizio della stringa. Restituisce la stringa modificata. string rtrim ( string str [, string charlist]) come trim ma solo per la fine della stringa. Restituisce la stringa modificata.
  • 3. Le principali funzioni in PHP (funzioni sulle stringhe) 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. 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. 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). 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. La funzione restituisce la porzione di stringa richiesta.
  • 4. Le principali funzioni in PHP (funzioni sulle stringhe) 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. 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.
  • 5. Le principali funzioni in PHP (funzioni sulle stringhe) 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. string strtolower ( string str) converte tutti i caratteri alfabetici nelle corrispondenti lettere minuscole. Restituisce la stringa modificata. string strtoupper ( string str) converte tutti i caratteri alfabetici nelle corrispondenti lettere maiuscole. Restituisce la stringa modificata.
  • 6. Le principali funzioni in PHP (funzioni sulle stringhe) string ucfirst ( string str) trasforma in maiuscolo il primo carattere della stringa. Restituisce la stringa modificata. 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. 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.
  • 7. Le principali funzioni in PHP (funzioni sugli array) int count ( mixed var [, int mode]) o int sizeof ( mixed var [, int mode]) conta il numero di elementi dell'array. Restituisce un intero. 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. 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)
  • 8. Le principali funzioni in PHP (funzioni sugli array) 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. 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. 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. 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.
  • 9. Le principali funzioni in PHP (funzioni sugli array) 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. 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. 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. 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.
  • 10. Le principali funzioni in PHP (funzioni sugli array) 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.
  • 11. Le principali funzioni in PHP (funzioni sulle date) 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. int time ( void ) è la più semplice di tutte, perché fornisce il timestamp relativo al momento in cui viene eseguita. Restituisce un intero (timestamp).
  • 12. Le principali funzioni in PHP (funzioni sulle date) 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: 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) La funzione date() restituisce la stringa formattata che rappresenta la data.
  • 13. Le principali funzioni in PHP (funzioni sulle date) 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). bool checkdate ( int month, int day, int year) verifica se i valori passati costituiscono una data valida. Restituisce un valore booleano.
  • 14. ESERCIZIO Funzioni 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ì) 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) Creare uno script che calcola la differenza tra due due date date in input
  • 15. Le funzioni personalizzate 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. 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. function grassetto ( $stringa1 ) { echo “ <strong> ”. $stringa1 .” </strong> ”; } echo “ questo non è grassetto ”; grassetto(“ questo è grassetto ”); $stringa2 = “ anche questo è grassetto ”; grassetto( $stringa2 );
  • 16. Le funzioni personalizzate Le funzioni possono restituire dei valori utilizzando la dichiarazione return function grassetto ( $stringa1 ) { $app = “ <strong> ”. $stringa1 .” </strong> ”; return $app; } echo “ questo non è grassetto ”; $risultato = grassetto(“ questo è grassetto ”); echo $risultato ; $stringa2 = “ anche questo è grassetto ”; echo grassetto( $stringa2 );
  • 17. Le funzioni personalizzate La dichiarazione return causa la terminazione dell’esecuzione della funzione. Esempio: function divisione($num1, $num2 ) {   if ( $num2==0 ) {     return false ;   } return ( $num1/$num2 ); } $a = 5; $b = 0; $m = divisione( $a, $b ); //$m diventa false $m = divisione( 4,2 ) ; //$m diventa 2
  • 18. Scope delle variabili 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. function raddoppia($num1 ) {    $temp = $num1*2; } $variabile = 5; $raddoppia($variabile); echo $temp; Riceveremo un errore perché $temp non esiste
  • 19. Scope delle variabili Il modo corretto per poter usare un valore locale ad una funzione in altri punti dello script è quello di restituirlo con return function raddoppia($num1 ) {    $valorerestituito = $num1*2; return $valorerestituito; } $variabile = 5; $temp = $raddoppia($variabile); echo $temp; 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 Questa regola non vale per le variabili superglobali: $_GET e $_POST
  • 20. Valori di default per i parametri 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. 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. function anagrafe($nome, $indirizzo, $cf='non disponibile') {   echo ‘Nome: ‘.$nome.’<br>’;   echo ‘Indirizzo: ‘.$indirizzo.’<br>’;   echo ‘Codice fiscale: ’.$cf.’<br>’; } anagrafe('Mario Rossi', 'via Roma 2', 'RSSMRA69S12A944X'); anagrafe('Paolo Verdi', 'via Parigi 9');
  • 21. Riuso di funzioni con i file include e require 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. funzioni.php <?php Function grassetto($stringa1) { return “<strong>”.$stringa1.”</strong>”; } ?> esempio.php <?php include “funzioni.php”; grassetto(“questo è grassetto”); ?> 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.
  • 22. Costruiamo insieme il Calendario Questo è quello che dobbiamo realizzare !!! Un calendario dinamico che mi permette di “essere sfogliato” mese x mese e di selezionare un giorno in particolare
  • 23. Da dove cominciamo? Innanzi tutto creiamo il file calendario.php inserendo all’interno l’HTML necessario a creare la base per la pagina: <!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; &quot;http://www.w3.org/TR/html4/loose.dtd&quot; > <html> <head><title>Esercizio - Calendario</title></head> <body> <h1>Calendario</h1> <br> <?php .... ?> </body> </html>
  • 24. Scriviamo il codice PHP 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. Verifichiamo se ci sono state inviate e in caso negativo le impostiamo con il valore di default preso dalla data di oggi: if (isset( $_GET [ 'giorno' ])) { if (is_numeric( $_GET [ 'giorno' ])) { $giorno = $_GET [ 'giorno' ]; } else { //Prende il giorno di oggi $giorno = date( &quot;d&quot; ); } } else { //Prende il giorno di oggi $giorno = date( &quot;d&quot; ); } La stessa cosa la faremo per il mese ( date( “m” ) ) e per l’anno ( date( “Y” ) )
  • 25. Il giorno della settimana 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…) Ci prepariamo quinidi un array di conversione: //Preparo l'array con i giorni della settimana $arrayDay [ 0 ]= 'Domenica' ; //Lo scriviamo x esteso perché ci servirà alla fine $arrayDay [ 1 ]= 'Lunedi' ; $arrayDay [ 2 ]= 'Martedi' ; $arrayDay [ 3 ]= 'Mercoledi' ; $arrayDay [ 4 ]= 'Giovedi' ; $arrayDay [ 5 ]= 'Venerdi' ; $arrayDay [ 6 ]= 'Sabato' ; In questo modo potremo scrivere: $arrayDay [date( &quot;w&quot; )]; Che restituirà la lettera corrispondente al giorno della settimana
  • 26. Iniziamo a disegnare la tabella echo '<table border=&quot;1&quot;><tr>' ; echo '<td colspan=&quot;2&quot;><strong>Giorno scelto:'; echo $giorno . '/' . $mese . '/' . $anno . '<strong></td>' ; Che ci permette di creare questa parte di tabella: Ora dovremmo stampare le celle relativi alle sigle dei giorni della settimana.
  • 27. I giorni della settimana 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 Scopriamo quindi qual è il primo giorno del mese, ricavando prima il timestamp relativo: mktime( 0 , 0 , 0 , $mese , 1 , $anno ) E poi passandolo alla funzione date con il parametro “w” $primo = date( &quot;w&quot; ,mktime( 0 , 0 , 0 , $mese , 1 , $anno )); Dobbiamo inoltre sapere qual è l’ultimo giorno del mese in modo da poter creare il ciclo: $max = date( &quot;t&quot; ,mktime( 0 , 0 , 0 , $mese , 1 , $anno )); Ora possiamo fare il nostro ciclo: $giorni_della_settimana = $primo //inizializzo con il primo giorno del mese for ( $j = 1 ; $j <= $max ; $j ++) { //{0} mi permette di prendere il pirmo carattere di una stringa echo &quot;<td>&quot; . $arrayDay [ $giorni_della_settimana ]{0}. &quot;</td>&quot; ; if ( $giorni_della_settimana == 6 ) //$giorni_della_settimana si riazzera ogni 7 $giorni_della_settimana = 0 ; else $giorni_della_settimana ++; }
  • 28. Navigazione tra i mesi Abbiamo terminato la creazione della prima riga. La seconda riga comincia con i link necessari alla navigazione tra i mesi: 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: <a href=&quot; calendario.php?giorno=31&mese=3&anno=2004 &quot;>&lt;&lt;</a> I parametri che verranno inviati (per il link mese precedente) saranno: $_GET[“giorno”] = contiene l’ultimo giorno del mese precedente $_GET[“mese”] = contiene il mese precedente $_GET[“anno”] = contiene l’anno del mese precedente
  • 29. Navigazione tra i mesi Per poterlo fare dobbiamo prima prepararci i dati da inviare: //Trovo l'ultimo giorno del mese precedente $max_prec = date( “t&quot; ,mktime( 0 , 0 , 0 , $mese - 1 , 1 , $anno )); //Preparo il timestamp dell'ultimo giorno del mese precedente $timestamp_prec = mktime( 0 , 0 , 0 , $mese - 1 , $max_prec , $anno ); //Creo i parametri da inviare $giorno_prec =date( “d&quot; , $timestamp_prec ); $mese_prec =date( &quot;m&quot; , $timestamp_prec ); $anno_prec =date( &quot;Y&quot; , $timestamp_prec ); Stampo il link “mese precedente”: //LINK PER ANDARE AL MESE PRECEDENTE echo ‘</tr><tr><td>' ; echo '<a href=&quot;calendario.php?giorno=' . $giorno_prec . '&mese=' . $mese_prec . '&anno=' . $anno_prec . '&quot;>' ; echo ' &lt;&lt;</a></td> ' ;
  • 30. Navigazione tra i mesi La stessa cosa la dobbiamo fare per il mese successivo: //Preparo il timestamp delprimo giorno del mese successivo $timestamp_succ = mktime( 0 , 0 , 0 , $mese + 1 , 1 , $anno ); //Creo i parametri da inviare $giorno_succ =date( “d&quot; , $timestamp_succ ); $mese_succ =date( &quot;m&quot; , $timestamp_succ ); $anno_succ =date( &quot;Y&quot; , $timestamp_succ ); Stampo il link “mese successivo”: //LINK PER ANDARE AL MESE SUCCESSIVO echo '<td>' ; echo '<a href=&quot;calendario.php?giorno=' . $giorno_succ . '&mese=' . $mese_succ . '&anno=' . $anno_succ . '&quot;>' ; echo ' &gt;&gt;</a></td> ' ;
  • 31. Non resta che stampare i giorni Per stampare il numero dei giorni, ricorriamo allo stesso ciclo che avevamo utilizzato per le sigle dei giorni della settimana: //Ciclo per stampare i giorni della settimana for ( $j = 1 ; $j <= $max ; $j ++) { … } Dove $max (per chi non se lo ricorda conteneva il numero di giorni del mese che vogliamo stampare). All’interno del ciclo non faremo altro che stampare il numero e il link per spostarci in quel giorno: $timestamp_giorno = mktime( 0 , 0 , 0 , $mese , $j , $anno ); echo '<td><a href=&quot;calendario.php?' ; echo 'giorno=' .date( &quot;d&quot; , $timestamp_giorno ); echo '&mese=' .date( &quot;m&quot; , $timestamp_giorno ); echo '&anno=' .date( &quot;Y&quot; , $timestamp_giorno ). '&quot;>' . $j . '</a></td>' ;
  • 32. Chiudiamo lo script Chiudiamo prima la tabella che abbiamo utilizzato per il calendario: echo '</tr></table>' ; Come abbiamo fatto per i giorni della settimana ci prepariamo un array di conversione per i mesi dell’anno: //Preparo l'array con i mesi $arrayMonth [ '01' ]= 'Gennaio' ; $arrayMonth [ '02' ]= 'Febbraio' ; [..] $arrayMonth [ '12' ]= 'Dicembre' ; E infine stampiamo il messaggio finale: $giorno_sett =date( &quot;w&quot; ,mktime( 0 , 0 , 0 , $mese , $giorno , $anno )); echo '<h2>Il giorno scelto &egrave;: ' ; echo $arrayDay [ $giorno_sett ]. ' ' . $giorno . ' ' . $arrayMonth [ $mese ]; echo ' ' . $anno . '</h2>' ;
  • 33. Ottimizziamo lo script Trasformando alcune parti del nostro codice in funzioni, possiamo ottimizzare il nostro codice cioè, renderlo più semplice da leggere e da modificare. 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: function verifica_parametro_numerico( $strParametro , $valore_default = 0 ) { if (isset($_GET[ $strParametro] )) { if (is_numeric($_GET[$strParametro])) { return $_GET[$strParametro]; } else { //Prende il valore di default return $valore_default ; } } else { //Prende il valore di default return $valore_default ; } }
  • 34. Ottimizziamo lo script A questo punto le 39 righe di codice necessarie per verificare la presenza dei tre parametri giorno mese e anno diventano semplicemente: // Controllo il giorno $giorno = verifica_parametro_numerico( “giorno” ,date( &quot;d&quot; )); // Controllo il mese $mese = verifica_parametro_numerico( “mese” ,date( &quot;m&quot; )); // Controllo l'anno $anno = verifica_parametro_numerico( “anno” ,date( &quot;Y&quot; ));
  • 35. Ottimizziamo lo script Per ottimizzare ancora il nostro script, creiamo un altro file “definizioni.inc.php” dove all’interno mettiamo: <?php function verifica_parametro_numerico( $strParametro , $valore_default = 0 ) { [...] } //Preparo l'array con i giorni della settimana $arrayDay [ 0 ]= 'Domenica' ; [...] $arrayDay [ 6 ]= 'Sabato' ; //Preparo l'array con i mesi $arrayMonth [ '01' ]= 'Gennaio' ; [...] $arrayMonth [ '12' ]= 'Dicembre' ; ?> Abbiamo inserito nel file anche la definizione degli array costanti, nel nostro script principale basterà inserire: require &quot;definizioni.inc.php&quot; ;
  • 36. PHP & MySql Come abbiamo già detto, la possibilità di interagire con i database è una delle potenzialità più interessanti offerte da PHP. 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.). 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. 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. 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.
  • 37. Connessione 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. Questa funzione restituisce , se il collegamento è riuscito, un identificativo della connessione, cioè una variabile di tipo resource . 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. In pratica, quando richiameremo le funzioni successive per lavorare con MySql, uno dei parametri che utilizzeremo sarà proprio questo identificatore. Se non riesce, la funzione restituisce il valore booleano FALSE. 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). 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. Questo significa che è molto importante verificare sempre l'esito di una richiesta inviata al database .
  • 38. Connessione $conn = mysql_connect( 'localhost' , 'mario' , 'xxx' ) or die ( &quot;Errore nella connessione a MySql: &quot; . mysql_error()); Questa istruzione cerca di connettersi al server MySql che si trova sulla macchina locale (localhost), fornendo il nome utente 'mario' e la password 'xxx'. 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). In questo caso quindi viene eseguita la funzione die() , che termina l'esecuzione dello script stampando a video ciò che abbiamo indicato fra parentesi. 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. 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.
  • 39. Selezione DataBase Una volta stabilita la connessione, il passo successivo è selezionare il database col quale vogliamo lavorare. 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 ). 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. Quindi ci conviene fare: mysql_select_db( 'mio_database' , $conn ) or die ( &quot;Errore nella selezione del db: &quot; . mysql_error()); 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.
  • 40. Esecuzione di una Query 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. Anche questa funzione restituisce un valore, per il quale però dobbiamo distinguere due possibilità rispetto al tipo di query che abbiamo lanciato: 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; 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. $query = 'SELECT * FROM tabella' ; $ris = mysql_query( $query , $conn ) or die ( &quot;Errore nella query: &quot; . mysql_error());
  • 41. Verifica dei risultati di una Query Il fatto che una query sia stata eseguita correttamente non significa necessariamente che abbia prodotto dei risultati. 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. 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. 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.
  • 42. Verifica dei risultati di una Query $query = 'SELECT * FROM tabella' ; $ris = mysql_query( $query , $conn ) or die( &quot;Errore nella query: &quot; . mysql_error()); $righe = mysql_num_rows( $ris ); /* $righe riceve il numero di righe restituite dalla select */ $query = &quot;UPDATE tabella SET campo1='valore' WHERE campo2='val'&quot; ; mysql_query( $query , $conn ) or die( &quot;Errore nella query: &quot; . mysql_error()); $righe = mysql_affected_rows( $conn ); /* $righe riceve il numero di righe modificate dall'UPDATE */ 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 .
  • 43. Lettura dei risultati di una query Come abbiamo visto prima, una volta effettuata una query di interrogazione abbiamo a disposizione un identificativo del suo risultato. 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 . Quindi, per scorrere tutto il risultato, dovremo usare questa funzione come condizione di un ciclo, che si concluderà quando restituisce FALSE. $query = 'SELECT * FROM tabella' ; $ris = mysql_query( $query , $conn ) or die( &quot;Errore nella query: &quot; . mysql_error()); while ( $riga = mysql_fetch_array( $ris )) { //codice che elabora i dati }
  • 44. Lettura dei risultati di una query Ogni volta che questo ciclo viene eseguito, quindi, avremo a disposizione, nella variabile $riga , una riga del nostro risultato. Questa variabile è in effetti un array che contiene i valori delle colonne restituiti dalla nostra query. Gli indici dell'array sono i nomi delle colonne, ed i loro valori sono i valori estratti dal database. $query = 'SELECT nome, indirizzo, telefono FROM tabella' ; $ris = mysql_query( $query , $conn ) or die( &quot;Errore nella query: &quot; . mysql_error()); while ( $riga = mysql_fetch_array( $ris )) { echo &quot;Nome: &quot; . $riga [ &quot;nome&quot; ]. &quot;<br>&quot; ; echo &quot;Indirizzo: &quot; . $riga [ &quot;indirizzo&quot; ]. &quot;<br>&quot; ; echo &quot;Telefono: &quot; . $riga [ &quot;telefono&quot; ]. &quot;<br>&quot; ; echo &quot;<br>&quot; ; }
  • 45. Chiusura della connessione Abbiamo quindi completato questa veloce carrellata sulle principali funzioni da utilizzare per interagire da PHP con un database MySql. 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.
  • 46. Altre funzioni x MySQL: resource mysql_pconnect ( string server , string nome_utente , string password) Apre una connessione persistente ad un server MySQL bool mysql_create_db ( string nome_database , resource identificativo_connessione) Crea un database MySQL bool mysql_drop_db ( string nome_database , resource identificativo_connessione) Elimina (cancella) un database MySQL bool mysql_data_seek ( resource identificativo_risultato, int numero_riga) Muove il puntatore interno del risultato string mysql_escape_string ( string stringa_senza_escape) Aggiunge le sequenze di escape in una stringa per l'uso in mysql_query. int mysql_insert_id ( [resource identificativo_connessione]) Ottiene l'identificativo generato dalla precedente operazione INSERT
  • 47. Altre funzioni x MySQL: resource mysql_list_fields ( string nome_database, string nome_tabella , resource identificativo_connessione) Elenca i campi di un risultato MySQL int mysql_num_fields ( resource risultato) Ottiene il numero di campi nel risultato string mysql_field_name ( resource risultato, int indice_campo) Ottiene il nome del campo specificato in un risultato string mysql_field_type ( resource risultato, int indice_campo) Ottiene il tipo del campo specificato in un risultato
  • 48. Esempio lettura campi $connessione = mysql_connect( 'localhost' , 'ut_mysql' , 'pass_mysql' ); $campi = mysql_list_fields( &quot;db1&quot; , &quot;tab1&quot; , $connessione ); $colonne = mysql_num_fields( $campi ); for ( $i = 0 ; $i < $colonne ; $i ++) { echo mysql_field_name( $campi , $i ) . “<br>&quot; ; } L'esempio riportato sopra dovrebbe produrre il seguente output: campo1 campo2 campo3 ...
  • 49. La funzione header() 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.. header(“nuovapagina.php&quot;); //reindirizza il browser a “nuovapagina.php” exit; header(&quot;Content-type: application/pdf&quot;); header(&quot;Content-Disposition: attachment; filename=downloaded.pdf&quot;); /* indica che quello che verrà inviato al browser è un file pdf */
  • 50. Le session l supporto delle sessioni in PHP consiste nel mantenere certi dati attraverso accessi successivi. 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. Il supporto delle sessioni vi permette di salvare valori in variabili che vengono rese disponibili, se voi volete, attraverso script diversi. 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. $_SESSION[“count”] = 50; //registrare un valore nella sessione unset($_SESSION[“count”]); //eliminare un valore dalla sessione
  • 51. Grazie per l’attenzione. Lorenzo Massacci [email_address]