PHP
• Linguaggio di scripting lato server (progettato specificatamente per il Web)
• Inserimento di codice PHP in una pagina XHTML (sul server):
▪ Interpretazione del codice PHP (sul server)
▪ Generazione di una nuova pagina XHTML
▪ Invio della nuova pagina XHTML al client
Client
Form XHTML action = “file.php”
Invio dati di input
Server Interpretazione
“file.php”
Nuova pagina XHTML
Invio pagina XHTML generata
MySQL Istruzioni
SQL
PHP: Punti di Forza
• Prestazioni
• Scalabilità
• Interfacciamento verso svariati DBMS
• Librerie orientate allo sviluppo di applicazioni web
• Costo
• Facilità d’apprendimento e d’uso
• Supporto object-oriented
• Portabilità
• Disponibilità del codice sorgente
• Disponibilità di supporto e documentazione ( http://www.php.net/ )
Compilazione Form
Compilazione Form: modulo_ordine.html
<form action="gestisci_ordine.php" method="post">
<table border="0" cellspacing="10">
<colgroup>
<col width="70%" />
<col align="center" />
</colgroup>
<thead style="background-color:lavender">
<tr><th>Articolo</th><th>Quantità</th></tr>
</thead>
<tr>
<td>Flauto</td>
<td><input type="text" name="qflauto" size="3" maxlength="3" /></td>
</tr>
<tr>
<td>Violino</td>
<td><input type="text" name="qviolino" size="3" maxlength="3" /></td>
</tr>
<tr>
<td>Oboe</td>
<td><input type="text" name="qoboe" size="3" maxlength="3" /></td>
</tr>
<tr>
<td>Liuto</td>
<td><input type="text" name="qliuto" size="3" maxlength="3" /></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="Spedisci Ordine" /></td>
</tr>
Gestione Form
Gestione Form: gestisci_ordine.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Strumenti Musicali in Franciacorta</title>
</head>
<body>
<h1>Strumenti Musicali in Franciacorta</h1>
<h2>Gestione Ordine<h2>
<?php
echo "<p>Ordine gestito. Grazie per aver scelto i nostri prodotti.</p>";
?>
</body>
</html>
Struttura del Codice PHP
• Codice PHP incapsulato tra due tag :
• Istruzioni PHP terminate dal punto-e-virgola:
• Commenti in tre diversi stili:
<?php
... codice PHP ...
?>
echo 'Hello ';
echo 'world!';
/* Autore: Luigi Rossi
Ultima modifica: 3 settembre 2009
Questo script gestisce gli ordini dei clienti
*/
echo '
<p>Ordine gestito.</p>'
; // Inizio stampa ordineecho '
<p>Ordine gestito.</p>'
; # Inizio stampa ordineContenuto Dinamico: gestisci_ordine_2.php
• Argomento della funzione date() = stringa che specifica il formato:
▪ H = ore (in formato 24-ore)
▪ i = minuti
▪ j = giorno del mese
▪ S = suffisso ordinale (tipicamente, th)
▪ F = nome del mese
<body>
<h1>Strumenti Musicali in Franciacorta</h1>
<h2>Gestione Ordine<h2>
<?php
echo '<p>Ordine gestito alle ore ';
echo date("H:i, jS F");
echo '. Grazie per aver scelto i nostri prodotti.</p>';
?>
</body>
Contenuto Dinamico
Accesso alle Variabili del Form
• Accesso ai campi del form mediante elementi di array associativi:
▪ method="post" → $_POST['qviolino']
▪ method="get" → $_GET['qviolino']
• Array associativo:
• Possibile copiare valori in nuove variabili:
'qflauto' 2 'qviolino' 3 'qoboe' 2 'qliuto' 4
<?php
$qflauto = $_POST['qflauto'];
$qviolino = $_POST['qviolino'];
$qoboe = $_POST['qoboe'];
$qliuto = $_POST['qliuto'];
?>
chiave valore
Accesso alle Variabili del Form: gestisci_ordine_3.php
• Operatore . (punto): genera la concatenazione delle stringhe
• Possibile inserire direttamente una variabile semplice nella stringa:
• Stringhe tra apici semplici: non applicano alcuna sostituzione:
<body>
<h1>Strumenti Musicali in Franciacorta</h1>
<h2>Gestione Ordine<h2>
<?php
echo "<p>Ordine gestito alle ore ";
echo date("H:i, jS F");
echo ". Grazie per aver scelto i nostri prodotti.</p>";
echo "<p>Ecco la lista degli articoli ordinati:</p>";
echo $_POST['qflauto'] . ' flauti <br />';
echo $_POST['qviolino'] . ' violini <br />';
echo $_POST['qoboe'] . ' oboe <br />';
echo $_POST['qliuto'] . ' liuti <br />';
?>
</body>
echo "$qoboe oboe <br />";
echo '$qoboe oboe <br />';
2 oboe
$qoboe oboe
Accesso alle Variabili del Form: Pagina Dinamica
Variabili
• Variabile = simbolo che rappresenta un dato
• Nome di una variabile (identificatore):
▪ Formato da lettere, cifre e underscore ‘_’
▪ Lunghezza illimitata
▪ Non può iniziare con una cifra
▪ Case sensitive: $qviolino ≠ $Qviolino
• Possibile creare variabili “a volontà”
• Variabile creata nel momento in cui viene assegnata la prima volta
$quantita = 0;
$costo = 0.00;
...
$quantita = $qviolino;
Tipi di Variabili
• Altri due tipi “speciali”:
▪ NULL: variabili cui non è assegnato un valore o sono state assegnate con NULL
▪ Resource: rappresentano risorse esterne (esempio: connessione al database)
• Variabili “elastiche” nel tipo di dati:
• Cast di tipo:
Tipo Natura del dato integer Numeri interi
double Numeri reali
string Stringhe di caratteri
bool Valori logici (true o false) array Vettori di dati
$quantita = 0;
$quantita = 'Hello';
$quantita = 0;
Costanti
• Mantiene un valore (come una variabile), che però non può essere cambiato
• Referenziazione della costante:
define('PREZZO_FLAUTO', 2500);
define('PREZZO_VIOLINO', 8000);
define('PREZZO_OBOE', 5400);
define('PREZZO_LIUTO', 11000);
define(nome-costante, valore)
define('PREZZO_FLAUTO', 2500);
$quantita = 4;
$costo = PREZZO_FLAUTO * $quantita;
Scope
• Scope di una variabile $v = porzione del codice in cui è visibile $v :
▪ Variabili superglobali sono visibili ovunque nello script
▪ Costanti sono visibili ovunque nello script
▪ Variabili globali sono visibili ovunque nello script, tranne che nelle funzioni
▪ Variabili dichiarate globali nelle funzioni si riferiscono alle omonime variabili dichiarate globali fuori delle funzioni
▪ Variabili dichiarate statiche in una funzione sono visibili solo nella funzione ma mantengono il loro valore tra una chiamata e l’altra della funzione
▪ Variabili locali create in una funzione sono visibili solo nelle funzione e
scompaiono al termine della esecuzione della funzione
Superglobali
• $GLOBALS : array di tutte le variabili globali (utile per accedere alle variabili globali dall’interno di una funzione, come con la keyword global)
• $_SERVER : array delle variabili di ambiente del server web, ad esempio:
▪ $_SERVER['DOCUMENT_ROOT'] = path assoluto della root dei documenti
▪ $_SERVER['PHP_SELF'] = path del file di scripting relativo alla root
▪ $_SERVER['SCRIPT_FILENAME'] = path assoluto del file di scripting
• $_GET: array delle variabili passate allo script mediante il metodo get
• $_POST: array delle variabili passate allo script mediante il metodo post
• $_COOKIE : array delle variabili cookie
• $_FILE : array delle variabili relative a caricamento di file sul server
• $_ENV : array delle variabili di ambiente del sistema operativo del server
• $_REQUEST : array di tutte le variabili di input, incluse quelle in $_GET , $_POST e
$_COOKIE (ma non $_FILES )
• $_SESSION : array delle variabili di sessione
Operatori
• Simboli per manipolare valori (costanti e/o variabili) → producono un risultato
• Operatori aritmetici:
• Operatore di concatenazione di stringhe:
Simbolo Nome Esempio
+ Addizione $a + $b
- Sottrazione $a - $b
∗ Moltiplicazione $a ∗ $b
/ Divisione $a / $b
% Modulo $a % $b
$a = 'Strumenti Musicali ';
$b = 'in Franciacorta';
$titolo = $a . $b;
Operatori (ii)
• Operatore di assegnamento:
• Assegnamento produce un valore (quello della espressione nella parte destra) :
• Operatori di assegnamento combinato:
variabile = espressione
$b = 6 + ($a = 5);
5
11
Simbolo Esempio Equivalente a += $a += $b $a = $a + $b -= $a -= $b $a = $a - $b
∗= $a ∗= $b $a = $a ∗ $b /= $a /= $b $a = $a / $b
%= $a %= $b $a = $a % $b
.= $a .= $b $a = $a . $b
Operatori (iii)
• Operatori di incremento (++) e decremento (--)
• Entrambi gli operatori presenti in due forme:
▪ Prima della variabile: → prima $a è incrementato (6), e poi valutato (6)
▪ Dopo la variabile: → prima $a è valutato (5), e poi incrementato (6)
$a = 5;
echo ++$a;
$a = 5;
echo $a++;
$a = 3;
$b = 6;
echo ($a--) * (++$b);
$a: 2
$b: 7 echo: 21
6
5
Operatori (iv)
• Operatori di confronto:
• Operatore identità: operandi uguali e dello stesso tipo
Simbolo Nome Esempio
== Uguaglianza $a == $b
=== Identità $a === $b
!= Disuguaglianza $a != $b
!== Non identità $a !== $b
< Minore di $a < $b
> Maggiore di $a < $b
<= Minore o uguale $a <= $b
>= Maggiore o uguale $a >= $b
$a = 0;
$b = '0';
$a == $b: true
$a === $b: false
Operatori (v)
• Operatori logici: Simbolo Nome Esempio Risultato
! NOT !$a
$a !$a true false false true
&& AND $a && $b
$a $b $a && $b
true true true
true false false false true false false false false
|| OR $a || $b
$a $b $a || $b
true true true
true false true
false true true
false false false
Operatori (vi)
• Operatore condizionale (ternario):
( condizione ? valore-se-vera : valore-se-falsa )
echo ($voto >= 18 ? 'promosso' : 'bocciato')
$max = ($a >= $b ? $a : $b)
$max3 = ($a >= $b && $a >= $c ? $a : ($b >= $c ? $b : $c))
echo 'Hai ordinato ' . $qviolino . ' violin' . ($qviolino == 1 ? 'o' : 'i')
Applicazione a Gestione Form: gestisci_ordine_4.php
...
$quantita_totale = 0;
$quantita_totale = $_POST['qflauto'] + $_POST['qviolino'] + $_POST['qoboe'] + $_POST['qliuto'];
echo "Articoli ordinati: $quantita_totale <br />";
$costo_totale = 0.00;
define('PREZZO_FLAUTO', 2500);
define('PREZZO_VIOLINO', 8000);
define('PREZZO_OBOE', 5400);
define('PREZZO_LIUTO', 11000);
$costo_totale = $_POST['qflauto'] * PREZZO_FLAUTO + $_POST['qviolino'] * PREZZO_VIOLINO + $_POST['qoboe'] * PREZZO_OBOE +
$_POST['qliuto'] * PREZZO_LIUTO;
echo "Totale netto: €" . number_format($costo_totale, 2) . "<br />";
$iva = 0.20;
$costo_totale *= (1 + $iva);
echo "Totale lordo (IVA inclusa): €" . number_format($costo_totale, 2) . "<br />";
Applicazione Operatori a Gestione Form (ii)
Funzioni di Variabili
• Testing dello stato di una variabile:
▪ isset($var): true se $var esiste, altrimenti false
isset($a, $b, $c, ... ): true se tutte esistono, altrimenti false
▪ unset($var): elimina $var
▪ empty($var): true se $var non esiste o ha valore zero, altrimenti false
$qviolino = 3;
$qarpa = 0;
echo 'echo1: ' . isset($qviolino) . '<br />';
echo 'echo2: ' . isset($qtimpani) . '<br />';
echo 'echo3: ' . empty($qviolino) . '<br />';
echo 'echo4: ' . empty($qtimpani) . '<br />';
echo 'echo5: ' . empty($qarpa) . '<br />';
echo1: 1 echo2:
echo3:
echo4: 1
echo5: 1
echo6: 1
Istruzione if
• Il blocco istruzioni viene eseguito solo se condizione è vera
if(condizione ) istruzioni
if($quantita_totale == 0)
echo 'Non hai ordinato alcun articolo! <br />';
if($costo_totale >= 30000) {
echo 'Hai diritto ad uno sconto del 10% <br />';
echo 'Oppure, se preferisci, puoi avere un articolo gratis! <br />';
}
Istruzione else
• Blocco istruzioni eseguito solo se la condizione del precedente if è falsa
else istruzioni
if($quantita_totale == 0)
echo "Non hai ordinato alcun articolo! <br />";
else {
echo 'Ecco la lista degli articoli: <br />';
echo '<ul>';
echo "<li>$qflauto flauti</li>";
echo "<li>$qviolino violini</li>";
echo "<li>$qoboe oboe</li>";
echo "<li>$qliuto liuti</li>";
echo "</ul>";
}
Istruzione elseif
• Usato quando si hanno più di due rami decisionali:
• Eseguito solo il blocco di istruzioni corrispondente alla prima condizione vera
• Se nessuna condizione vera, eseguito il blocco della else (se specificata)
elseif ( condizione ) istruzioni
if($costo_totale <= 10000) $sconto = 0.0;
elseif($costo_totale > 10000 && $costo_totale <= 20000) $sconto = 0.10;
elseif($costo_totale > 20000 && $costo_totale <= 40000) $sconto = 0.20;
elseif($costo_totale > 40000 && $costo_totale <= 80000) $sconto = 0.25;
else
$sconto = 0.30;
Istruzione switch: Estensione Modulo Ordine
• Usato quando si hanno diverse computazioni in corrispondenza dei diversi valori di una espressione
switch ( espressione ) {
case const1: istruzioni1
…
case constn: istruzionin
[ default: istruzioni ] }
Istruzione switch: modulo_ordine_esteso.html
...
<tr>
<td>Come hai conosciuto il nostro negozio?</td>
<td>
<select name="conosciuto">
<option value="a">Cliente abituale</option>
<option value="t">Spot in televisione</option>
<option value="g">Pagine gialle</option>
<option value="i">Ricerca in internet</option>
</select>
</td>
</tr>
...
...
switch($_POST['conosciuto']) {
case 'a': echo '<p>Cliente abituale</p>';
break;
case 't': echo '<p>Ciente informato da spot in televisione</p>';
break;
case 'g': echo '<p>Ciente informato da pagine gialle</p>';
break;
case 'i': echo '<p>Ciente informato da ricerca in internet</p>';
break;
default: echo '<p>Non sappiamo come il cliente ci abbia conosciuto</p>';
}
gestione_ordine_esteso.php
Iterazioni
• Quando necessario eseguire lo stesso blocco di istruzioni più volte
Iterazioni: tabella_costi.html
<table border="1" cellspacing="0" cellpadding="10">
<thead style="background-color:lavender">
<tr>
<th>Distanza (Km)</th>
<th>Costo (€)</th>
</tr>
</thead>
<tr>
<td>100</td>
<td>50</td>
</tr>
<tr>
<td>200</td>
<td>100</td>
</tr>
...
<tr>
<td>500</td>
<td>250</td>
</tr>
</table>
Ciclo while: tabella_costi.php
• Blocco istruzioni eseguito finchè condizione è vera
while( condizione ) istruzioni
<table border="1" cellspacing="0" cellpadding="10">
<thead style="background-color:lavender">
<tr>
<th>Distanza (Km)</th>
<th>Costo (€)</th>
</tr>
</thead>
<?php
$distanza = 100;
while($distanza <= 500) {
echo '<tr><td>' . $distanza . '</td>';
echo '<td>' . ($distanza/2) . '</td></tr>';
$distanza += 100;
}
?>
Ciclo for
• Significato esprimibile in termini di ciclo while:
for(espressione
1; espressione
2; espressione
3)
istruzioni espressione
1;
while(espressione
2) {
istruzioni
espressione
3; }
<table border="1" cellspacing="0" cellpadding="10">
<thead style="background-color:lavender">
<tr>
<th>Distanza (Km)</th>
<th>Costo (€)</th>
</tr>
</thead>
<?php
for($distanza = 100; $distanza <= 500; $distanza += 100) {
echo '<tr><td>' . $distanza . '</td>';
echo '<td>' . ($distanza/2) . '</td></tr>';
}
?>
</table>
tabella_costi_a.php
Ciclo do…while
• Simile al ciclo while, ma condizione testata dopo l’esecuzione di istruzioni
do
istruzioni
while (condizione )
<table border="1" cellspacing="0" cellpadding="10">
<thead style="background-color:lavender">
<tr>
<th>Distanza (Km)</th>
<th>Costo (€)</th>
</tr>
</thead>
<?php
$distanza = 100;
do {
echo '<tr><td>' . $distanza . '</td>';
echo '<td>' . ($distanza/2) . '</td></tr>';
$distanza += 100;
}while($distanza <= 500)
?>
Esercizio 1
• Calcolare l'operazione specificata:
modulo_operazione.html gestisci_operazione.php
Esercizio 2
• Calcolare l'operazione specificata:
modulo_numeri_primi.html gestisci_numeri_primi.php
Esercizio 3
• Generare la tabella pitagorica (di dimensione data):
modulo_tabella_pitagorica.html
gestisci_tabella_pitagorica.php
Esercizio 4
• Generare la tabella delle potenze (dati numero di basi e numero di esponenti ):
modulo_tabella_potenze.html
gestisci_tabella_potenze.php
Esercizio 5
• Pannello dei colori: cambia il colore dello sfondo selezionando il bottone
colori.php colori.php colori.php
Esercizio 6
• Definizione del colore nella notazione RGB:
rgb.php rgb.php rgb.php
rgb.php rgb.php rgb.php
Esercizio 7
• Spettro dei colori:
spectrum.php