PHP Il linguaggio HTML e i linguaggi di scripting come Javascript impongono alcune limitazioni alle applicazioni che si possono realizzare : per esempio non è possibile costruire un sito Web che consenta all’utente di accedere ai dati contenuti in un database. Questi tipi di linguaggi svolgono quindi la loro funzione dal lato client di un’architettura Web (client-side). Un’architettura Web è composta da due parti che interagiscono fra di loro : Il lato client (client-side) Il lato server (server-side) Una pagina Web scritta usando Html e/o Javascript , rappresenta un file di testo che è memorizzato in una particolare cartella sui server. Quando il browser Web richiede una pagina, cioè quando l’utente scrive l’indirizzo o attiva un link, viene inviata una richiesta al server Web. Questi la interpreta ricavando il nome del file che è stato richiesto, recupera il file dal proprio disco e lo restituisce senza modifiche al client. Il browser Web riceve una copia del file e la visualizza, interpretando i tag html e considerando le parti di codice scritte in Javascript , eseguendole al momento opportuno. Per poter interagire con i dati che si trovano sul server remoto occorrono strumenti server-side. PHP è un linguaggio di scripting server side HTML embedded ovvero è un linguaggio di programmazione con il quale si possono scrivere programmi (script) capaci di girare sul server ( cioè programmi interpretati dal server) integrati all’interno di un codice HTML. Un linguaggio di questo tipo si è reso necessario in quanto l’HTML ( senza Javascript, senza CSS) consente esclusivamente di realizzare pagine statiche e , integrato con CSS e Javascript , al massimo pagine che presentano un certo grado di interattività per l’utente. L’esigenza attuale è invece quella di creare pagine dinamiche il cui contenuto non è prevedibile né previsto a priori, ma può essere anche modificato dall’utente o prelevato da informazioni presenti sul server (tipicamente in un database). Si vuole, cioè, non creare semplici siti Web, ma vere e proprie applicazioni Web (esempi : motore di ricerca, carrello della spesa, chat, web forum, registrazione di un utente, ecc). Esistono altri linguaggi che realizzano le stesse funzionalità, ma PHP si fa preferire perché è open source e free, meno complesso delle altre soluzioni (ASP,PERL), si interfaccia con i DBMS più importanti (MYsql) e si integra con altre componenti Microsoft quali oggetti creati con Flash. PHP è un linguaggio di programmazione che viene interpretato dal Web server tramite l’aggiunta di un modulo esterno (l’interprete PHP). Quando il client richiede una pagina con estensione .php (che conterrà HTML + PHP) il server Web non spedisce al browser direttamente il file, ma prima interpreta le istruzione scritte in PHP, recupera gli eventuali dati richiesti prelevandoli, ad esempio, da un database del server e in seguito restituisce una pagina Web visualizzabile dal browser. Poiché questa pagina è costruita al momento della richiesta, si chiama pagina dinamica oppure pagina Web lato server. PHP (Hypertext Preprocessor)è un software che può essere liberamente installato e utilizzato. (www.php.net). Esistono versioni per Windows e Linux e per i più diffusi server Web (Apache e Microsoft IIS). In fase si sviluppo è importante disporre di ambienti integrati che forniscono un Web server locale Apache con PhP e un server Mysql per i database (Easyphp … www.easyphp.org ). Di questi software esiste anche una versione portable che può essere attivata direttamente da una chiavetta Usb. In questo modo il programmatore PHP può collaudare le pagine Web utilizzando un Web server di sviluppo sul proprio computer locale. 1 Struttura di un programma PHP Il codice PHP deve essere racchiuso fra il tag <?php e il tag ?> Ogni istruzione deve essere chiusa dal ; PHP è case sensitive. I commenti : una sola riga iniziare la riga con Più righe iniziare con // o # /* e chiudere con */ Dopo aver creato il file di testo lo si salva con estensione .php. Il linguaggio Php consente di includere piccoli programmi (script) all’interno di una pagina web dove sono presenti i marcatori HTML. Il codice contenuto nella pagina Web viene interpretato dal server Web per costruire dinamicamente la pagina da spedire al browser dell’utente. Quando viene richiesta una pagina con estensione .php il comportamento del server web è il seguente : Legge il file di testo riga per riga Se trova i marcatori Html li spedisce al browser Se trova i blocchi di codice php ne esegue l’interpretazione e restituisce i risultati al browser che quindi non riceve il codice php ma solo il risultato dello script sotto forma di pagina web dinamica, che contiene il codice con i tag del linguaggio Html. I principali vantaggi di una pagina php sono : Rende più veloce la creazione e lo sviluppo di applicazioni web Facilita la fase di manutenzione e aggiornamento delle applicazioni I suoi script sono compatibili con diverse piattaforme Include la possibilità di accedere a diversi tipi di database Appartiene alla categoria del software libero e viene continuamente aggiornato 2 ESEMPIO Creiamo un file numeri casuali.php <html> <head><title>Numeri casuali </title></head> <body> <h1>Numeri generate </h1> <?php //genera tre numeri casuali da 1 a 90 $num1=rand(1,90); $num2=rand(1,90); $num3=rand(1,90); echo "$num1"."<br>"; echo "$num2"."<br>"; echo "$num3"."<br>"; ?> </body> </html> La funzione echo invia una stringa al browser e il carattere punto è il carattere di concatenazione. Quando il browser attiva il collegamento con numeri casuali.php , il server web legge il file ed invia la browser il contenuto. Nel momento in cui capisce che è presente uno script in php, richiama l’interprete ed esegue il codice. Per effetto di queste azioni il browser visualizza : Se si clicca sul pulsante Aggiorna del browswer vengono visualizzati altri valori cioè la oagina Web è dinamica perché generata in modo diverso ogni volta che riceve una richiesta dal browser. E’ possibile sapere cosa viene restituito al browser per effetto dell’interazione con l’interprete PHP visualizzando il codice Html della pagina (ad esempio con Internet Explorer – visualizza – origine; con Mozilla – sviluppo web – sorgente pagina) 3 Variabili E’ consentita, ma non obbligatoria, la definizione delle variabili utilizzate nel programma. Le variabili iniziano con il simbolo $ seguito da un nome che deve iniziare con una lettera dell’alfabeto, seguito da una qualsiasi combinazione di lettere, numeri e _. Se una variabile non viene dichiarata, PHP attribuisce ad essa il tipo in dipendenza del valore che le viene assegnato. Es. $nome = “Ugo” è una variabile di tipo stringa ( si possono racchiudere tra apici singoli o doppi); $eta = 18 è una variabile di tipo intero(massimo 2 miliardi); $media = 6.5 è una variabile di tipo double , $ok = false è una variabile di tipo boolean( e questi sono anche i quattro tipi di dati trattati da PHP) Inoltre PHP è in grado di effettuare automatiche conversione di tipo : se una variabile intera è coinvolta in una concatenazione di stringhe, viene trasformata in stringa e , viceversa, se una variabile stringa viene coinvolta in un’operazione matematica viene trasformata in numero. (se non è un numero lo sostituisce con zero) Le variabili possono essere definite internamente al codice o passate dall’esterno attraverso form o come parametri nel richiamo della pagina (vedremo meglio più avanti) Operatori * / %(modulo = mod Pascal) + - (in ordine di priorità) Logici : ! (not) &&(and) ||(or) (in ordine di priorità) Alfanumerici : . (concatenazione) ; Es : “Ciao”.$utente.” come stai?” Matematici : Si può tuttavia scrivere anche “Ciao $utente come stai?” Relazionali : < > == (uguale) <= >= != (diverso) Esiste anche la possibilità di abbreviare gli operatori. Vediamo alcuni esempi $i++ $i = $i+1 $i-- $i = $i-1 $a* = $b $a = $a*$b $a+=3 $a=$a+3 $a.=’Ciao’ Al contenuto della variabile a (stringa) concatena la parola Ciao Array : Un’array in Php è una variabile che può contenere un insieme di valori identificati da un indice. Non vengono dichiarati ma creati mediante assegnazioni. Se si usa come indice un numero di parla di array numerici, mentre se si usa come indice una stringa si parla di array associativi. Per accedere al valore di un elemento di un array si utilizza il nome della variabile seguito dall’indice dell’elemento racchiuso tra parentesi quadre. Negli array Php i dati possono anche non essere omogenei. Negli array numerici l’indice parte da 0. Negli array associativi l’indice è una stringa racchiusa tra doppi apici. (assomiglia alla struttura di record) Esempio : $voti = array(8.0,6.5,5.5,7.0); $dati = array(30, “Roma”, 12.7, true, null); Variabili predefinite In Php ne esistono molte e sono disponibili per gli script durante l’esecuzione. $_SERVER : contiene le variabili passate allo script dal lato server $_COOKIE : contiene le variabili passate allo script tramitei cookie $_SESSION : contiene le variabili utilizzate per implementare il concetto di sessione Si tratta di array associativi quindi bisogna usare delle parole per accedere ai loro valori : $_SERVER [‘REMOTE_ADDR’] : contiene l’indirizzo IP da cui proviene la richiesta di esecuzione dello script ovvero l’indirizzo IP della macchina utente $_SERVER[‘SERVER_SOFTWARE’] : contiene il nome del server Web che esegue lo script $_SERVER[‘HTTP_USER_AGENT’] : contiene una stringa con il nome del browser utilizzato dall’utente $_SERVER[‘SERVER_NAME’] : contiene il nome della macchina su cui gira il server web $_SERVER[‘PHP_SELF’] : contiene il nome dello script in esecuzione Obbligatorio scrivere in maiuscolo i nomi delle variabili Le precedenti informazioni possono essere utilizzare per registrare gli accessi al server, attraverso i cosiddetti file log e per produrre successivamente le statistiche relative ai visitatori (da dove si collegano e quale browser web utilizzano) 4 Istruzioni Sequenza : è sufficiente scrivere le istruzioni una di seguito all’altra (meglio su righe diverse) separate dal ; Alternativa semplice : If (condizione) istruzione; If (condizione) { istruzione; istruzione; }; If (condizione) { istruzione; istruzione; }; else { istruzione; istruzione; }; Le graffe svolgono il ruolo del begin..end in Pascal Alternativa multipla : (simile al case … default = else) switch (variabile) { case valore: istruzione; istruzione; … break; case valore: istruzione; istruzione; … break; default: istruzione; istruzione; … break; }; Iterativa per vero : while (condizione) { istruzione; istruzione; }; Iterativa per falso : do { istruzione; istruzione; } while (condizione); Iterativa enumerativa : for (valoreiniziale;condizione;incremento) { istruzione; istruzione; }; 5 Istruzioni di Input/output Output : print nomevar; oppure print ‘stringa’; echo nomevar; oppure echo ‘stringa’; È opportuno ricordare che il dato da inviare al browser che segue il comando echo può essere racchiuso tra parentesi e che al comando possono essere date in input più stringhe separate da virgole, così: echo "Buongiorno a tutti!", "<br />\n", "È una bellissima giornata"; Se si decide di utilizzare il separatore virgola, non possono essere utilizzate le parentesi. Il simbolo \n ha una funzione abbastanza importante nella programmazione e nello scripting che serve più che altro per dare leggibilità al codice HTML che stiamo producendo. Infatti PHP, quando trova questa combinazione di caratteri fra virgolette, li trasforma in un carattere di ritorno a capo: questo ci permette di controllare l'impaginazione del nostro codice HTML. Bisogna però stare molto attenti a non confondere il codice HTML con il layout della pagina che l'utente visualizzerà sul browser: infatti, sul browser è solo il tag <br /> che forza il testo ad andare a capo. Esempio 1 <?php echo "prima riga\n"; echo "seconda riga<br />"; echo "terza riga"; ?> Questo codice php produrrà il seguente codice HTML: prima riga seconda riga<br />terza riga mentre l'utente, sul browser, leggerà: prima riga seconda riga terza riga regole importanti da ricordare quando si usano le stringhe delimitate da apici o virgolette: può capitare che una stringa debba contenere a sua volta un apice o un paio di virgolette; abbiamo bisogno di un sistema per far capire a PHP che quel carattere fa parte della stringa e non è il suo delimitatore. In questo caso si usa il cosiddetto 'carattere di escape', cioè la barra rovesciata (backslash: \). Vediamo alcuni esempi: <?php echo 'Torniamo un\'altra volta'; // stampa: Torniamo un'altra volta echo "Torniamo un'altra volta"; // stampa: Torniamo un'altra volta echo "Torniamo un\'altra volta"; // stampa: Torniamo un\'altra volta echo 'Torniamo un'altra volta'; // causa un errore, perchè l'apostrofo viene scambiato per l'apice di chiusura echo 'Anna disse "Ciao" e se ne andò'; // stampa: Anna disse "Ciao" e se ne andò echo "Anna disse \"Ciao\" e se ne andò"; // stampa: Anna disse "Ciao" e se ne andò echo 'Anna disse \"Ciao\" e se ne andò'; // stampa: Anna disse \"Ciao\" e se ne andò echo "Anna disse "Ciao" e se ne andò"; // errore ?> <?php 6 Input Una delle caratteristiche più importanti di tutti i linguaggi di scripting è data dalla possibilità di interagire con l’utente che utilizza una pagina Web. Con il linguaggio Php l’interazione avviene nel momento in cui l’utente invia una richiesta al server Web : quest’ultimo genera come risposta, attraverso PHP, una pagina web dinamica. L’interazione con l’utente avviene aggiungendo particolari informazioni alla richiesta di pagina web, un modo di procedere simile al passaggio di parametri nelle procedure/funzioni. L’interazione con l’utente può essere gestita attraverso i form dell’Html che permettono la costruzione di un’interfaccia grafica costituita da caselle di testo, pulsante, check box, option button, ecc. Tramite questa interfaccia l’utente può inserire i valori ed inviarli al server web come parametri dello script. Esempio : <form action =”cerca.php” method = “get”> Parola : <input type =”text” name = “parola”> <input type =”submit” value “Cerca”> </form> Quando si fa clic sul pulsante con l’etichetta Cerca, il browser richiama lo script php Cerca indicato in action e aggiunge automaticamente alla richiesta tutti i campi presenti nel modulo. Per ogni campo crea un parametro avente come nome il nome del campo indicato dall’attributo name e come valore quello inserito dall’utente. L’attributo method del form html ha il compito di indicare al browser quale modalità deve utilizzare per inviare i campi del modulo al server web. Sono disponibili due modalità : get : i parametri vengono codificati automaticamente dal browser all’interno dell’indirizzo e vengono visualizzati insieme all’URL della pagina erb. Questa modalità non è adatta in tutte le situazioni : per esempio non è desiderabile che una password o una carta di credito siano visualizzati insieme all’indirizzo. Altre volte non è possibile per la limitazione sulla lunghezza degli indirizzi ( se ad esempio è presente una textarea molto grande). Nel form precedente , se l’utente digita Rapallo nella casella di testo il browser richiama il seguente indirizzo di script : cerca.php?parola=Rapallo post : serve per spedire grandi quantità di dati in modo che non siano visibili all’utente. Una pagina generata da un modulo che ha usato il metodo get può essere salvata nei Preferiti con il corretto valore dei parametri inseriti, mentre questo non è ovviamente possibile per una pagina che usa il metodo post. I parametri vengono passati allo script Php per mezzo dell’array associativo $_GET , nel caso di parametri passati col metodo get, e per mezzo dell’array associativo $_POST se i parametri sono passati col metodo post. Quindi all’interno del codice PHP, nell’esempio precedente, per accedere al valore inserito dall’utente si farà riferimento a $_GET[“parola”] Lettura e scrittura di un file di testo Apertura del file : fopen(nomefisicodelfile, modalità di apertura) dove le modalità di apertura possono essere r : lettura; w: scrittura; a: scrittura in coda di dati esistenti Esempio fopen(http://www.mioserver.com/prove/dati.txt,”r”) All’interno dello script il nome del file si identifica con $file Chiusura del file : fclose($file) Lettura di un file : fgets($file, lunghezza della stringa di caratteri da leggere) ; legge una linea del file ; se non si specifica la lunghezza legge fino al primo ritorno a capo Scrittura di un file : fwrite($file, contenuto della stringa di caratteri da scrivere) : se si usa la sequenza “\n” si inserisce un ritorno a capo Test di fine file : feof($file) se true finito il file 7 Accesso ai database Mysql è un programma server che si occupa della gestione di una base di dati. Ne vogliamo studiare l’interazione con il Php. In un sito Web dinamico i dati risiedono in un database sul server gestito da mysql e, ogni volta che un utente ne fa richiesta, questi dati vengono recuperati e mostrati nelle pagine web realizzate sul server tramite html e inviate al browser dell’utente client. Le due parti dell’applicazione Web , lato server e lato client, si collegano usando gli script in Php che svolgono i seguenti compiti : connessione al database MySQL, invio dei comandi Sql e acquisizione delle risposte scrittura dei dati ricevuti dal database all’interno di pagine Web in formato html, in modo che siano interpretate dal browser dell’utente In dettaglio : Il browser Web effettua una richiesta di una pagina web in formato Php Il server Web riconosce che la richiesta fa riferimento a un file con estensione php e quindi attiva l’interprete Php per eseguire gli script in essa contenuti Lo script php contiene i comandi per collegarsi al database MySQL e inviare le richieste tramite i comandi Sql Il server MySQL risponde restituendo i dati richiesti Lo script Php scrive questi dati all’interno di una pagina Web e la restituisce al server Web Il server Web invia al browser dell’utente la pagina richiesta in formato html generata in modo dinamico dallo script php In uno script Php che deve accedere al database sul server occorre per prima cosa definire la variabili per : Il nome del server: $host (in locale si indica localhost) L’identificativo di accesso al server : $username La password di accesso al server : $password Il nome del database : $db_name Il nome della tabella : $tbl_name La prima operazione da effettuare è la connessione con il server MySQL : mysql_connect(nome server,nome utente, password) La funzione restituisce un valore $conn che corrisponde all’identificativo della connessione nel caso in cui la connessione abbia avuto successo. Se non è stata in grado di aprire la connessione viene restituito un valore falso che viene utilizzato per interrompere l’esecuzione e mostrare un messaggio di errore. (si usa il comando die per interrompere…si può far vedere anche mysql_error()) La connessione viene chiusa alla fine dello script con mysql_close() La seconda operazione seleziona il db tramite la funzione mysql_select_db(nomedb,connessione). Restituisce un valore true/false che permette di controllare se l’operazione ha avuto successo. A questo punto è possibile interagire con il db tramite i comandi Sql.. La funzione Php che consente di inviare comandi sql è mysql_query(stringasql) che restituisce un array $result che corrisponde alle righe selezionate nella tabella e posiziona il puntatore dei dati all’inizio dell’array. Per esaminare i risultati si usa mysql_fetch_array($result) che restituisce in $row una riga della tabella. 8 In sintesi <?php $host = "localhost"; $username = "root"; $password = "meticela"; $db_name = "cinema"; $tbl_name = "attore"; $conn = mysql_connect($host,$username,$password) ; If (!$conn) {die('errore di connessione : '.mysql_error());} echo "connessione riuscita"."<br>"; $acc = mysql_select_db($db_name); if (!$acc) {die ('errore di connessione al db : '.mysql_error());} echo "connessione al db riuscita"."<br>"; $sql = "select * from $tbl_name"; $result = mysql_query($sql); $conta = mysql_num_rows($result); echo "numero attori = "."$conta"."<br>"; $row = mysql_fetch_array($result); while ($row ) { echo $row['nomeattore']; echo "<br>"; $row = mysql_fetch_array($result); } ?> <head><title>Informazioni sulla connessione</title></head> <body> Il tuo indirizzo IP : <?php $nome = $_SERVER['REMOTE_ADDR']; echo "$nome"."<br>"; ?> Il tuo browser Web : <?php $nome = $_SERVER['HTTP_USER_AGENT']; echo "$nome"."<BR>"; ?> Il tuo server Web : <?php $nome = $_SERVER['SERVER_SOFTWARE']; echo "$nome"."<BR>"; ?> Il tuo server : <?php $nome = $_SERVER['SERVER_NAME']; echo "$nome","<BR>"; ?> </body> </html> 9