Vai alla pagina del corso di MySQLi, impara a far interagire PHP con il database: Corso di MySQLi
Scarica la lezione di Diego Giorgini sulla programmazione ad oggetti (OOP) in PHP: Lezione OOP in PHP
Introduciamo PHP come si deve: PHP è un linguaggio di programmazione lato server per le pagine web. Visita PHP.net
Per ora abbiamo parlato solo di linguaggi lato client, i quali possono essere visti da tutti semplicemente premendo CTRL+U da browser o usando l’addon Firebug per Firefox o altri browser.
Per il lato server, invece, si intende che il sorgente (il codice scritto che viene eseguito) può essere visto solo usando il computer che ospita quella pagina web, questo perché il file contiene informazioni importanti (come i dati per la connessione al database) che, se ottenuti, possono essere usati per distruggere completamente il sito web.
Essendo un linguaggio di programmazione, è totalmente diverso dai precedenti linguaggi di markup studiati, in quanto contiene istruzioni come If..Else.. e cicli While, Do..While e molte altre strutture sintattiche, che consentono di modificare il contenuto delle nostre pagine web in base alle preferenze impostate dall’utente.
Per eseguire del codice PHP sulla nostra pagina però, non è più possibile fare come in HTML semplicemente doppio click sulla pagina e subito appare la visualizzazione sul browser: bisogna avere installati Apache e e il software PHP, i quali permettono di interpretare il codice PHP.
Alternativa più semplice è l’utilizzo di un server come Altervista con un interprete PHP già installato.
Per i corsi è a disposizione uno spazio sul server del TW! Potete consultare la guida per maggiori informazioni.
La programmazione web lato client e lato server
Apache - Wikipedia
Se vogliamo iniziare a scrivere in PHP, dobbiamo salvare il nostro file con estensione .php (non .html!) e innanzitutto scrivere:
<?php ... codice PHP ... ?>
Come si può notare bisogna usare un apposito tag, che si apre con <?php e si chiude con ?>, lì potremmo scrivere il nostro codice PHP ed eseguirlo.
La funzione principale di PHP è la funzione echo, che serve per stampare del testo:
<?php echo "Hello World!!"; ?>
NB: se vogliamo stampare del testo è necessario inserirlo all’interno delle virgolette, il perché sarà spiegato più avanti.
Un’altra cosa importante è l’utilizzo del punto e virgola ; alla fine di ogni istruzione e/o dichiarazione: il punto e virgola indica la fine di una linea, se non viene inserito PHP restituirà un errore!!!
TUTTE le istruzioni del codice (eccetto i cicli e le condizioni if) devono essere chiuse con il punto e virgola!!!
Caldamente consigliata è la seguente lettura per comprendere come implementare PHP con l’HTML:
Struttura base & implementazione HTML
I commenti in PHP possono essere scritti in due modi:
<?php // primo metodo /* secondo metodo */ ?>
La differenza sta semplicemente nel fatto che il primo metodo funziona solo su una linea, mentre il secondo commenta linee multiple (fino a quando non si chiude con */).
Le variabili sono una delle strutture sintattiche più utili della programmazione: queste servono a memorizzare un valore sotto un nome per poterlo poi riutilizzare in un secondo momento semplicemente riscrivendo lo stesso nome.
Per la dichiarazione di una variabile in PHP bisogna usare il simbolo $:
<?php $ciao = "hello"; ?>
Cosa c’è scritto?
Abbiamo dichiarato una variabile chiamata $ciao contenente il valore “Hello”.
Le variabili in PHP
Funzioni per gestire le variabili
PHP presenta la possibilità di lavorare con diversi tipi di dato. I tipi di dato pertinenti a PHP sono fondamentalmente 4:
<?php $booleanoT = true; //valore booleano true; $booleanoF = false; //valore booleano false; $nullo = null; //valore nullo $intero = 156; //numero intero $decimale = 8.7; //numero decimale $stringa = "testo qualsiasi all'interno degli apici"; //stringa, ovvero sequenza di caratteri alfanumerici ?>
TRUE o FALSE (NB non si devono inserire all’interno degli apici)NULL è un valore speciale (NB non si deve inserire all’interno degli apici)1,2,3, ecc...)1.4, 1.543, ecc...); NB per separare la parte decimale si usa il punto . e non la virgola!Per onor di cronaca sono tipi di dato anche array e oggetti, ma saranno presentati più avanti.
La stringa ha, a sua volta, diversi modi per essere scritta, i quali presentano delle sostanziali differenze:
<?php $nome = 'Anna'; //ESEMPIO CON APICI DOPPI " " echo "La \"povera\" $nome è all'ospedale!"; // stampa: La "povera" Anna è all'ospedale //ESEMPIO CON APICI SINGOLI ' ' echo 'La "povera" $nome è all\'ospedale!'; // stampa: La "povera" $nome è all'ospedale ?>
<?php //ESEMPIO STRINGA HEREDOC $frase = "ciao a tutti"; $stringa = <<<EOT L'amico mio dice "$frase" EOT; echo $stringa; // stampa: L'amico mio dice "ciao a tutti" ?>
Prima di esaminare accuratamente i vari tipi di stringa, introduciamo il simbolo \ (backslash, detto carattere di escape), il quale ha la funzione di non far riconoscere a PHP il carattere che lo segue come carattere pertinente al linguaggio, ma semplicemente come simbolo inserito nel testo. Ma osserviamo ora i tipi di stringa:
Tipi di dato
Funzioni per gestire le stringhe
In PHP si possono accodare due elementi compatibili con l’utilizzo del punto . , ecco come:
<?php $ciao = "Hello"; $mondo = "World!!"; echo $ciao." ".$mondo; ?>
Questa struttura stamperà sulla vostra pagina la scritta “Hello World!!”, cioè la stringa “Hello” unita alle stringhe " " prima e “World!!” poi.
Come ogni linguaggio di programmazione anche PHP permette lo svolgimento di operazioni aritmetiche.
Ci sono pochi semplici operatori in PHP:
1) SOMMA
<?php $a = 3; $b = 2; echo $a+$b; //stampa 5 ?>
2) SOTTRAZIONE
<?php $a = 1; $b = 4; echo $b-$a; //stampa 3 ?>
3) MOLTIPLICAZIONE
<?php $a = 3; $b = 2; echo $a*$b; //stampa 6 ?>
4) DIVISIONE
<?php $a = 7; $b = 2; echo $a/$b; //stampa 3; NB il resto non viene contato! ?>
5) RESTO Questo operatore (%) serve a restituire il resto di una divisione:
<?php $a = 4; $b = 3; echo $a%$b; //stampa 1 perchè il resto di questa divisione è 1 ?>
PHP dà inoltre la possibilità di utilizzare degli operatori compatti nel caso in cui si necessiti di modificare aritmeticamente il valore di una variabile.
L’intuito direbbe di fare:
<?php $a = 1; $a = $a +1; //somma, ora $a ha valore 2 ?>
Il che non è sbagliato.
Esiste però un metodo molto semplice e rapido per sommare, sottrarre, moltiplicare o dividere:
<?php $a = 1; $a += 1; //somma: $a assume il valore che aveva in precedenza aumentato di 1 $a -= 1; //sottrazione: $a assume il valore che aveva in precedenza diminuito di 1 $a *= 1; //moltiplicazione: $a assume il valore che aveva in precedenza moltiplicato per 1 $a /= 1; //divisione: $a assume il valore che aveva in precedenza diviso per 1 ?>
Così ci si risparmia la fatica di riscrivere la variabile una seconda volta!
Altra interessante caratteristica di PHP è l’incremento o decremento di variabile di tipo intero, semplicemente scrivendo:
<?php $a = 3; $a++; // $a viene aumentato di 1 $a--; // $a viene diminuito di 1 ?>
Interessante approfondimento sulle espressioni in PHP
Gli operatori di confronto sono fondamentali nell’istruzione if e nei cicli, in quanto ci permettono di definire le condizioni di esecuzione di essi!
Sono pochi ma indispensabili:
1 < 2 : quando il valore a sinistra è minore di quello a destra1 <= 2 : quando il numero a sinistra è minore o uguale di quello a destra2 > 1 : quando il valore a sinistra è maggiore di quello a destra2 >= 1 : quando il numero a sinistra è maggiore o uguale di quello a destra2 == 2 : quando il numero a destra è uguale a quello a sinistra2 != 1 : quando il numero a destra NON è uguale a quello a sinistra2 === 2.0 : qui invece si parla di tipo di dato a destra e a sinistra, in questo caso l’uguaglianza è falsa perché a destra abbiamo una variabile FLOAT e a sinistra un INTERO (INT)!!
Questi operatori hanno lo scopo di restituire true o false quando vengono eseguite, il che è fondamentale per cicli e istruzioni!!
Ovviamente se l’uguaglianza è vera, l’operatore restituirà true, mentre se è falsa restituirà false.
1 <= 2 // Restituirà TRUE 2 == 3 // Restituirà FALSE
Anche gli operatori logici come i precedenti, sono indispensabili nei cicli e nelle istruzioni.
Vediamoli insieme:
true se una o entrambe le condizioni risultano VERE!true se ENTRAMBE le condizioni sono VERE!true quando una condizione è VERA e l’altra è FALSA!true quando la condizione è falseEcco alcuni esempi:
1<=2 || 2<1 // Vera, la prima restituisce TRUE!! 1<2 && 1==1 // Vera , Entrambe restituiscono TRUE quindi l'istruzione/il ciclo procede. 1<2 XOR 5==2 // Vera, la prima è TRUE mentre la seconda è FALSE. !1==4 // Vero, 1==4 è falsa ma l'operatore ! inverte facendo restituire TRUE!
Adesso inizieremo ad analizzare le strutture che definiscono il PHP come linguaggio di programmazione.
L’istruzione if serve a porre una condizione:
$c = 1; if($c==1){ echo "hello!"; }
In questo esempio diciamo che se la variabile $c è uguale a 1, allora stampa “hello!”.
In pratica l’istruzione if serve a porre una condizione in modo da eseguire delle azioni solo se quella certa condizione è verificata.
Da notare che le condizioni vanno inserite tra parentesi tonde (...) , mentre le istruzioni da compiere tra parentesi graffe {...} .
Altri esempi possibili sono:
$c = 2; if($c==1 || $c==2){ echo "hello!"; }
Le due linee stanno ad indicare l’operatore OR, quindi → se $c == 1 O $c == 2 allora stampa “hello!”.
$c = 1; $a = 1; if($c==1 && $a == 1){ echo "hello!"; }
Le due & stanno ad indicare invece l’operatore AND, quindi → se $c == 1 E $a == 1 allora stampa “hello!”.
Se si vuole invece porre più casi, si può ricorrere all’istruzione elseif:
$c = 2; if($c==1){ echo "hello!"; }elseif($c==2){ echo "world!"; }
Elseif pone semplicemente un altra condizione che, se verificata, esegue l’operazione richiesta; è possibile accodare pi+ di un elseif.
Quindi se $c==1 stampa “hello!” mentre se $c==2 stampa “world!”.
Ma cosa succede se vogliamo porre un caso generale?
La risposta arriva dall’istruzione else:
$c = 3; if($c==1){ echo "hello!"; }elseif($c==2){ echo "world!"; }else{ echo "altro!"; }
Else pone una condizione generale nel caso le altre condizioni non si avverino: se $c == 1 stampa “hello!”, se $c == 2 stampa “world!” altrimenti stampa “altro!”.
Istruzione if - Le basi
Istruzione if - Else e Else If
Lo switch è un istruzione particolare, permette di confrontare un dato con più casistiche ed avere una risposta diversificata per ogni valore che il dato può assumere:
<?php $a = 1; switch($a) { case 1: echo "la variabile vale 1!!"; break; case 2: echo "la variabile vale 2!!"; break; default: echo "Non riconosco la variabile!"; break; } ?>
Esaminiamo la struttura:
case (deve essere seguito dal ; punto e virgola).case è verificato, esegue il codice dopo i : (due punti) del default (NB può essere omesso).
Quindi tornando all’esempio:
case 1: → se la variabule $a vale 1 allora esegui fino al break;
case 2: → se la variabule $a vale 2 allora esegui fino al break;
default: → se la variabile non ha soddisfatto i casi precedenti esegui fino al break;
Esiste un altro tipo di dato in PHP che può contenere più valori, questo è chiamato array.
Un array è un dato di PHP che contiene più elementi, ad ognuno dei quali è associata una chiave che serve per identificarli, la quale può essere un intero (0,1,2,3...) o una stringa (”ciao”,”hello”...).
Esistono vari modi per dichiarare un array:
<?php //ESEMPIO 1 $colori = array(0 => "blu", 1 => "bianco", 2 => "rosso", 3 => "verde"); //abbiamo appena creato un array //ESEMPIO 2 $citta[0] = "Venezia"; //altro metodo per definire un array $citta[1] = "Roma"; $citta[2] = "Milano"; $citta[3] = "Schio"; //ESEMPIO 3 $saluti = array("ciao","hello","hola","hallo"); //array con 4 elementi con chiave automatico da 0 a 3 $saluti[] = "salut"; //aggiungiamo un elemento all'array $saluti //ESEMPIO 4 $stati = array(3 => "Italia", "San Marino", "Città del Vaticano"); //ESEMPIO 5 $persona["nome"] = "Mario" ; //array con chiave una stringa "nome" e valore "Mario" $persona["cognome"] = "Rossi" ; //array con chiave una stringa "cognome" e valore "Rossi" ?>
$colori; dichiarato con la dicitura array(...), l’array presenta all’interno delle coppie di chiavi e valori (chiave => valore)separati da una , (virgola).$saluti non è impostata alcuna chiave, in automatico, PHP numera le chiavi dal primo elemento partendo da 0 (NB: non da 1!). Per aggiungere un elemento ad un array già dichiarato, basta far assumere il valore da inserire nell’array ad una variabile con le parentesi quadrate, [] senza specificare la chiave!!
Vediamo ora alcuni esempi per ricavare il valore associato ad una chiave di un array; basta scrivere semplicemente:
<?php echo $colori[2]; //stampa "rosso" echo $citta[3]; //stampa "Schio" $num = 1; echo $saluti[$i]; //stampa "hello" echo $saluti[5]; //stampa "salut" echo $stati[4]; //stampa "San Marino" echo $persona["nome"]; //stampa "Mario" ?>
In pratica per estrarre un valore da stampare o per qualsiasi altro uso (nell’esempio si stampano tutti, ma può servire anche ad altri scopi...), basta fornire all’array la chiave del valore cercato.
Un ottimo strumento di debug quando si tratta di array è la funzione print_r(..) che si usa in questo modo:
<?php print_r($array); ?>
Dichiarare e sfogliare array
Funzioni per gestire gli array
Un’altra parte fondamentale di un linguaggio di programmazione sono i cicli: istruzioni che permettono la ripetizione di un’azione per un determinato numero di volte.
Il ciclo For serve ad eseguire un’azione per un determinato numero di volte (stabilito all’inizio del ciclo)
for($i = 0; $i <= 5; $i ++){ echo "stampo il num $i!"; }
Come si vede il for è composto da tre parti:
$i = 0 : inizializzazione della variabile che aumenta ad ogni ciclo (NB: deve essere una variabile numerica!)$i <= 5 : la condizione, fintanto che essa corrisponde al vero, il ciclo viene eseguito$i++ : quanto aumentare il valore della variabile alla fine di ogni ciclo (può essere anche una scrittura del genere $i+=2)
Questo ciclo stamperà 6 volte la stringa “stampo il num $i!” in quanto esegue il ciclo con $i che vale 0,1,2,3,4,5 (il 6 è più grande di 5 quindi non esegue!).
I cicli While e Do...While sono molto simili tra loro in quanto eseguono un’azione fino a quando non si avvera una specifica condizione.
$a = 1 while($a <= 5){ echo "$a volte!"; $a++; } $b = 1; do{ echo "$b volte!"; }while($b > 2);
Analizziamo i due cicli accuratamente:
Nel primo ciclo (while) la condizione $a <= 5 esprime fino a quando il ciclo dovrà ripetersi: fino al momento in cui la condizione diverrà falsa!
Di conseguenza verrà eseguito 5 volte perché ad ogni giro il valore della variabile $a viene aumentato di un’unità con la dicitura $a++.
La differenza con do...while è che nel secondo caso prima del controllo della condizione, viene eseguito una volta un intero giro del ciclo. Nel nostro esempio il ciclo compie un solo giro perché al controllo della condizione, questa risulta falsa e di conseguenza interrompe il ciclo.
Da notare che dopo il do...while sono necessari il punto e virgola ; . NB: con while e do...while, a differenza di for, non abbiamo a disposizione le istruzioni per inizializzare e per incrementare il contatore: quindi dobbiamo inserire queste istruzioni nel flusso generale del codice, per cui mettiamo l’inizializzazione prima del ciclo ($a & $b), e l’incremento all’interno del ciclo stesso ($a++), in fondo.
Il primo ciclo che studiamo è apposito per scorrere gli array; il foreach, infatti, per ogni (dall’inglese for each) elemento di un array esegue dei determinati compiti:
<?php $array = array(1 => "Queen" ,"Rolling Stones", "Beatles", "The Who"); foreach($array as $key=>$value) { echo "I $value sono il gruppo n. $key"; } ?>
Come potete notare all’interno delle parentesi tonde del ciclo, foreach(..), troviamo:
$array contenete l’array); NB: se il dato fornito non è di tipo array PHP restituirà un errore!!foreach!$key=> può essere omessa!
Le funzioni nei linguaggi di programmazione permettono di eseguire più volte un azione risparmiando la ripetizione di linee.
Sono in pratica una lista di azioni che vengono eseguite ogni volta che si desidera, richiamate semplicemente tramite il nome assegnato alla funzione al momento della dichiarazione.
<?php function stampa(){ // dichiaro una funzione che avrà come nome "stampa" echo "ciao ciao!!"; } stampa(); //richiamo la funzione ?>
Come si può notare, la funzione si dichiara con il termine inglese, function, seguito dal nome che si desidera dare alla stessa e le parentesi tonde (), il cui uso sarà spiegato in seguito. Il codice da eseguire, si inserisce invece, come visto per altre istruzioni e per i cicli, all’interno delle parentesi graffe {...}.
Una funzione, dopo essere stata dichiarata, può essere richiamata in qualsiasi punto successivo della pagina PHP, scrivendone il nome con le parentesi e l’immancabile punto e virgola finale, così nomefunzione(); .
Nell’esempio mostrato, la funzione stampa(), stamperà la stringa “ciao ciao!!”, perchè così è dichiarato all’interno della funzione e quindi ogni volta che verrà richiamata eseguirà questa specifica azione.
Imprescindibile dalla conoscenza delle funzioni è un corretto utilizzo dei parametri e della keyword return.
I parametri sono delle variabili che vengono passate come input alla funzione in modo che essa possa utilizzarli al proprio interno.
La keyword return invece serve a specificare il valore che la funzione deve ritornare.
<?php function calcola($n1,$n2){ //dichiarazione della funzione return $n1+$n2; } $primo = 1; $secondo = 2; $risultato = calcola($primo,$secondo); //la funzione viene richiamata echo $risultato; $terzo = 3; $quarto = 4; $risultato2 = calcola($terzo,$quarto); //la funzione viene richiamata con diversi parametri echo $risultato2; ?>
Analizziamo l’esempio: dopo la dichiarazione della funzione calcola(), questa viene richiamata, con due variabili numeriche che vengono passate come parametri.
NB: quando si richiama una funzione, non è necessario che le variabile inserite come parametri abbiamo lo stesso nome di quelle usate nella funzione, perché la funzione è un “pezzo di codice a sé” che non interagisce con l’esterno.
L’unica comunicazione che può avere una funzione con il resto del codice, è l’output che emette tramite return, in un certo senso il risultato delle elaborazioni di codice avvenute al suo interno. A questo punto è possibile assegnare il valore di output della keywork return ad una variabile e sfruttarla poi secondo necessità.
Piccola postilla: quando si usa la keyword return, la funzione si interrompe restituendo il valore che segue il return.
Le Funzioni personalizzate
Approfondimento consigliato: scope & parametri opzionali
Affrontando questo argomento ci si addentra nelle grandi potenzialità di PHP e si comincia ad intravedere in che modo l’utente possa interagire con una web-app in PHP.
Gli array superglobali sono così chiamati perché sono disponibili, differentemente dalle altre variabili, anche all’interno delle funzioni, sono cioè richiamabili da qualsiasi punto del codice PHP.
Il primo array superglobale che incontriamo è $_GET:
index.php <?php $nome = "Mario"; $cognome = "Rossi"; echo "Clicca qui per ricaricare la pagina con i nuovi dati:"; echo "<a href=\"index.php?nome=$nome&cognome=$cognome\">Link da cliccare</a>"; echo "Persona: $_GET[cognome] $_GET[nome]"; ?>
Il metodo GET consiste nell’accodare i dati all’indirizzo della pagina alla quale si vogliono inviare le informazioni, facendo seguire il nome della pagina da un punto interrogativo e dalle coppie nome/valore dei dati che ci interessano. Nome e valore sono separati da un segno di uguale. Le diverse coppie nome/valore sono separate dal segno &.
Nell’esempio il link rimanda alla stessa pagina (index.php), allegando però dei dati con delle precise chiavi di identificazione, nome e cognome, che assumono i valori passati dalle variabili omonime.
L’unica controindicazione all’uso di GET è che chiunque può modificare i dati trasmessi, semplicemente cambiandoli nella barra di indirizzo del browser.
Il metodo $_POST viene utilizzato con i moduli: quando una pagina HTML contiene un tag <form>, uno dei suoi attributi è method, che può valere GET o POST. Se il metodo è GET, i dati vengono passati nella query string, come abbiamo visto prima. Se il metodo è POST, i dati vengono invece inviati in maniera da non essere direttamente visibili per l’utente, attraverso la richiesta HTTP che il browser invia al server.
I dati che vengono passati attraverso il metodo POST sono memorizzati nell’array $_POST. Anche questo array, come $_GET, è un array superglobale. Quindi, per fare un esempio serve sfruttare un piccolo modulo:
index.php <form action="elabora.php" method="post"> <input type="text" name="nome"> <input type="checkbox" name="nuovo" value="SI"> <input type="submit" name="submit" value="invia"> </form>
elabora.php <?php $nome = $_POST['nome']; echo "$nome ha detto $_POST[nuovo]"; ?>
Questo modulo contiene semplicemente una casella di testo che si chiama ‘nome’ e una checkbox che si chiama ‘nuovo’, il cui valore è definito come ‘sì’. Poi c’è il tasto che invia i dati, attraverso il metodo POST, alla pagina elabora.php.
In questa pagina la variabile $_POST[’nome’], contenente il valore che l’utente ha digitato nel campo di testo, sarà a disposizione per qualsiasi utilizzo; inoltre, se è stata selezionata la checkbox, ci sarà anche la variabile $_POST[’nuovo’] con valore ‘SI’.
NB: se la checkbox non viene selezionata dall’utente, la variabile corrispondente risulterà non definita.
GET & POST e gli altri array superglobali
L’array superglobale $GLOBALS contiene i riferimenti a tutte le variabili locali visibili dalla root directory.
Quindi per poter riutilizzare una qualsiasi variabile, basterà scrivere $GLOBALS[’nomevar’]].
$GLOBALS contiene inoltre riferimenti a tutti gli altri array syperglobali:
$_GET$_POST$_SERVER$_COOKIE$_SESSION$_FILES$_ENV$_REQUEST