Corso di Php (base) Massimo Di Paolo [email protected] Indice delle lezioni Php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Introduzione I concetti di base Le variabili, i tipi di dato Operatori di confronto e logici. Espressioni Struttura di controllo e i cicli Array Le Funzioni Accesso ai file I Form Le variabili $_GET, $_POST, $_COOKIES e $_SESSION Php e MySql Progetto di sito con le seguenti funzionalità 1. 2. 3. 4. Upload di file Paginazione dei risultati Inviare mail Criptare i dati con le funzioni md5 e/o sha1 1.1 Php – Un po’ di storia Nasce nel 1994, ad opera di Rasmus Lerdorf, come una serie di macro la cui funzione era quella di facilitare ai programmatori l’amministrazione delle homepage personali: da questo uso ha origine il suo primo nome Personal Home Page. È un prodotto Open Source (Codice Aperto) perfettamente integrato con altri due prodotti simili per filosofia Apache (Web Server) e MySql (database relazionale) La versione "stabile" attuale è la 5.4.14, rilasciata ad aprile 2013 Oggi PhP è conosciuto con il nome Pre Hypertext Processor oppure, più semplicemente, Hypertext PreProcessor è un linguaggio completo di scripting; può girare praticamente su qualsiasi server Web Apache, Microsoft IIS, …; su qualsiasi sistema operativo Windows o Unix/Linux, ma anche Mac, AS/400, Novell, OS/2, …; consente di interagire praticamente con qualsiasi tipo di database SQLite, MySQL, PostgreSQL, Microsoft Access/SQL Server, Oracle, SyBase, … 1.2 Php – Un po’ di storia Php non è l'unico linguaggio di programmazione per il Web La sua scelta rispetto ad altri è di tipo soggettivo Però vogliamo ricordare che: 1. È il più vecchio (ed ancora usato) linguaggio di programmazione per il Web; 2. È gratis; 3. Ha moltissime librerie di funzioni ormai testate al 100%; 4. Ha la più vasta comunità di sviluppatori che aggiorna continuamente tali librerie; 5. Tutti i CMS più usati nelle aziende sono scitti in Php e producono file in Php (vedi Wordpress, Joomla, …) Microsoft ha intrapreso da qualche anno la stessa politica dei prodotti Open Source attraverso le versioni Express dei suoi tools di sviluppo ma, come al solito, non fornisce tutto e soprattutto "le cose in più" (librerie, plugin, …) molto spesso sono a pagamento. 1.3 Php – Introduzione Risorse sul Web www.php.net sito ufficiale della comunità Php (in inglese) www.mysql.com sito ufficiale della comunità MySql (esiste anche una sezione in lingua italiana in questo sito, ma non è del tutto tradotta) www.w3schools.com/php sito legato al consorzio W3C (in inglese) … c'è tutto di tutto !!!! WAMP e LAMP ????? E per il MAC XAMPP (X= per ogni S.O. – A=Apache – M=MySql – P=PhP – P=Perl) ha dei problemi su Windows, conviene usare EasyPhP Sistema di sviluppo in locale EasyPhp www.easyph.org Editor Adobe Dreamweaver quello che useremo (breve spiegazione) NetBeans (scritto in Java per Java e poi esteso anche ad altri linguaggi) Visual Studio IDE 2008/2010/2012 con particolari plugin di terze parti (a pagamento !!!!!) Framework Zend, CodeIgniter, Yii, … raccolta di classi e funzioni soprattutto per interfacce grafiche evolute e accesso ai dati 1.4 Php – Introduzione Php: lato server e lato client Pagine statiche (Html) e pagine dinamiche (PhP, Asp.net, Jsp, …) le pagine dinamiche (Php) sono elaborate dal server web e restituite all'utente come pagine statiche (Html); al massimo possono contenere "script" che funzionano lato client (ad esempio in javascript) le pagine in Php hanno estensione .php 1.5 Php – Introduzione PhP la sua funzione fondamentale è quella di produrre codice HTML. PhP è però un linguaggio di programmazione lato server quindi abbiamo la possibilità di analizzare cosa è stato richiesto al server Web e possiamo produrre come risposta codice Html condizionato ai risultati della richiesta In definitiva abbiamo realizzato il Web dinamico 1.6 Php – Introduzione Istallare EasyPhp il file è nella cartella C:\Temp Shortcut sul desktop della cartella /www Copia del file index.php da C:\Temp /www Lanciare EasyPhp Click con il pulsante destro sull'icona Dal menù selezionare Configuration EasyPhp Impostare la lingua su Italiano; Lasciare la spunta solo sulla terza, quinta e sesta voce Premere OK Il menù di EasyPhp passa in lingua italiana Fare click sulla voce Sito locale notare indirizzo del sito (127.0.0.1 = localhost) uguale per tutti e la porta (8080, 8887, …) che può essere diversa da computer a computer per motivi, prevalentemente, di software istallato. Cosa succede se il file index.php lo rinominiamo default.php 2 Php – I concetti di base: la sintassi del linguaggio Come fa il Server Web a capire che gli stiamo spedendo codice scritto in PhP ? guardando l'estensione del file (.php) non basta, perché se rinomino un file .html con .php il Server Web me lo rimanda indietro così come è inserendo dei TAG opportuni all'interno della pagina per distinguerlo dal codice Html: TAG di apertura <?php … ?> TAG di chiusura nelle versioni precedenti alla 5 si usavano anche: TAG di apertura <script language="php" …</script> TAG di chiusura i cosiddetti TAG BREVI TAG di apertura <? … ?> TAG di chiusura TAG di apertura <% … %> TAG di chiusura (stile Microsoft Asp) Sono disabilitati dalla versione 5 ma attivabili nel file php.ini per motivi di retrocompatibilità. Usate sempre i primi per i nuovi progetti !!! 2.1 Php – I concetti di base: istruzioni e commenti Istruzione (token) blocco di codice; ; separatore di istruzioni; () e/o {} raggruppamento di istruzioni. Tutte le istruzioni in Php terminano con il punto e virgola, solo alcune fanno eccezione: i commenti, le espressioni dentro i cicli condizionali, …, altre che scopriremo nel corso delle lezioni 2 tipi di commenti in Php // commento su una linea; /* … */ commento su più linee. 2.2 Php – I concetti di base: ouptut dei dati Echo output a video Print output a video Attenzione alla leggibilità del codice non basta che gli script php siano scritti ben formattati, con i commenti, et altro: occorre che anche l'HTML della pagina risulti ben leggibile perché molti errori si capiscono subito guardando il codice sorgente della pagina prodotta carattere di escape \n usato opportunamente 3 Php – Variabili e tipi di dato Variabili contenitori di informazioni iniziano sempre con il carattere $ Per definirle si possono utilizzare tutti i caratteri dalla a alla z (minuscolo o maiuscolo), i numeri da 0 a 9 e il carattere speciale _ (underscore); sono vietati gli spazi e qualunque altro carattere; $a è diversa da $A le variabili sono di tipo case sensitive; le variabili possono essere valorizzate con qualsiasi dato testo, numeri, date, valori vero/falso, valori complessi; in Php una variabile può essere utilizzata senza dichiararne il tipo prima Php è un linguaggio di programmazione fortemente tipizzato (tipizzazione dinamica): possiamo quindi riferirci ad una variabile direttamente con la sua valorizzazione; 3.1 Php – Variabili e tipi di dato Errori con le Variabili Errori di tipo E_NOTICE sono gli errori meno gravi, la cui visualizzazione dipende dalle impostazioni nel il file di configurazione php.ini (per default sono abilitati). Un errore di questo tipo non compromette il buon funzionamento dello script, che infatti viene eseguito regolarmente. 3.2 Php – Variabili e tipi di dato Tipizzazione del linguaggio PhP è un linguaggio debolmente tipizzato al contrario di altri linguaggi di programmazione (Asp.Net, Jsp, …) non serve indicare di che tipo di dato è la variabile, basta solo definirla e assegnargli un valore Php, da questo valore capisce e assegna il tipo di dato giusto alla variabile Questa operazione si chiama CAST ; Questo facilita la programmazione … ma è rigoroso dal punto di vista della logica di programmazione ? La risposta è No. 3.3 Php – Variabili e tipi di dato PhP, come accennato in precedenza, è un linguaggio fortemente tipizzato: non assegna il Tipo di dato alla variabile ma lo deduce dal valore associato; Php gestisce i seguenti tipi di dato, String; Number; Boolean; Array; Constant; Date e Time; 3.4 Php – Variabili e tipi di dato String sequenza di caratteri alfanumerici Due sistemi per specificare una stringa virgolette semplici, virgolette doppie Per un carattere di base occorrono 8 bit = 1 byte, quindi la dimensione dipende dal numero di caratteri. Per stringhe contenenti già "doppie virgolette" o "virgolette singole" escape character (\, \n, \t, \\, \$) Per concatenare 2 stringhe usare il "punto" $stringa 1 . $stringa2 (lo spazio serve solo a migliorare la leggibilità) 3.5 Php – Variabili e tipi di dato Stringhe: espansione delle variabili Le stringhe delimitate da doppie possono contenere delle variabili perché l’interprete Php sa come trattarle. La tecnica si chiama Espansione della variabile 3.6 Php – Variabili e tipi di dato Number due diversi tipi di numeri: intero e in virgola mobile Intero (int) dipende dal sistema operativo ma, tipicamente, è a 32 bit possono assumere valori con segno da -2.147.483.648 a +2.147.483.647 zero compreso (da -232 a 232). In virgola mobile (float) su piattaforme a 32 bit si estende da 1.7E-308 a 1.7E+308 (da -264 a 264) con una precisione fino a 14 cifre decimali. Per compatibilità supporta anche la parola double. Per i numeri interi, quando superano il loro limite vengono, automaticamente convertiti in virgola mobile Funzione var_dump(); per ritornare il tipo di dato numerico; 3.7 Php – Variabili e tipi di dato Variabili booleane come tutti i linguaggi di programmazione, Php utilizza particolari variabili per mostrare condizioni del tipo vero/falso. Se una variabile è TRUE mostra 1 Se una varibile è FALSE mostra niente (blank) 3.8 Php – Variabili e tipi di dato COSTANTI variabile che mantiene immutato il suo valore durante tutta l'esecuzione dello script in cui è richiamata Non hanno il prefisso $ davanti; Distinguono tra maiuscole e minuscole ma per convenzione si richiede che siano scritte solo in maiuscolo; Non possiedono operatore di assegnazione (=) ma si utilizza l’istruzione define Se chiamate 2 volte nello stesso script, generano errore 3.9 Php – Variabili e tipi di dato Array è un tipo di dato che contiene una serie di valori, anche diversi nel tipo. Possono essere semplici o di tipo associativo; Per vedere come è fatto un array dal punto di vista della struttura basta usare la funzione print_r(nome_array); per vedere il tipo di dati presenti in un array basta usare la funzione var_dump(nome_array) utile per array misti; ritorneremo a parlare di array dopo i cicli si esaminano tramite un particolare ciclo noto come foreach. 3.10 Php – Variabili e tipi di dato Conversioni tra tipi di dato Diverse funzioni e operazioni necessitano che le variabili siano dello stesso tipo per ottenere il risultato voluto Conversione implicita effettuato direttamente dal motore di Php 3.11 Php – Variabili e tipi di dato Conversioni tra tipi di dato Esistono delle funzioni interne a Php (funzioni di sistema) che indicano se una variabile è di un determinato tipo: Is_type richiede un argomento e restituisce un valore booleano; Settype richiede due argomenti, la variabile da convertire e il tipo in cui deve essere convertita, e restituisce una variabile nel tipo richiesto. 3.12 Php – Variabili e tipi di dato DATE e TIME altro dato di tipo complesso Php è nato su SO Unix, quindi utilizza il timestamp dello stesso per rappresentare date e ore una particolare data-ora è misurata in secondi a partire dal 01/01/1970 ed è quindi rappresentata da un numero (le date precedenti sono rappresentate da numeri negativi. I codici di formattazione sono moltissimi, li trovate sul sito ufficiale di Php. Sono riassunti nella slide successiva. 3.13 Php – Variabilie tipi di dato Date Codice Descrizione 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) mySql usa il proprio formato Datatime oltre al Timestamp, quindi salvare le date in esso è una questione distinta che và verificata con le regole del database. 4 Php – Operatori aritmetici, di confronto e logici Operatori aritmetici sono quelli classici e lavorano con numeri interi e in virgola mobile. Gli operandi che non sono di questo tipo vengono convertiti in uno di questi tipi e valutati. Operatori confronto ci permettono, effettuando dei confronti fra valori, di prendere delle decisioni, cioè di far svolgere al nostro codice determinate operazioni invece di altre. Operatori logici confrontano i risultati di due espressioni 4.1 Php – Operatori aritmetici + addizione - sottrazione * moltiplicazione / divisione % modulo (resto della divisione) Possiedono anche una versione di assegnazione in cui l’operando sinistro è anche la variabile in cui collocare il risultato: += -= *= /= %= 4.2 Php – Operatori di confronto Gli operatori confronto sono 7 e sono riportati nella tabella seguente: == uguale != Diverso (<>) === identico (cioè uguale e dello stesso tipo: ad es. per due variabili di tipo intero) > maggiore >= maggiore o uguale < minore <= minore o uguale 4.3 Php – Operatori di confronto Esempio di confronto tra numeri Nel confronto tra numeri non c'è nulla da spiegare a parte il terzo: Il risultato è falso perché nonostante le due variabili siano entrambe valorizzate con il valore 7, una è identificata di tipo INTERO e l'altra di tipo VIRGOLA MOBILE $a = 7; $b = 7.0; $c = 4; //assegniamo valori a tre variabili $a == $b; // vero $a == $c; // falso $a === $b; // falso, perché $a è intero mentre $b è float $a > $c; // vero $c >= $a; // falso $c < $a; // vero $c <= $b; // vero: 4.4 Php – Operatori di confronto Esempio di confronto tra stringhe In questo caso il confronto viene fatto basandosi sull’ordine alfabetico dei caratteri vale a dire che vengono considerati ‘minori’ i caratteri che ‘vengono prima’ nell’ordine alfabetico: ‘a’ è minore di ‘b’, ‘b’ è minore di ‘c’, … tutte le lettere minuscole sono ‘maggiori’ delle lettere maiuscole; tutte le lettere, maiuscole e minuscole, sono ‘maggiori’ delle cifre da 0 a 9. $a = 'Mario'; $b = 'Giorgio'; $c = 'Giovanni'; $d = 'antonio'; $e = '4 gatti'; $a < $b; // falso, la 'G' precede la 'M' $b < $c; // vero, la 'r' ('Gior') precede la 'v' ('Giov') $d > $a; // vero, la 'a' minuscola è 'maggiore' di qualsiasi lettera maiuscola $c > $e; // vero, ogni lettera è 'maggiore' di qualsiasi cifra 4.5 Php – Operatori logici Gli operatori logici sono 3 e sono riportati nella seguente tabella: Operatore Descrizione Or oppure || Se almeno una delle due espressioni è true, ritorna true altrimenti ritorna false And oppure && Se entrambe le espressioni sono vere, ritorna true altrimenti ritorna false Not oppure ! È l’operatore di negazione. Ritorna true quando l’espressione è falsa e false quando l'espressione è vera Ordine di applicazione degli operatori logici: Operatore logico 'And' Operatore logico 'Or' Not (!) può andare dovunque 4.6 Php – Operatori logici Esempi di uso degli operatori logici 10 > 8 And 7 < 6; // falso, perché la prima condizione è vera ma la seconda è falsa; 10 > 8 && 7 < 6 10 > 8 Or 7 < 6; // vero; 10 > 8 || / < 6 9 > 5 And 5 == 5.0; // vero, entrambe le condizioni sono vere; 9 > 5 And 5 === 5.0; // falso !9 > 5 // falso 5 Php – Strutture di controllo e cicli Strutture di controllo Strutture di controllo altro aspetto fondamentale della programmazione Rappresenta la possibilità di eseguire operazioni diverse, una o più volte, valutando determinate condizioni. 5.1 Php – Strutture di controllo e cicli Strutture di controllo L'istruzione If è una di questa e ci permette di eseguire o non eseguire certe porzioni di codice. La sua struttura completa è: If (<condizione>) { <codice> } [elseIf { } La presenza di parentesi [ … ] indica che il codice è opzionale … else { }] Appena è verificata una delle condizioni, se ne esiste più di una, esce dall'If 5.2 Php – Strutture di controllo e cicli Strutture di controllo Operatore ternario è una forma sintetica di If … else, permette di risparmiare codice $risultato = (condizione da verificare) ? ‘valore per true’ : ‘valore per false’; 5.3 Php – Strutture di controllo e cicli Strutture di controllo L'istruzione switch può essere utilizzata come alternativa alla if per selezionare opzioni da un elenco di possibilità quando sono molte rende il codice più compatto switch (<condizione>) { case (<valore 1>): <codice> [break; o exit / die;] case (<valore 2>): <codice> [break; o exit / die;] ...................... default: <codice>; [break; o exit / die;] } 5.4 Php – Strutture di controllo e cicli Strutture di controllo L’istruzione switch nel linguaggio Php, al contrario di altri linguaggi, può esaminare anche etichette non numeriche Con switch il codice prosegue anche dopo che la condizione è verificata per uscire dal ciclo usare l’istruzione break che interrompe il ciclo e prosegue nell’esecuzione di ciò che è scritto nella pagina .php Nel caso si presentasse una condizione in cui si deve ignorare tutto il codice scritto dopo switch , usare le istruzioni exit oppure die che interrompono completamente l’esecuzione della pagina, qualunque cosa scritta dopo il ciclo. 5.5 Php – Strutture di controllo e cicli Cicli Presenti in tutti i linguaggi di programmazione, ci permettono di eseguire più volte la stessa operazione su i dati con condizioni ben precise. Sono di 3 tipi: Ciclo WHILE Ciclo DO WHILE (variante del precedente) Ciclo FOR 5.6 Php – Strutture di controllo e cicli Cicli WHILE WHILE Nella sua forma generale è: $variabile=inizializzazione_valore_variabile; While ($variabile "operatore_di_confronto" valore) { <codice> incremento_valore_variabile } È una specie di If ripetuto più volte Il ciclo non ci permette di definire l'intervallo di validità della variabile quindi Il valore viene inizializzato prima del ciclo; Il valore viene incrementato durante il ciclo. Il ciclo termina quando la condizione fra parentesi () diventa false Il ciclo potrebbe non essere mai eseguito se la condizione è false fin dall'inizio 5.7 Php – Strutture di controllo e cicli Cicli DO … WHILE DO … WHILE Nella sua forma generale è: $variabile=inizializzazione_valore_variabile; do { <codice> } while ($variabile "operatore_di_confronto" valore) Si differenzia dal precedente perché, anche se non è mai verificata la condizione tra parentesi, mi fa vedere il valore che assume la variabile al termine del ciclo. 5.0 Php – Strutture di controllo e cicli Cicli FOR È quello più usato e la sua forma generica è la seguente: codice …. for (valore_iniziale; valore_finale; incremento/decremento) { risultato } codice … For parola chiave ( …. ) istruzioni per definire il ciclo (step) la prima è eseguita una sola volta; la terza ad ogni step la seconda è valutata prima di ogni step. Quando risulta false, il ciclo termina e il controllo passa all'istruzione immediatamente dopo il ciclo for { …. } istruzioni ripetute per ogni step 5.9 Php – Strutture di controllo e cicli Cicli FOR Attenzione a non generare un ciclo infinito (loop), in cui il ciclo non raggiunge mai una via d’uscita. In questo caso, infatti, lo script rieseguirebbe il nostro ciclo all’infinito. In alcuni casi, un errore di questo genere potrebbe costringerci a forzare la chiusura del programma o addirittura a eseguire il restart del Server Web anche se in PhP, questo di solito non succede, in quanto gli script PHP hanno un limite di tempo per la loro esecuzione, oltre il quale si arrestano (30 sec) e che si imposta nel file php.ini. 6 Php – Array Array Abbiamo già introdotto gli array come "tipo di dato complesso che contiene più valori di un'unica variabile" Gli array sono di 2 tipi: Numerico si accede al valore (elemento) attraverso l'indice o posizione (da 0 a N-1 se N è il numero di elementi dell'array) dell'elemento stesso ; associativi. oltre che attraverso l'indice, si può accedere al valore (elemento) attraverso una "chiave" associata all'elemento stesso. Possiamo esaminare il contenuto dei dati in diversi modi come esposto nell'esempio citato. In particolare introduciamo un nuovo tipo di ciclo ideato apposta per gli array: FOREACH Foreach (array as nome_variabile) { codice } 7 Php – Funzioni Definizione Una funzione è un insieme di istruzioni che hanno lo scopo di eseguire determinate operazioni. La praticità delle funzioni sta nel fatto che ci consentono di non dover riscrivere tutto il codice ogni volta che abbiamo la necessità di eseguire quelle operazioni comuni: ci basta infatti richiamare l'apposita funzione, fornendole eventuali parametri per la sua esecuzione. Le funzioni possono essere interne a Php oppure definite dall'utente. In entrambi i casi, il modo di definirle e utilizzarle è lo stesso: function nome_funzione([p1,p2,…,pN]) { <codice> return $risultato } nome_funzione ([p1,p2,…,pN]) se non ritorna alcun valore $variabile = nome_funzione([p1,p2,…,pN]) se ritorna un valore; dove p1,…, pN sono i parametri. Il fatto che siano presentati tra parentesi indica che sono opzionali 7.1 Php – Funzioni Funzioni definite dall'utente I parametri scritti fra "parentesi tonde" sono le variabili passate alla funzione: possono essere passati per valore (non possono essere cambiati) o per riferimento (possono essere cambiati) È possibile assegnare un valore predefinito ad un parametro di modo che, in assenza di valore, venga utilizzato questo. È possibile passare anche un array come parametro. Le funzioni possono eseguire solo delle operazioni oppure restituire un valore in questo caso bisogna inserire l’istruzione return; 7.2 Php – Funzioni Funzioni definite dall'utente Porzioni di codice scritte dall'utente per: utilizzarle in più punti del programma; per rendere il codice più leggibile e quindi manutenibile il modo migliore è usare l'istruzione include Possono essere chiamate con una qualsiasi combinazione di caratteri alfanumerici e l’undescore ma non con un numero; È sconsigliato l’uso di caratteri speciali perché creano problemi con alcuni S.O. 7.3 Php – Funzioni Funzioni definite dall'utente È possibile realizzare funzioni che non mostrano solo il risultato a video a seconda dell'input ma eseguono una o più azioni e ne mostrano il risultato. Esempio di funzione (a 2 parametri) che ritorna un risultato: function nome_funzione(parametro1, parametro2) { <codice> return $variabile; } Per richiamarla scrivo: $parametro1=valore1; $parametro2=valore2; $risultato=nome_funzione (parametro1,parametro2); echo $risultato; 7.4 Php – Funzioni Include e Require Sono 2 istruzioni che permettono di includere file esterni, ovvero copiare il loro contenuto completo dentro il file che lo richiede Sintassi: include “percorso_file/nome_file“; oppure include (‘‘percorso_file/nome_file“); require “percorso_file/nome_file“; oppure require (‘‘percorso_file/nome_file“); I due comandi producono il medesimo risultato. Unica differenza consiste nella gestione di eventuali errori: nel caso in cui il file da includere non si esiste, include() genererà un errore di tipo warning (non blocca l’esecuzione dello script) mentre require() genererà un errore di tipo fatal error (blocca di fatto l'esecuzione dello script). E' da segnalare l'esistenza di due varianti, include_once e require_once. La loro funzione e sintassi è identica alle precedenti con l'unica differenza che prima di includere il file verificano che questo non sia già stato precedentemente incluso nella pagina: in questo caso non fanno nulla. 7.5 Php – Funzioni Funzioni interne generiche Sono funzioni che agiscono sulle variabili in generale per verificarne un particolare attributo (tipicamente tipo, stato e valore) ritornando True o False a seconda del caso Is_numeric($valore) Is_bool($valore) Is_null($valore) Meritano una menzione particolare empty ($valore) Isset($valore) Per settare un tipo Settype($valore,tipo) dove tipo è passato come stringa tra apici o doppie virgolette 7.6 Php – Funzioni Funzioni interne per stringhe – parte 1 Sono la classe di funzioni più numerose interne a PhP ed altre ancora possono essere costruite dall'utente con una loro combinazione. Vediamo le più usate, rimandando alla documentazione in linea (www.php.net) per tutte le altre strlen() restituisce la lunghezza di una stringa, spazi compresi; trim(), ltrim(), rtrim() rispettivamente eliminano spazi vuoti a destra e sinistra, solo sinistra e solo a destra; strlen() applicata prima o dopo di essa produce risultati diversi; strtolower(), strtoupper() trasforma una stringa rispettivamente tutto in minuscolo o tutto in maiuscolo; substr() estrae una stringa da un'altra stringa; strpos() trova la posizione di una stringa all'interno di un'altra ritorna un numero str_replace() sostituisce una stringa dentro un'altra o anche un carattere dentro un altro 7.7 Php – Funzioni Funzioni interne per stringhe – parte 2 htmlspecialchars () converte caratteri speciali <,>,& e " nell'equivalente HTML; addslashes/stripslashes sostituiscono rispettivamente "l'apostrofo" con "\'" e viceversa. Molto utile nel caso delle query quando sono presneti stringhe di testo con apostrofi all’interno (esempio L’Aquila); explode() trasforma una stringa in un array. Accetta due parametri obbligatori: il carattere separatore nella stringa; la stringa; Possiede la sua inversa, implode(), come funzione degli array. 7.8 Php – Funzioni Funzioni interne per i Numeri – parte 1 Per manipolare i numeri occorre anzitutto assicurarci che questi siano tali. tre sono le funzioni di controllo (ritornano true o false): is_numeric(): accetta come parametro una variabile di qualsiasi tipo e verifica se è un numero (intero, decimale o negativo). può essere utilizzata anche con stringhe contenenti solo numeri; is_int(): accetta come parametro una variabile di qualsiasi tipo e verifica se è un numero intero. può essere utilizzata anche con stringhe contenenti solo numeri; is_float(): accetta come parametro una variabile di qualsiasi tipo e verifica se è un numero con decimali. Nel caso di un numero interno, tale funzione ritorna false. 7.9 Php – Funzioni Funzioni interne per i Numeri – parte 2 intval(): fondamentale soprattutto nell'interazione con i database, trasforma qualsiasi tipo di variabile in un intero se si tratta di un numero decimale lo arrotonda a intero; se si tratta di un numero negativo lo trasforma in positivo; se si tratta di altro lo trasforma in 0 (zero). È utilizzata soprattutto nell'ambito delle query su MySql se occorre eseguire una query su un campo numerico e di tipo intero di MySql, tale funzione ci garantisce che il parametro immesso nella query sarà effettivamente un intero. max() e min(): restituiscono un massimo e un minimo di una serie di valori numerici contenuti dentro variabili singole o array. Le stringhe coinvolte in tale funzioni assumeranno come valore 0 (zero). 7.10 Php – Funzioni Funzioni interne per i Numeri – parte 3 rand(): genera numeri casuali tra val1 e val2; ceil(), floor(), round(): arrotondamento dei numeri in virgola mobili in interi. ceil() arrotonda per eccesso; floor() arrotonda per difetto; round() per difetto o per eccesso a seconda delle cifre scartate. Possiede 3 parametri di cui: il primo è obbligatorio e rappresenta il numero da arrotondare; il secondo è facoltativo e rappresenta il numero di cifre da mantenere dopo la virgola (default = 0); il terzo è facoltativo e gestisce l'arrotondamento dell'ultima cifra nel caso questa sia pari a 5 il valore è espresso tramite delle costanti (PHP_ROUND_HALF_UP e PHP_ROUND_HALF_DOWN) 7.11 Php – Funzioni Funzioni interne per i Numeri – parte 4 number_format() formatta un numero e restituisce una stringa che non è più utile per operazioni matematiche in pratica il suo uso è solo estetico, di stampa a video. Accetta 4 parametri ma solo a coppie di due (2): La prima coppia indica il numero da formattare e i numero di decimali (omesso corrisponde a nessun decimale e la stringa risultante rappresenta un numero intero); Il terzo indica il separatore tra parte intera e decimale (default = il punto); Il quarto il separatore delle migliaia (default = la virgola) 7.12 Php – Funzioni Funzioni interne per Array Visto che abbiamo appena parlato di Array, cominciamo con esse. count(array) ritorna il numero di elementi di un array; array_reverse(array) inverte gli elementi di un array. Ha un secondo parametro di tipo booleano: se vogliamo mantenere l'associazione originale chiave-valore dobbiamo impostarlo su true sort() ordina in maniera crescente (array semplici); rsort() ordina in maniera decrescente (array semplici); ksort() come sort() ma secondo le chiavi (array associativi); krsort() come rsort() ma secondo le chiavi (array associativi); asort() come sort() ma secondo i valori (array associativi); arsort() come rsort() ma secondo i valori (array associativi); array_search() cerca un valore in un array, se lo trova mostra la chiave altrimenti ritorna False; in_array() cerca un valore in un array, se lo trova ritorna True altrimenti False end() punta all'ultimo elemento dell'array implode() trasforma un array in un stringa 7.13 Php – Funzioni Funzioni interne per Date time() restituisce la data in formato unix timestamp. È un numero intero rappresentante i secondi intercorsi dal 1 gennaio 1970 al momento attuale. Valori precedenti sono espressi come numeri negativi. date() restituisce la data nel formato desiderato e, quindi, è impiegata, prevalentemente, solo ai fini di visualizzazione della data. Accetta due parametri: il primo è una stringa (il formato di visualizzazione); il secondo, opzionale, è il timestamp (default = timestamp attuale la data attuale); mktime(par1,par2,par3,par4,par5,par6) (dove da par1 a par6 sono rispettivamente ore, minuti, secondi, giorno, mese e anno. L'assenza di uno di questi genera errore) serve ad impostare il timestamp di una data passata o futura. 8 Php – Accesso ai file (parte 1) Php, dalla versione 5, offre la possibilità di accedere ai file esterni. Il primo gruppo di istruzioni permette la manipolazione dei file file_exists(nome_file) verifica se il file esiste ritorna True/False file_get_contents(nome_file) carica un file in una stringa e ne fa l’output a video. file(nome_file) legge rigo per rigo di un file restituendo un array composto da tanti elementi quante sono le righe del file in oggetto; filesize(nome_file) ritorna il numero di caratteri del file; copy(file_origine,file_destinazione) copia un file in un altro file ritorna True/False; rename(file_origine, file_destinazione) rinomina un file ritorna True/False; unlink(nome_file) cancella il file ritorna True/False. 8.1 Php – Accesso ai file (parte 2) Il secondo gruppo di istruzioni permette la scrittura/lettura dei file fopen ($filename, $mode, [,]) apre un file con diverse modalità. Se l’apertura riesce restituisce l’handle del file (un numero intero > 0 diverso per ogni file che si apre) altrimenti restituisce False: r apre il file in sola lettura. Se il file non esiste, dà un errore di tipo Warning; r+ apre il file in lettura e scrittura . Se il file non esiste, dà un errore di tipo Warning; w apre il file in sola scrittura cancellandone il contenuto. Se il file non esiste, tenta di crearlo; w+ apre il lettura e scrittura cancellandone il contenuto esistente. Se il file non esiste, tenta di crearlo. a apre il file modalità scrittura di tipo append . Se il file non esiste tenta di crearlo; a+ apre il file in modalità lettura e scrittura di tipo append . Se il file non esiste tenta di crearlo fwrite ($filename, $testo_da_scrivere [, $lunghezza_testo_da_scrivere) scrive una stringa in un file. Restituisce il numero di byte scritti oppure False generando un errore di tipo Warning. fclose($file) chiude il file chiudere sempre i file per non lasciarli appesi in memoria 9 Php – I FORM Sono presenti in tutti i siti Web In genere interagiscono con l'utente attraverso l'uso di controlli caricati dinamicamente da codice Php che attinge i dati da un qualsiasi contenitore (ad esempio un database). Tre cose dobbiamo vedere: i controlli, il loro caricamento dinamico e l'invio dei dati immessi all'utente o sotto forma di pagina di riepilogo oppure via mail Sono delimitati dal TAG <form> … </form> che possiede 2 attributi fondamentali che ne caratterizzano il comportamento: Action una volta riempito il form con i dati, quale pagina li dovrà elaborare e farne l'uso per cui il form è stato progettato ? Method con quale metodo devono essere spediti i dati da una pagina all'altra ? 10 Php – Le variabili $_GET, $_POST Php fornisce 4 variabili globali di sistema per il passaggio dei dati da una pagina all'altra oppure per memorizzare informazioni importanti per l'utente: $_GET spedisce in chiaro le informazioni e queste si possono leggere nella URL della pagina. È consigliato solo nel caso di informazioni non sensibili. Questa tecnica è usata nei link per inviare informazioni anche complesse da una pagina all'altra: si chiama querystring.. Le informazioni viaggiano associate ad una variabile nella forma var1=val1; Più coppie di informazioni sono separate dal simbolo & var1=val1&var2=val2&…. $_POST è quella più usata con i FORM Html. È più discreta, i valori viaggiano nascosti alla vista degli utenti. Il ciclo di vita di queste variabili è limitato alla pagina .php: se si passa in una pagina dove non sono richiamate, vanno perse. 10.1 Php – Le variabili $_COOKIE e $_SESSION $_COOKIE scrive le informazioni in un file. Il ciclo di vita di questa variabile è stabilito da chi scrive il codice, ma l'utente può anche ridurlo a 0 cancellando periodicamente i cookies tramite qualche opzione del browser . setcookie(nome_cookie, valore_assegnato_cookie, durata_cookie) l’ultimo parametro rappresenta un caso di utilizzo del timestamp tramite la funzione time(). Per i cookies in Firefox guardare in Strumenti Opzioni Privacy sezione Cronologia $_SESSION a differenza dei cookie, le sessioni non scrivono nulla sul computer del utente, ma operano sul server web creando degli specifici files dove vengono salvati alcuni dati importanti relativamente alla sessione di navigazione del nostro utente; una volta che la sessione è terminata il file con i dati della sessione stessa verrà eliminato; una sessione termina nel momento in cui l'utente chiude il browser (o in un diverso momento eventualmente specificato nelle impostazioni del server o nel codice dell'applicazione). session_star(); inizializza la sessione (va richiamata in tutte le pagine) $_SESSION[‘nome_variabile_di_sessione’]; definisco la variabile di sessione unset($_SESSION[‘nome_variabile_di_sessione’); cancello la variabile di sessione session_unset(); cancello tutte le variabili di sessione session_destroy(); distruggo tutte le sessioni rimaste appese, se esistono 11 Php e MySql In questa sezione conclusiva vedremo insieme come è possibile far interagire le nostre pagine PHP con i database MySql. Ricordiamo che PHP è in grado di connettersi a quasi tutti database server presenti sul mercato (PostgreSql, Oracle, Microsoft Access & Microsoft Sql Server, Sybase, ...) anche se MySql è quello con cui interagisce nativamente. Tre librerie sono a disposizione: mysql_based la prima realizzata, utilizzata nella programmazione procedurale (utilizzabile solo con MySql) mysqli_based la seconda uscita, utilizzata nella programmazione ad oggetti ma, per alcune sue funzionalità, anche in quella procedurale (utilizzabile solo con MySql) PDO (Php Data Object) l’ultima uscita (dalla versione di Php 5.1 in poi) e utilizzabile solo con la programmazione orientata agli oggetti ma con tutti i database. Nel corso base vedremo solo quella mysql_based 11.1 Php e MySql Le istruzioni per far lavorare Php con MySql sono in tutto 4: mysql_connect per connettersi al server di database mysql_select _db per connettersi al database prescelto mysql_query per eseguire query di selezione, di inserimento, di aggiornamento e di cancellazione. mysql_query possiede dei metodi (azioni) per gestire le query di selezione mysql_close per chiudere la connessione al server. È importante acquisire una prima regola fondamentale: non lasciare mai connessioni aperte. Una connessione si apre (idealmente) in testa alla pagina e si chiude (idealmente) in fondo alla pagina, quando non serve più. Le prime due istruzioni, dato il loro ripetersi in ogni pagina .php del sito, conviene inserirle in un file esterno da richiamare tramite l’istruzione include (‘nome_file’); 11.2 Php e MySql: mysql_connect Sintassi $variabile = mysql_connect(server, utente, password); server nome o indirizzo IP del server di database. In locale è ‘localhost’ oppure 127.0.0.1 utente nome dell’utente abilitato nel server di database. Il default è ‘stringa vuota’ o root; password password dell’utente. Il default è ‘stringa vuota’ Esempio di connessione: $con_db = mysql_connect(‘127.0.0.1’, ‘root’, ‘’) or die (‘Errore nella connessione al server’); 11.3 Php e MySql: mysql_select_db Sintassi $variabile = mysql_select_db(database, server); database nome del database a cui connettersi; server nome della connessione al server. Esempio di selezione (connessione) ad un database: $con_db = mysql_connect(‘127.0.0.1’, ‘root’, ‘’) or die (‘Errore nella connessione al server’); $sel_db = mysql_select_db(‘videoteca’, $con_db); 11.4 Php e MySql: esempio di file da includere Nome del file connessione.php Listato: <?php $a_capo = ‘<br />\n’; $host=‘254.197.31.44'; $database=‘prova'; $username=‘pippo'; $password=‘pluto'; // Connessione al server $con_db = mysql_connect($host,$username,$password) or die ("Server $host non trovato $a_capo"); // Seleziono il DB $sel_db = mysql_select_db($database,$con_db) or die ("Impossibile accedere al database $database $a_capo"); ?> 11.5 Php e MySql: mysql_close Sintassi mysql_close(server); server nome della connessione al server. Esempio di sconnessione ad un server di database: mysql_close($con_db); 11.6 Php e MySql: esecuzione di query (parte 1) Sintassi $variabile = mysql_query("sintassi Sql", "server"); Sintassi Sql SELECT … FROM … INNER JOIN oppure INSERT INTO tabella …. Oppure UPDATE tabella SET …… server nome della connessione al server. Esempio di query di selezione: $mio_sql = "SELECT * FROM nome_tabella WHERE campoX = valoreX"; $ris = mysql_query($mio_sql, con_db) or die ("Errore nella query"); A questo punto mysql_query possiede dei metodi (azioni) per esaminare il risultato della query e mostrare i dati a video 11.7 Php e MySql: query di selezione Esempio di query di selezione: $mio_sql = "SELECT * FROM nome_tabella […]; $ris = mysql_query($mio_sql, con_db) or die ("Errore nella query"); 4 metodi per esaminare il risultato della query: mysql_num_rows($risultato_query); ritorna il numero di record della query; mysql_fetch_row() recupera il contenuto dei records trovati restituendo una array semplice contenente i valori di ogni campo che possiamo poi richiamare specificando il relativo indice nella matrice dell’array; mysql_fetch_assoc() alternativo al precedente restituisce una array contenente i valori di ogni campo riscontrato nel recordset che potremo poi richiamare specificando il relativo nome del campo nella matrice dell’array mysql_fetch_array() alternativo ai due precedenti, supporta indistintamente entrambe le tecniche di chiamata è quello più usato per la sua flessibilità Per richiamare i dati si usa il ciclo While { «condizione»} dove mysql_fetch_X include già l’incremento della variabile. 11.8 Php e MySql: query di inserimento, modifica e cancellazione Conosciute anche con il nome di QUERY DI COMANDO Sintassi: $variabile = mysql_query("sintassi Sql", "server"); sintassi Sql INSERT INTO … oppure UPDATE … oppure DELETE server nome della connessione al server. Esempio di query di comando: $mio_sql = "UPDATE nome_tabella SET campo1 = valore1 "; $ris = mysql_query($mio_sql, con_db) or die ("Errore nella query"); 12.1 Php – Upload di file (parte 1) Altra operazione molto comune è l'upload dei file. È bene tenere presente alcuni valori: upload_max_filesize 2Mb (è un parametro di php.ini); impostare nel TAG <form> l'attributo enctype = “multipart/form-data” tramite la variabile globale $_FILES, sono accessibili informazioni sul file inviato: $_FILES["userfile"]["name"]: nome del file caricato; $_FILES[" userfile "]["type"]: tipo di file caricato (in formato MIME type); $_FILES[" userfile "]["size"]: dimensione del file caricato; $_FILES[" userfile "]["tmp_name"]: percorso e il nome del file temporaneo sul server; $_FILES[" userfile "]["error"]: un codice numerico compreso fra 0 e 8 indicante il tipo di errore che si è verificato, pari a 0 in assenza di errore. dove « userfile » è il nome del controllo che esegue l’upload. Nota: il file transita prima dentro la cartella temporanea del server (nel nostro caso www/tmp e poi spostato dove decidiamo noi) 12.1 Php – Upload di file (parte 2) Il controllo sull’upload nella cartella www/tmp viene fatto dalla funzione is_uploaded_file ritorna un valore booleano a seconda dell’esito dell’operazione Infine il file viene spostato dalla cartella www/tmp in quella finale usando la funzione move_uploaded_file(tmp_name, final_name) ritorna un valore booleano a seconda dell’esito dell’upload Errori possibili Possiamo e dobbiamo inoltre controllare che la cartella dove vogliamo fare l'upload esiste (is_dir) e possieda i diritti di scrittura (is_writable) su Windows Xp, in locale, da un errore del tipo Strict Standars mentre funziona perfettamente online. su Windows 7 funziona perfettamente sia in locale che online. 12.1 Php – Upload di file (parte 3) È possibile utilizzare direttamente le proprietà dell’Ftp (File Transfert Protocol) per effettuare l’upload di un file con le funzioni: ftp_connect(host[,port,timeout]) dove host è il nome del dominio (www.miodominio.ext) oppure l’IP del dominio (aaa.bbb.ccc.ddd), port è la porta usata (default = 21) e timeout è il tempo massimo per eseguire l’operazione (default = 90 secondi) ritorna un valore True o False viene associato ad una variabile (ad esempio $my_connection = ftp_connect(…,…,…);) ftp_login(ftp_connect, username, password) dove ftp_connect è il parametro precedente, username e password forniscono l’account di accesso ritorna un valore True o False viene associato ad una variabile (ad esempio $my_login = ftp_login(…,…,…);) ftp_put(ftp_connect,remote_file,local_file,mode[,startpos]) dove ftp_connect è il paramentro precedente, renote_file indica cartella e nome del file in remoto, local_file indica il file che voglio caricare, mode indica se il file è binario o ascii e startpos, opzionale, indica da che punto (byte o carattere) iniziare il caricamento (0 = default) ritorna True o False viene associata ad una variabile (ad esempio $upload = ftp_put(…)): 12.2 Php – Paginazione dei risultati (1) Due approcci possibili: usando l’istruzione Limit offset, record presente nel linguaggio SQL oppure non usandola. La prima prevede 2 query sul database la prima per calcolare il totale dei record senza il Limit la seconda per estrarre i record interessati ovviamente, a parte il Limit, le due query devono essere identiche anche nelle condizioni. 12.2 Php – Paginazione dei risultati (2) Prima query mi dà il totale dei record ($tot_rec) SELECT COUNT(campoX) FROM tabella [condizione1, condizione2, .., condizioneN ] Numero totale di record $tot_rec Record per pagina $pag_rec = 10 (il secondo parametro di Limit) Totale pagine $tot_pag = ceil ($tot_rec / $pag_rec) mi interessano solo numeri interi Pagina corrente $current_pag. Presupponendo che mi sto muovendo tra le pagine usando funzione di sistema $_GET[‘nome_variabile’] If ($_GET[‘pag’]) {$current_pag = $_GET[‘pag’];} else {$current_pag = 1;} oppure con l’operatore ternario $current_pag = ($_GET[‘pag’]) ? $_GET[‘pag’] : 1; Il primo parametro di LIMIT (offset = il record da cui partire) è $primo = ($current_pag – 1) * $pag_rec; 12.2 Php – Paginazione dei risultati (3) Seconda query estraggo i record da $primo a $pag_rec $mio_sql = SELECT * FROM tabella [condizione1, condizione2, …, condizioneN ] LIMIT $primo, $pag_rec // ciclo While { $ris = mysql_fetch_assoc($mio_sql, $mia_connessione); echo … record 1 echo … record 2 … echo … record 10 } 12.2 Php – Paginazione dei risultati (4) // paginazione dei record $paginazione = "[" for($i = 1; $i <= $tot_pag; $i++) { if ($i == $current_pag) { $paginazione = $paginazione . $i . " "; } else { $paginazione .= "<a href=pippo.php"?page=$i">$i</a>"; } } $paginazione = $paginazione . "]" 12.3 Php – Inviare mail PHP mette a disposizione la funzione mail(). È possibile la codifica MIME quindi permette quindi l'invio di messaggi anche molto complessi, con allegati, immagini ecc... È una funzione di tipo booleano se l'invio ha successo ritorna true altrimenti ritorna false Sintassi della funzione: mail (string $to, string $subject, string $message [, string $additional_headers, string $additional_parameters]) nei $to, utenti multipli sono separati da virgola; negli $additional_headers sono contenuti From, CC e BCC, MIME, TIPO, CODIFICA e SET CARATTERI separati dal CRLF (in Php è \r\n); negli $additional_parameters sono contenuti altri parametri meno importanti Esempi nella cartella Email prova-mail.php invio mail in forma semplice mail-testo.php invio mail in tramite un form 12.4 Php – Criptare i dati PHP mette a disposizione due funzioni per criptare i dati md5 (string, raw) string è la stringa di testo da criptare raw è il modo di criptare valore booleano default = False cripta in 32 caratteri formato esadecimale mentre True cripta in 16 caratteri formato binario INSERT INTO tabella (campo_da_criptare) VALUES (md5(stringa_da_criptare)); SELECT campo1, …, campoN FROM tabella WHERE campo_criptato = md5(stringa_da_criptare) sha1 string è la stringa di testo da criptare raw è il modo di criptare valore booleano default = False cripta in 40 caratteri formato esadecimale mentre True cripta in 20 caratteri formato binario INSERT INTO tabella (campo_da_criptare) VALUES (md5(stringa_da_criptare)); SELECT campo1, …, md5(stringa_da_criptare) campoN FROM tabella WHERE campo_criptato =