Cos'è il PHP

Il PHP (acronimo di Hypertext Preprocessor) è il linguaggio lato server più diffuso nel mondo del web.

Grazie al PHP si è passati da un concetto statico ad uno dinamico per la realizzazione dei siti web, ed è stato possibile realizzare le applicazioni del così chiamato web 2.0.

A differenza delle pagine statiche HTML, per permettere il funzionamento di un file PHP è necessario avere a disposizione un server.

Architettura Client/Server

Elementi di base per la compresione del web 2.0

Architettura Client/Server

Nel mondo del web, esistono fondamentalmente due principali attori: il client e il server.
Il server è l'attore che se interrogato, fornisce gli elementi per la visualizzazione della pagina web.
Il client è l'attore che richiede e successivamente visualizza l'elaborato del server per la pagina web attraverso il browser.

Il linguaggio HTML e CSS, non prevede alcuna elaborazione tramite il server, bensì è semplicemente una visualizzazione attraverso il browser; proprio per questo si definisce linguaggio client-side.

Diversamente per poter visualizzare il risultato di una pagina PHP, è necessario richiedere l'elaborazione del server; ragion per cui il PHP si definisce linguaggio server-side.

Generalmente quando si digita da browser un nome del tipo www.google.com (nome di dominio), si individua il server di Google che elaborerà la richiesta e restituirà al browser stesso un file codificato in HTML per una corretta visualizzazione.
Dunque tutte le elaborazioni lato server, restituiscono al browser una pagina HTML. PHP incluso.

Architettura Client/Server

Lavorando con il Localhost, si ha dunque la possibilità di avere sul proprio dispositivo un server in locale, che permette dunque le elaborazioni da servire al client.

Apache è il web server attivo sul Localhost.
Di conseguenza con il servizio di Apache spento, non sarebbe possibile visualizzare il risultato di una pagina PHP.

Fondamenti del PHP

Componenti di base e logica di programmazione

Fondamenti del PHP

Creazione di un file PHP

Come la maggior parte dei linguaggi di programmazione, anche il PHP è un linguaggio compilato.

A differenza però dei linguaggi per la programmazione desktop (come Java, Visual Basic, etc...), il PHP è compilato a runtime, ovvero per ogni richiesta di visualizzazione della pagina, si ha una compilazione del file PHP.
Dunque se 1.000 utenti richiedono la stessa pagina PHP, il server sarà sottoposto a 1.000 compilazioni contemporaneamente.

Per poter creare un file che supporti codice PHP, è necessario utilizzare l'estensione .php
Il linguaggio PHP può coesistere nello stesso file con il linguaggio HTML e CSS. Se però la pagina contiene del codice PHP, anche solo una riga, sarà necessario far sì che il file abbia estensione .php

Fondamenti del PHP

Creazione di un file PHP

E' possibile iniziare a scrivere codice PHP all'interno della pagina in qualunque momento, all'interno del tag apposito

<?php
	// Codice PHP
?>

Dunque una pagina del tipo index.php potrebbe benissimo esser composta da HTML e PHP

<html>
	<head>
		<title>Titolo</title>
	</head>
	<body>
		<?php
			// Codice PHP 1
		?> 
		
		<p>Provo pagina mista</p>
		
		<?php
			// Codice PHP 2
		?> 
	</body>
</html>

Fondamenti del PHP

Utilizzo dei commenti

Per quanto riguarda i commenti all'interno del codice PHP (sempre consigliati), ci sono 3 diverse alternative:

<?php
	// Commento su una sola linea
	
	/*
	 	Commento
	 	su più linee
	 */
	
	# Commento su una sola linea alternativo
?>

Fondamenti del PHP

Le variabili

Come per tutti i linguaggi di programmazione, anche nel PHP esiste il concetto delle variabili.
A differenza di molti altri però, nel PHP le variabili non sono tipizzate, ovvero non hanno una loro natura ben definita sin dall'origine e di conseguenza non hanno bisogno di essere dichiarate o istanziate.

Una variabile PHP nasce nello stesso momento in cui viene utilizzata per la prima volta.

Le variabili si identificano con il simbolo del dollaro "$", seguite dal nome della variabile stessa.

<?php
	$nome = "Francesco";
	$totale = 10;
?>

In seguito al valore attribuito, si inserisce sempre il punto e virgola per dichiarare il comando terminato.

E' necessario ricordare per le variabili

  • Il nome della variabile deve necessariamente iniziare con una lettera o un underscore ("_")
  • Il riconoscimento delle variabili è case sensitive, quindi $nome è diverso da $Nome
  • Il nome della variabile non può iniziare con un numero e può contenere al suo interno solo lettere, numeri e il simbolo underscore

Fondamenti del PHP

Le variabili

  • Per poter visualizzare sul browser il contenuto di una variabile (o di un testo), si utilizza il comando echo
  • Se si vuole analizzare il contenuto di una variabile (soprattutto in fase di debug) ovvero la sua natura e il suo contenuto, si utilizza il metodo var_dump
<?php
	$nome = "Francesco";
	echo $nome;		# Stampa "Francesco";
	var_dump($nome);	# Stampa "string(9) 'Francesco'"
	echo "Ciao ".$nome;	# Stampa "Ciao Francesco"
?>
  • Per poter unire due testi (stringhe) oppure stampare il contenuto di una variabile in un echo, si utilizza il simbolo di concatenazione del punto.
  • Con echo è possibile stampare anche del codice HTML
  • Con echo è possibile stampare anche il risultato di un'operazione
<?php
	$x = 2; $y = 3;
	echo "<h2>Somma</h2>";
	echo $x + $y;
?>

Fondamenti del PHP

Le costanti

E' possibile definire delle costanti ovvero elementi simili alle variabili, il cui però contenuto una volta definito non può esser modificato durante l'elaborazione della pagina.
Per poter definire una costante, si utilizza il metodo (funzione) define, fornendo tre diversi parametri:

  • Nome della costante (segue le stesse regole del nome di una variabile, escludendo il simbolo del $)
  • Valore della costante
  • Abilitazione case insensitive (true/false) facoltativa
<?php
	define("PIGRECO", 3.14);
	echo PIGRECO; 	# Stampa 3.14
	echo pigreco;	# Stampa errore in quanto non ho specificato il case insensitive
	
	define("IVA", 22, true);
	echo IVA; 	# Stampa 22
	echo iva; 	# Stampa 22
?>

Fondamenti del PHP

Operatori

In PHP si identificano diverse tipologie di operatori per quanto riguardano i calcoli, i processi e le elaborazioni dinamiche:

  • Operatori aritmetici
  • Operatori di assegnazione
  • Operatori di confronto
  • Operatori di di incremento/decremento
  • Operatori logici

Di seguito un prospetto dei vari operatori suddivisi per tipologia.

Fondamenti del PHP

Operatori

Operatori aritmetici

Operatore Nome Esempio Descrizione
+ Somma $x + $y Somma fra due numeri
- Sottrazione $x - $y Differenza fra due numeri
* Moltiplicazione $x * $y Moltiplicazione fra due numeri
/ Divisione $x / $y Divisione fra due numeri
% Resto divisione $x % $y Restituisce il resto della divisione fra due numeri
** Potena $x ** $y Elevamento a potenza di $y per la base $x

Fondamenti del PHP

Operatori

Operatori di assegnazione

Operatore Esempio Descrizione
= $x = $y Assegna a $x il valore di $y
+= $x += $y Assegna a $x il valore di $x + $y
-= $x -= $y Assegna a $x il valore di $x - $y
*= $x *= $y Assegna a $x il valore di $x * $y
/= $x /= $y Assegna a $x il valore di $x / $y

Fondamenti del PHP

Operatori

Operatori di confronto

Operatore Nome Esempio Descrizione
== Uguale $x == $y Ritorna TRUE se il valore di $x è uguale a $y
!= Diverso $x != $y Ritorna TRUE se il valore di $x è diverso da $y
<> Minore o maggiore $x <> $y Ritorna TRUE se il valore di $x è diverso da $y
=== Identico $x === $y Ritorna TRUE se il valore e la natura (tipologia) di $x è uguale a $y
!== Non identico $x !== $y Ritorna TRUE se il valore e la natura (tipologia) di $x è diverso da $y
> Maggiore $x > $y Restituisce TRUE se $x è maggiore di $y
< Minore $x < $y Restituisce TRUE se $x è minore di $y
>= Maggiore o uguale $x >= $y Restituisce TRUE se $x è maggiore o uguale di $y
<= Minore o uguale $x <= $y Restituisce TRUE se $x è minore o uguale di $y

Fondamenti del PHP

Operatori

Operatori di incremento/decremento

Operatore Nome Descrizione
++$x pre-incremento Incrementa $x di uno e ritorna il nuovo valore di $x
$x++ post-incremento Ritorna $x e poi incrementa $x di uno
--$x pre-decremento Decrementa $x di uno e ritorna il nuovo valore di $x
$x-- post-decremento Ritorna $x e poi decrementa $x di uno


Operatori di confronto

Operatore Nome Esempio Descrizione
AND oppure && And $x AND $y Ritorna TRUE se $x e $y sono entrambe verificate
OR oppure || Or $x OR $y Ritorna TRUE se almeno una fra $x e $y è verificata
! Not !$x Ritorna TRUE se $x non è verificata

Fondamenti del PHP

Controlli condizionali

Una peculiarità dei linguaggi di programmazione, è la possibilità di determinare comportamenti specifici in funzione di alcune condizioni.
In PHP esistono quattro diverse possibilità di gestire le condizioni:

  • if: per eseguire delle azioni al verficicarsi di una condizione
  • if, else: per eseguire una condizione alternativa nel caso in cui la prima condizione non si verifichi
  • if, elseif, else: per testare una seconda condizione nel caso in cui la prima non si verifichi o in alternativa procedere per un'altra soluzione
  • switch: per scegliere fra più soluzioni differenti

Fondamenti del PHP

Controlli condizionali

<?php
	# IF
	if(condizione) {
		# esegue il codice solamente se la condizione è verificata
	}
	
	#IF / ELSE
	if(condizione) {
		# esegue il codice se la condizione è verificata
	}else {
		# esegue il codice se la condizione NON è verificata
	}
	
	# IF / ELSEIF / ELSE
	if(condizione) {
		# esegue il codice se la condizione è verificata
	}elseif(condizione2) {
		# esegue il codice se la seconda condizione è verificata
	}else {
		# esegue il codice se le precedenti condizioni non sono verificate
	}
	
?>

Fondamenti del PHP

Controlli condizionali

  • E' possibile inserire diverse elseif per specificare diverse alternative di condizioni
  • Per delimitare il codice all'interno di ogni condizione, si utilizzano le parentesi graffe
  • Solo nel caso in cui ci sia una sola riga di codice in seguito ad una condizione, è possibile omettere le parentesi graffe
  • Per specificare le condizioni, si utilizzano gli operatori visti in precedenza. Dunque è possibile unire tramite gli operatori logici anche più tipologie di condizioni

Fondamenti del PHP

Controlli condizionali

Per quanto riguarda lo switch, a differenza delle tre precedenti casistiche, non permette di verificare delle condizioni, bensì di determinare l'esecuzione di una parte di codice in funzione di un valore specifico di una variabile.

<?php
	switch($mese) {
		case 1:
			echo "Gennaio";
			break;
		case 2:
			echo "Febbraio";
			break;
		case 3:
			echo "Marzo";
			break;
		.
		.
		.
		default:
			echo "Mese non valido!";
			break;
	}
?>

Fondamenti del PHP

Controlli condizionali

In base al valore assunto dalla variabile $mese, sarà dunque stampato il valore leggibile del mese.

  • Il comando break; permette di specificare che l'azione legato alla casistica è conclusa, quindi il compilatore PHP potrà saltare tutti i successivi controlli
  • Nel caso in cui non si inserisse il termine break, anche tutti gli altri casi successivi al caso verificato, sarebbero considerati come veri e quindi altererebbero il risultato previsto
  • La casistica di default, permette di associare un'azione qualora nessuna delle casistiche fosse verificata

E' possibile anche associare a più casistiche le stesse azioni:

<?php
	switch($mese) {
		case 1:
		case 2:
		case 3:
			echo "Primo trimestre";
			break;
		case 4:
		case 5:
		case 6:
			echo "Secondo trimestre";
			break;
	}
?>

Fondamenti del PHP

Cicli iterativi

Come per molti altri linguaggi, anche nel PHP esiste la possibilità di ripetere parti di codice per diverse volte, in base a determinate condizioni in quelli che si definiscono cicli iterativi.
Esistono tre diverse tipologie di cicli iterativi:

  • while
  • do-while
  • for

Fondamenti del PHP

Cicli iterativi

Il ciclo while, permette di eseguire delle operazioni, fino a quando la condizione dichiarata non è verificata.

<?php
	$x = 1;
	while($x < 5) {
		echo "Numero: ".$x." <br />";
		$x++;
	}	
?>
  • Il while si comporta dunque come una condizione if ripetuta per tutte le volte in cui è verificata
  • L'esempio precedente, stamperà dunque i valori 1, 2, 3 e 4
  • Nel momento in cui $x è uguale a 5, l'iterazione si considererà terminata

Fondamenti del PHP

Cicli iterativi

Il ciclo do-while, permette di eseguire delle operazioni, fino a quando la condizione dichiarata non è verificata, ad eccezione della prima volta in cui l'operazione sarà senza dubbio eseguita.

<?php
	$x = 1;
	do{
		echo "Numero: ".$x." <br />";
		$x++;
	}while($x < 5)	
?>
  • Prima di effettuare il controllo, l'operazione sarà eseguita nel primo passaggio
  • In seguito al primo controllo, si avrà lo stesso comportamento del ciclo while
  • Dunque se $x fosse stato uguale a 5 prima del do-while, si sarebbe comunque visualizzata la prima stampa (in quanto il do-while effettua il controllo solo dopo la prima iterazione)

Fondamenti del PHP

Cicli iterativi

Il ciclo for, permette di eseguire delle operazioni determinate volte predefinite, e racchiude una sintassi semplificata e unificata secondo tre parametri:

  • Valore di partenza del contatore
  • Condizione di verifica del contatore
  • Incremento del contatore
<?php
	for($x = 1; $x %lt; 5; $x++) {
		echo "Numero: ".$x." <br />";
	}
?>
  • E' una struttura che semplifica il normale funzionamento del while e racchiude le funzionalità generiche di un ciclo iterativo (valore iniziale, condizione ed increemento)

Fondamenti del PHP

Array

Gli array sono un contenitore di più dati della stessa natura, all'interno di una sola variabile PHP.
E' possibile associare l'idea di un array ad un armadio con più cassetti. Ciascun cassetto è indicato come un singolo contenitore di informazioni e si identifica con il nome di cella dell'array.

CELLA 1
CELLA 2
CELLA 3
CELLA 4
CELLA 5

Ciascuna cella può essere utilizzata come variabile autonoma all'interno delle elaborazioni del PHP.
Per poter creare un'array (associandolo ad una variabile), si utilizza la struttura

<?php
	$squadre = array("Juventus", "Inter", "Bari");
?>

L'array $squadre, sarà dunque composto da tre celle. Per accedere alle singole celle, si fa riferimento al così chiamato indice dell'array, ovvero un valore numerico che parte da 0 (per la prima cella). Dunque se volessi stampare il nome della prima squadra

<?php
	echo "Magica ".$squadre[0]; 	# stampa Magica Juventus
?>

Fondamenti del PHP

Array

  • Per specificare l'indice dell'array, si fa rifermento all'uso delle parentesi quadre (che ricordano appunto un cassetto)
  • L'array può contenere ogni tipologia di variabile (stringhe, numero, altre variabili, etc...)
  • Gli elementi dell'array possono essere anche di tipologia di versa fra di loro

    <?php
    	$valore = 15;
    	$misto = array(1, "Mario", $valore);
    ?>
    
  • Per modificare il valore di una cella, si fa riferimento sempre al suo indice

    <?php
    	$squadre[2] = "Napoli"; 	# Modifico il valore della terza cella in "Napoli"
    ?>
    
  • Per aggiungere un valore in coda all'array (creando dunque una nuova cella)

    <?php
    	$squadre[] = "Milan"; 	# Aggiunge "Milan" all'array squadre con indice 3
    ?>
    

Fondamenti del PHP

Array

  • Per poter sapere quanti elementi contiene un array, si utilizza il metodo count

    <?php
    	echo "Ci sono ".count($squadre)." squadre!"; 	# Stampa "Ci sono 4 squadre"
    ?>
    
  • Grazie al count è dunque possibile anche ciclare l'array sfogliando tutti gli elementi contenuti

    <?php
    	foreach($i = 0; $i < count($squadre); $i++) {
    		echo "Cella ".$i." - Squadra ".$squadre[$i]."<br />";
    	}
    	
    	/* Stamperà
    	  	Cella 0 - Squadra Juventus
    		Cella 1 - Squadra Inter
    		Cella 2 - Squadra Napoli
    		Cella 3 - Squadra Milan
    	*/
    ?>
    

Fondamenti del PHP

Array

Il PHP permette di definire anche autonomamennte la nomenclatura degli indici degli array, qualora non si volessero utilizzare i valori numerici di default.
Nel caso in cui gli indici non sono più automatici, bensì personalizzati, si parla di array associativi.

La struttura degli array associativi, è pressocchè identica agli array di default, semplicemente occorre specificare il nome dell'indice

<?php
	$compleanni = array("Luca" => "12/01/1992", "Marco" => "15/10/1990");
?>

In questo modo avremo dunque due sole celle chiamate "Luca" e "Marco", anzichè 0 e 1 così come avremmo avuto in un ipotetico array di default senza specificare i nomi degli amici.

Sarà dunque più semplice gestire, visualizzare e modificare i valori dell'array accedendo direttamente alla "chiave" dello stesso e non ad un indice generico numerico.

Fondamenti del PHP

Array

Per poter leggere gli elementi dell'array associativo, non si utilizza più il ciclo for, bensì una quarta tipologia di ciclo iterativo, il foreach.

Il foreach si utilizza solo per array associativi, e permette di gestire contemporaneamente chiave (indice) e valore di ogni singola cella

<?php
	$compleanni = array("Luca" => "12/01/1992", "Marco" => "15/10/1990");
	foreach($compleanni AS $nome => $data) {
		echo $nome." : ".$data."<br />";
	}
	
	/* Stamperà:
	  		Luca: 12/01/1992
	 		Marco: 15/10/1990
	 */
?>

Fondamenti del PHP

Array

Oltre a stringhe, valori numerici e variabili, le celle degli array possono contenere anche ulteriori array a loro volta, andando a creare una struttura tabellare definita array multidimensionale.

Gli array multidimensionali, sono molto utili quando si vogliono immagazzinare e gestire facilmente molte quantità di dati, strutturandoli come una vera e propria tabella

<?php
	$squadre = array(
		"Juventus" => array("classifica" => 1, "punti" => 80, "goal" => 75),
		"Roma" => array("classifica" => 2, "punti" => 60, "goal" => 55),
		"Lazio" => array("classifica" => 3, "punti" => 59, "goal" => 67)
	);
?>

Abbiamo creato dunque una struttura con array associativi, dove alle chiavi "Juventus", "Roma" e "Lazio", sono associate altre informazioni raggruppate in un array. Dunque abbiamo un array all'interno di un altro array, ovvero un array multidimensionale bidimensionale.

Fondamenti del PHP

Array

Per accedere dunque alle singole informazioni delle celle, avremo bisogno di utilizzare dunque due diversi indici. Se volessi visualizzare la posizione in classifica della Juventus:

<?php
	echo $squadre["Juventus"]["classifica"];
?>

Di conseguenza se volessi creare una tabella con tutte le informazioni

<?php
	echo "NOME SQUADRA | CLASSIFICA | PUNTI<br />";
	foreach($squadre AS $squadra => $info) {
		echo $squadra." | ";
		foreach($info AS $campo => $valore) {
			echo $valore ." | ";
		}
		echo "<br />";
	}
	/* Stamperà:
	   	NOME SQUADRA | CLASSIFICA | PUNTI
	 	Juventus | 1 | 80
	 	Roma | 2 | 60
	 	Lazio | 3 | 59
	 */
?>

Esercitazione

Test sui fondamenti del PHP

Esercitazione

Creare uno script PHP, che in seguito ad un numero X preimpostato, esegua un'iterazione da 1 a X effettuando le seguenti operazioni:

  • Se il numero iterato è divisibile soltanto per 3, scrive Hoppity, aggiungendo una nuova linea
  • Se il numero iterato è divisibile soltanto per 5, scrive Hopop, aggiungendo una nuova linea
  • Se il numero iterato è divisibile sia per 3 che per 5, scrive Hop ignorando le due precedenti condizioni, aggiungendo una nuova linea

Se per esempio il numero X è 15, dovrò avere dunque a schermo:

Hoppity
Hophop
Hoppity
Hoppity
Hophop
Hoppity
Hop

Tempo di esecuzione: 10 min

Funzioni del PHP

Metodi in aiuto per tutte le esigenze

Funzioni del PHP

Cosa sono

Nel PHP così come in molti altri linguaggi, esiste la possibilità di raggruppare righe di codice sotto un'unico nome, e dunque renderle disponibili in qualunque momento: questo aspetto della programmazione, si definisce creazione di funzioni o metodi.

Grazie alle funzioni non solo è possibile evitare la scrittura di operazioni identiche per più volte, ma si ottimizza anche la manutenzione del software, in quanto modificando un solo codice, si può agire su più elementi nel quale questo codice è utilizzato.

A differenza del normale codice PHP, che viene eseguito nello stesso momento in cui viene processato dal compilatore, le funzioni sono eseguite esclusivamente nel momento in cui sono chiamate.

Funzioni del PHP

Come crearle

Per poter creare una funzione, si utilizza la seguente sintassi

<?php
	/* Definisco una funzione chiamata "stampa_ciao"
	 * che stampa sullo schermo "Ciao Mondo!"
	 */
	function stampa_ciao() {
		echo "Ciao Mondo!";
	}
	
	
	# Richiamo la funzione 
	stampa_ciao();
?>

Funzioni del PHP

Come crearle

Per le funzioni è posibile anche passare dei parametri (definiti argomenti) oppure ricevere dei valori di ritorno da attribuire per esempio ad una variabile.

<?php
	/* Creo una funzione per effettuare la somma fra due numeri
	 * La funzione richiede obbligatoriamente due argomenti
	 * per il corretto funzionamento, ovvero i due elementi da sommare
	 *    - $x
	 *    - $y
	 * In seguito ritornerà il valore risultante
	 */
	function somma($x, $y) {
		$addizione = $x+$y;
		return $addizione;
	}
	
	
	# Richiamo la funzione e assegno ad una variabile il risultato (return)
	$risultato = somma(3, 5);
	echo "Il risultato è ".$risultato;
?>

Funzioni del PHP

Come crearle

Generalmente se definiti degli argomenti per una funzione, questi sono obbligatori per il corretto funzionamento della stessa.
Se si vuole far sì che alcuni argomenti siano facoltativi, è possibile preimpostare un valore di default

<?php
	/* Creo una funzione per stampare il risultato.
	 * La funzione accetta un parametro chiamato appunto "risultato",
	 * che è però facoltativo, in quanto è stato definito un valore di default
	 * pari a 0 se nessun argomento viene passato
	 */
	function stampa_risultato($risultato = 0) {
		echo "Il risultato è ".$risultato;
	}
	
	
	# Test funzione
	stampa_risultato(10);	# Stamperà "Il risultato è 10"
	stampa_risultato();	# Stamperà "Il risultato è 0"
?>

Funzioni del PHP

Funzioni predefinite: stringhe

Nel PHP sono previste funzioni predefinite per molte delle esigenze più comuni; queste dunque possono essere utilizzate in qualsiasi momento, senza la necessità di riscriverle.
Ecco alcuni esempi per le stringhe

<?php
	$lunghezzaTesto = strlen("Ciao"); 	# Ritornerà 4, ovvero la lunghezza del testo speicifcato
	$parole = str_word_count("Ciao Mondo"); # Ritornerà 2, ovvero le parole contenute nel testo
	
	# Ricerca di un testo all'interno di un'altro testo
	$indice = strpos("Ciao Mondo", "Mondo"); # Ritornerà 5, cioè da dove inizia "Mondo" in "Ciao Mondo"
	
	# Sostituzione del testo in una stringa
	str_replace("Mondo", "Bari", "Ciao Mondo"); # Ritornerà "Ciao Bari"
	
	# Taglio del testo di una stringa
	$iniziali = substr("Francesco", 0, 2); # Prendo le prime due lettere dall'inizio di "Francesco"
	echo $iniziali; # Stamperà "Fr";
	
	echo strtolower("FRANCESCO"); # Stamperà "francesco" tutto in minuscolo
	echo strtoupper("francesco"); # Stamperà "FRANCESCO" tutto in maiuscolo
	
?>

Funzioni del PHP

Funzioni predefinite: stringhe

  • La stringa viene trattada dal PHP un po' come un array, ovvero dal punto di vista logico, la prima lettera avrà indice 0 dell'ipotetico array della stringa
  • E' possibile utilizzare anche funzioni nidificate

    <?php
    	echo substr(strtoupper("ciao mondo"), 0, 4); # Stamperà "CIAO"
    	# Si esegue prima la conversione in maiuscolo del testo e poi il substring
    ?>
    

Funzioni del PHP

Funzioni predefinite: array

Anche per gli array esistono funzioni predefinite

<?php
	$numeri = array(10, 15, 7);
	
	# Conteggio elementi
	echo count($numeri); # Stamperà 3
	
	# Ordinamento crescente
	sort($numeri); # disporrà gli elementi nell'ordine 7, 10, 15
	
	# Ordinamento decrescente
	rsort($numeri); # disporrà gli elementi nell'ordine 15, 10, 7
?>

In seguito all'ordinamento, anche gli indici dell'array saranno aggiornati.

Funzioni del PHP

Funzioni predefinite: array

Per quanto riguarda invece gli array associativi, è possibile ordinare gli elementi basandosi sulle chiavi o sui valori

<?php
	$classifica = array("Juventus" => 1, "Inter" => 10, "Roma" => 2, "Lazio" => 3);
	
	# Ordinamento crescente per valore
	asort($classifica); 
	# modificherà l'array ("Juventus" => 1, "Roma" => 2, "Lazio" => 3, "Inter" => 10)
	
	# Ordinamento decrescente per valore
	arsort($classifica); 
	
	# Ordinamento crescente per chiave
	ksort($classifica); 
	# modificherà l'array ("Inter" => 10, "Juventus" => 1, "Lazio" => 3, "Roma" => 2);
	
	# Ordinamento decrescente per chiave
	krsort($classifica); 
?>

Funzioni del PHP

Funzioni predefinite: array

Ecco invece altre funzioni specifiche

<?php
	$classifica = array("Juventus" => 1, "Inter" => 10, "Roma" => 2, "Lazio" => 3);
	$numeri = array(10, 15, 7);
	
	# Controllo se l'elemento esiste nell'array semplice di $numeri
	in_array(10, $numeri); # ritorna true perchè 10 è presente nell'array
	
	# Controllo se l'elemento esiste nell'array associativo $classifica (per chiave)
	array_key_exists("Bari", $classifica); # ritorna false
?>

Funzioni del PHP

Variabili all'interno delle funzioni

La gestione delle variabili all'interno delle funzioni, si sottopone a regole differenti, proprio perchè le funzioni sono viste dal compilatore del PHP come un elemento distaccato del codice, un vero e proprio componente.

Le variabili possono dunque essere di tre tipologie diverse:

  • locali: nascono e muoiono all'interno della funzione o al di fuori, mantenendo la loro visibilità
  • globali: nascono al di fuori della funzione e possono esser viste anche dalla funzione stessa
  • statiche: nascono nella funzione continuano a vivere (all'interno della funzione) anche dopo la sua esecuzione

Funzioni del PHP

Variabili all'interno delle funzioni

Generalmente tutte le variabili sono locali, ovvero se nascono al di fuori di una funzione, potranno esser viste solo al di fuori e viceversa.

Esempio

<?php
	function test() {
		$x = 5;
		echo $x;
	}
	
	test(); # Stemperà 5 correttamente
	echo $x; # Restituirà un errore in quanto $x non è esistente al di fuori della funzione
?>
<?php
	$x = 5;
	test(); # Restituirà un errore in quanto $x non è esistente per la funzione
	echo $x; # Stemperà 5 correttamente
	
	function test() {
		echo $x;
	}
?>

Funzioni del PHP

Variabili all'interno delle funzioni

Per poter dunque far sì che una variabile sia vista anche all'interno di una funzione, occorre dichiarla come globale.
Esempio

<?php
	$x = 5;
	test(); # Stemperà 5 correttamente
	echo $x; # Stemperà 5 correttamente
	
	function test() {
		global $x; # Dichiaro $x come riferimento alla variabile al di fuori della funzione
		echo $x;
	}
?>

Funzioni del PHP

Variabili all'interno delle funzioni

Generalmente tutte le variabili all'interno delle funzioni, nascono e muoiono con l'esecuzione della funzione stessa.
Per evitare che ciò accada, è possibile definire le variabili come statiche, dunque il loro valore resterà invariato anche nell'utilizzo successivo della stessa funzione

<?php
	function test() {
	    static $x = 0;
	    echo $x;
	    $x++;
	}
	
	test(); # Stampa 0
	test(); # Stampa 1
	test(); # Stampa 2
?>

Funzioni del PHP

Gestione delle funzioni

Per una corretta gestione del codice, solitamente le funzioni non si scrivono all'interno della pagina PHP, visto che molte volte contiene anche codice HMTL.

Come per molti altri linguaggi, le best practices del PHP, prevedono la scrittura all'interno di altri files php, che potranno poi essere "richiamati" o meglio inclusi all'interno del file in cui saranno utilizzate.

Per poter includere file esterni all'interno del codice PHP, si possono utilizzare tre diverse funzioni:

  • include: integra il file all'interno della pagina PHP, non genera errore se il file non viene trovato
  • require: integra il file esattamente come l'include, generando però errore se il file non esiste
  • require_once: funziona come il require, con la differenza che evita un inserimento multiplo del file, qualora già presente

Il funzionamento è pressocchè identico per tutte le tre funzioni

<?php
	include "path/to/file.php";
?>

Si ricorda che il codice sarà inserito esattamente nel punto in cui viene richiamato il file. Dunque resta valido il concetto dello scope delle variabili (locali, statiche o globali)

Sessioni PHP

Visibilità delle informazioni per la navigazione

Sessioni PHP

Il principio delle pagine web dinamiche, prevede sempre un "ricaricamento" delle pagine per ogni singola richiesta; questo comporta dunque il reset di tutte le informazioni, dei processi e dei calcoli effettuati.
In questo modo non sarebbe mai possibile capire esattamente cosa accade nella pagina web e chi lo determina.

Fortunatamente è nato con il web il concetto di sessioni. Si definisce sessione un processo ben definito nel tempo che ha un inizio e una fine; quando visitiamo un sito web, lo navighiamo e poi chiudiamo la pagina, abbiamo effettuato una sessione.
Tutte le azioni effettuate durante la sessione, saranno dunque riconoscibili e associabili dal server alla stessa utenza.

Nel PHP l'utilizzo delle sessioni è reso possibile grazie alle variabili di sessione.

Sessioni PHP

Per poter utilizzare le sessioni, è necessario innanzitutto dichiarare che la pagina web fa parte del flusso di navigazione del sito web, dunque occorre inizializzare il riconoscimento della sessione, tramite l'apposito comando:

<?php
	session_start();
?>

Il comando session_start, deve essere necessariamente inserito all'inizio della pagina, prima di ogni altra cosa.

Una volta dichiarato l'utilizzo della sessione, si può accedere alla variabile superglobale messa a disposizione dal PHP, ovvero un'array di nome $_SESSION.

Proprio come in un array, sarà dunque possibile inserire o prendere elementi dalla sessione.
Il vantaggio rispetto ad un normale array, è che al ricaricamento della pagina o di altre pagine del sito web, la variabile di sessione conserverà le informazioni, rendendole dunque accessibili in qualunque momento!

Sessioni PHP

Esempio di sessione.

Se abbiamo dunque una pagina test1.php

<?php
	session_start();
	
	$_SESSION["nome"] = "Francesco";
?>

In una seconda pagina test2.php, potrò benissimo fare:

<?php
	session_start();
	
	echo "Ciao ".$_SESSION["nome"]; # Stamperà Ciao Francesco
?>

Le sessioni sono infatti l'elemento determinante per la gestione del sistema di login e di riconoscimento dell'utente!

Sessioni PHP

Per poter resettare una variabile di sessione (per esempio nel caso di logout utente), si utilizzano generalmente i due metodi

  • session_unset() - per rimuovere tutte le variabili della sessione (svuotare le celle dell'array)
  • session_destroy() - per cancellare del tutto la sessione

Nel caso in cui si voglia rimuovere esclusivamente una cella dell'array di sessione, è possibile usare il metodo unset()

<?php
	session_start();
	
	unset($_SESSION["nome"]); # Resetta il campo "nome" della sessione
?>

Form PHP

Passaggio informazioni client/server

Form PHP

Come già visto nel modulo HTML, i form sono l'unico punto di collegamento per lo scambio di informazioni tra client e server, ovvero l'unico modo in cui l'utente può inviare informazioni al server.

Le informazioni possono essere trasferite in due diversi metodi:

  • Get
  • Post

Al submit del form, queste informazioni arriveranno dunque ad una pagina PHP (per essere elaborate) e i campi inseriti dall'utente potranno essere accessibili tramite due variabili superglobali, ovvero:

  • $_GET
  • $_POST

Le due variabili superglobali, funzionano così come per $_SESSION, come array associativi, dove la chiave sarà corrispondente all'attributo name dell'input del form, mentre il valore sarà corrispondente all'attributo value.
Ovviamente le variabili superglobali $_GET e $_POST saranno popolate a seconda dell'action specificata nel form HTML.

Form PHP

Se dunque abbiamo un form HTML del tipo

<form action="test.php" method="post">
    Nome: <input type="text" name="nome_utente"><br>
    E-mail: <input type="email" name="email_utente"><br>
    <button type="submit">Invia</button>
</form>

Alla pagina test.php, arriveranno due celle che popoleranno la variabile $_POST

<?php
	$nome = $_POST["nome_utente"];
	$mail = $_POST["email_utente"];
?>

Per esser certi che la pagina riceva dati in GET o POST, è possibile effettuare un riconoscimento utilizzando il metodo $_SERVER["REQUEST_METHOD"]

<?php
	if($_SERVER["REQUEST_METHOD"] == "POST") {
		$nome = $_POST["nome_utente"];
		$mail = $_POST["email_utente"];	
	}else {
		echo "Errore!";
	}
?>

Form PHP

Proprio perchè permettono lo scambio di informazioni, generalmente i form sono la parte più vulnerabile di un sito web, dunque presa di mira da attacchi hacker.
Occorre dunque applicare sempre il maggior numero di controlli per far si che prima di un'elaborazione i dati siano sempre validati.

Generalmente per ogni campo ricevuto in GET o in POST, andrebbero effettuati i seguenti controlli:

  • Rimozione del codice HTML o di scripting dal valore del campo, per evitare attacchi Cross Site Scripting (XSS), ovvero iniezione di codice esterno
  • Rimozione degli spazi in eccesso, per avere valori sempre puliti e ridotti al necessario
  • Rimozione dei backslashes, per evitare problemi di compatibilità (con files o database)

Per far tutto ciò si potrebbe dunque creare una mini funzione in aiuto per ogni singolo campo del form:

<?php
	$nome = pulisci_campo($_POST["nome_utente"]);
	$mail = pulisci_campo($_POST["email_utente"]);
	
	function pulisci_campo($campo) {
		$campo = trim($campo); # Rimuove spazi in eccesso 
		$campo = stripslashes($campo); # Rimuove backslashes
		$campo = htmlspecialchars($campo); # Rimuove codice HTML o di scripting
		return $campo;
	}
?>

Form PHP

Sempre in ottica di un controllo perfetto del form, lato sicurezza e lato raccolta dati, molte volte può essere importante assicurarsi che alcuni campi siano necessariamente inseriti; per questo scopo è possibile utilizzare il metodo empty che determina se una variabile è vuota o meno.
Il metodo empty, ritornerà dunque un valore TRUE se la variabile è vuota, FALSE se non lo è.

Volendo dunque perfezionare il controllo del form precedente:

<?php
	$nome = pulisci_campo($_POST["nome_utente"]);
	$mail = pulisci_campo($_POST["email_utente"]);
	
	if(empty($nome)) echo "Inserire un nome";
	elseif(empty($mail)) echo "Inserire e-mail";
	else echo "Dati corretti!";
	
	function pulisci_campo($campo) {
		$campo = trim($campo); # Rimuove spazi in eccesso 
		$campo = stripslashes($campo); # Rimuove backslashes
		$campo = htmlspecialchars($campo); # Rimuove codice HTML o di scripting
		return $campo;
	}
?>

Form PHP

Per permettere un controllo più accurato dei campi a seconda della loro tipologia, è possibile utilizzare i filtri.
Grazie ai filtri è possibile verificare la correttezza di un campo in base alla tipologia, oppure formattare correttamente il campo per una corretta validazione, rimuovendo i valori in eccesso.

Se per esempio volessi verificare la correttezza dell'email inserita, secondo la sintassi nome + @ + dominio + estensione, potrei utilizzare il filtro per le e-mail

<?php
	if(!filter_var($mail, FILTER_VALIDATE_EMAIL) === false) {
		echo "E-mail valida";
	}else echo "E-mail NON valida!";
?>

Secondo la stessa logica, è possibile validare altre tipologie di campi modificando il filtro:

  • FILTER_VALIDATE_INT: verifica se è il valore è numerico intero
  • FILTER_VALIDATE_FLOAT: verifica se è il valore è numerico decimale
  • FILTER_VALIDATE_URL: verifica se è il valore è un link

Form PHP

Oltre alla validazione dei campi, grazie ai filtri è anche possibile rimuovere i caratteri errati da un campo, generalmente prima della validazione dello stesso.

<?php
	$mail = "francesco.(pisciotta)@brain/in.it";
	
	# Rimuovo i caratteri in eccesso per una e-mail corretta
	$mail = filter_var($mail, FILTER_SANITIZE_EMAIL);
	
	echo $mail; # Stamperà "francesco.pisciotta@brainin.it"
	
	if(!filter_var($mail, FILTER_VALIDATE_EMAIL) === false) {
		echo "E-mail valida";
	}else echo "E-mail NON valida!";
?>

Secondo la stessa logica, anche per i filtri di pulizia, ci sono altre possibilità d'uso a seconda della tipologia

  • FILTER_SANITIZE_STRING: rimuove i caratteri non alfanumerici, inclusi i tags HTML
  • FILTER_SANITIZE_SPECIAL_CHARS: rimuove i caratteri speciali da un testo (come per esempio i simboli ASCII), trasformandoli in codifica HTML, visualizzabile dal browser e gestibile da files e database
  • FILTER_SANITIZE_URL: rimuove i caratteri errati per un link

Gestione dei files

Operazioni sui files di sistema

Gestione dei files

Anche nel PHP è possibile interfacciarsi con i files di un device; in particolar modo può essere molto utile per operazioni di storage o di log, la gestione dei files interni al web server.

Per ogni file sono possibili alcune operazioni:

  • Apertura / Creazione
  • Lettura
  • Scrittura
  • Chiusura

Gestione dei files

Per poter utilizzare un file, si utilizza il comando fopen, al quale occorre specificare il percorso del file da aprire e la tipologia di operazioni che si vogliono effettuare sul file stesso (lettura, scrittura).

<?php
	$file = fopen("path/to/file.txt", TIPOLOGIA);
?>

La tipologia di apertura, può essere a scelta fra

  • r: file aperto in sola lettura
  • w: file aperto in sola scrittura, a partire dall'inizio del file. Crea un nuovo file se non esistente.
  • a: file aperto in sola scrittura, a partire dalla fine del file. Crea un nuovo file se non esistente. Non permette dunque di sovrascrivere i contenuti precedenti.
  • x: crea un nuovo file per sola scrittura. Ritorna false se il file esiste già.
  • r+: file aperto per scrittura e lettura, a partire dall'inizio del file
  • w+: file aperto per scrittura e lettura, a partire dall'inizio del file. Crea un nuovo file se non esistente.
  • a+: file aperto per scrittura e lettura, a partire dalla fine del file. Crea un nuovo file se non esistente. Non permette dunque di sovrascrivere i contenuti precedenti.
  • x+: crea un nuovo file per scrittura e lettura. Ritorna false se il file esiste già.

Gestione dei files

In seguito all'apertura del file, sarà dunque possibile effettuare alcune operazioni.
Ecco una serie di operazioni possibili per la lettura del file:

<?php
	$pathFile = "path/to/file.txt";
	$file = fopen($pathFile, "r"); # Apro il file in sola lettura
	
	# Leggo l'intero contenuto del file
	fread($file, filesize($pathFile)); 
	
	# Leggo il file riga per riga
	while(!feof($file)) {
	  echo fgets($file) . "<br>";
	}
	
	fclose($file);
?>

Al termine delle operazioni con un file, è necessario dichiarare la sua chiusura con il comando fclose()

Gestione dei files

Allo stesso modo potremo procedere per la scrittura in un file

<?php
	$pathFile = "path/to/file.txt";
	
	# Apro il file in sola scrittura (cancellando contenuto precedente o creando nuovo file)
	$file = fopen($pathFile, "w"); 
	
	# Scrivo una nuova riga nel file
	fwrite($file, "Francesco Pisciotta\n");
	
	fwrite($file, "Mario Rossi\n");
	
	fclose($file);
?>

Il comando fwrite() permette dunque la scrittura.
Aggiungendo ad ogni scritta il testo "\n", creiamo nuove linee che ci permetteranno dunque di leggere il testo più agevolmente tramite il ciclo iterativo visto in precedenza.

Gestione dei files

Il sistema dei files permette dunque un processo di archiviazione semplificata delle informazioni.
Per esempio sarebbe possibile conservare in un file i dati degli utenti registrati ad un portale, creando elementi separatori fra i vari campi, nel classico schema di un csv.

Potremmo dunque avere un file del tipo:

Francesco;Pisciotta;16-01-1992;Matera\n
Mario;Rossi;15-10-1990;Bari\n
...

In questo modo, scorrendo il file in lettura e gestendo le variabili o array PHP, potremmo strutturare il processo come un vero e proprio database.
A tal proposito occorre tener presente di due funzioni del PHP per la conversione di testo e array.

<?php
	# Esempio test ==> array
	$testo = "Francesco;Pisciotta;16-01-1992;Matera";
	
	# Divido i campi separati dal ";" inserendoli in un array
	$mioarray = explode(";", $testo);
	
	# Viceversa volendo ripristinare l'array in testo, separando i campi dal simbolo ";"
	$nuovotesto = implode(";", $mioarray);
?>

Esercitazione

Sistema di autenticazione

Esercitazione

Creare un'interfaccia di registrazione e login partendo dall'esercitazione HTML e CSS.

  • Utilizzare un file per l'archiviazione degli utenti
  • La registrazione raccoglierà i campi nome, email, password e data di nascita e imposterà un ruolo di default per l'utente
  • Il login e la registrazione devono rispettare questa interfaccia
  • In seguito alla registrazione o al login, l'utente potrà solamente effettuare il logout. Far sì che la sua sessione resti attiva fino a quando il logout non viene eseguito. (link al design)
  • Creare un utente di tipo admin con dati predefiniti e non modificabili, che in seguito al login possa visualizzare gli utenti registrati ed eliminare solamente quelli non amministratori (link al design)

<Thank u!>

Sempre pronto a darti una mano