Tecnologie lato Server:
PHP: Hypertext Preprocessor
Stefano Clemente
[email protected]
© 2005 Stefano Clemente
I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto in italiano:
© 2002 Prentice Hall
H. M. Deitel, P. J. Deitel, T. R. Nieto
Internet & World Wide Web – How To Program (Second Edition)
Riferimenti bibliografici
• H. M. Deitel, P. J. Deitel, T. R. Nieto
Internet & World Wide Web – How
To Program (Second Edition)
ed. Prentice Hall 2002
Capitolo 29
• http://www.php.net
24 Novembre 2005
Stefano Clemente
2
Introduzione
• PHP: PHP Hypertext Preprocessor –
Linguaggio di scripting per creazione di pagine
web a contenuto dinamico
• Creato nel 1994 da Rasmus Lerdorf per tenere
traccia degli utenti del proprio sito web
• Nel 1995 rilascio di un pacchetto denominato
“Personal Home Page Tools”
• PHP2: ha incluso il supporto per i DB e per la
gestione dei form
• PHP3: riscrittura del parser e incremento
performance – esplosione degli utilizzatori
• PHP4: Zend Engine – più velocità e più
potenza
24 Novembre 2005
Stefano Clemente
3
Introduzione
• PHP è una tecnologia open-source
• È platform-independent
− UNIX
− Linux
− Windows
• Include il supporto per la maggior parte dei
DB incluso MySQL
• Il codice
− è incluso direttamente nei documenti XHTML
− è inserito tra due delimitatori <?php e ?>
− può essere in qualsiasi parte del documento purché
racchiuso dai due delimitatori
24 Novembre 2005
Stefano Clemente
4
Esempio 1
24 Novembre 2005
Stefano Clemente
5
Esempio 1
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- Fig. 29.1: first.php -->
<!-- Our first PHP script -->
<?php
$name = "Paul";
?>
// declaration
1
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>A simple PHP document</title>
</head>
<body style = "font-size: 2em">
<p>
<strong>
<!-- print variable name’s value -->
Welcome to PHP, <?php print( "$name" ); ?>!
</strong>
</p>
</body>
</html>
24 Novembre 2005
Stefano Clemente
2
6
Osservazioni sull’Esempio 1
• Script 1
− dichiara la variabile $name assegnandole la stringa
"Paul"
− le variabili precedute dal $ sono create la prima
volta che l’interprete PHP le incontra
− le istruzioni PHP sono terminate da un “;”
− accanto alla dichiarazione c’è un commento su
singola linea
• inizia con “//” e tutto ciò che compare alla destra dei due
slash è ignorato dall’interprete
• i commenti possono cominciare anche con un “#”
• I commenti su righe multiple sono racchiusi dai delimitatori
/* e */
24 Novembre 2005
Stefano Clemente
7
Osservazioni sull’Esempio 1
• Script 2
− stampa il valore della variabile $name attraverso la
funzione print e non "$name"
− quando l’interprete incontra una variabile tra gli
apici doppi, esegue un’interpolazione, vale a dire
inserisce il valore della variabile nel punto della
stringa in cui appare il nome della stessa
• se la variabile compare in una stringa racchiusa tra apici
singoli, l’interprete non effettua l’interpolazione
24 Novembre 2005
Stefano Clemente
8
Installazione
24 Novembre 2005
Stefano Clemente
9
Installazione
24 Novembre 2005
Stefano Clemente
10
Installazione
24 Novembre 2005
Stefano Clemente
11
Installazione
24 Novembre 2005
Stefano Clemente
12
Installazione
24 Novembre 2005
Stefano Clemente
13
Installazione
24 Novembre 2005
Stefano Clemente
14
Installazione
24 Novembre 2005
Stefano Clemente
15
Configurazione IIS
24 Novembre 2005
Stefano Clemente
16
Configurazione IIS
24 Novembre 2005
Stefano Clemente
17
Configurazione IIS
24 Novembre 2005
Stefano Clemente
18
Configurazione Apache
• Aggiungere al file httpd.conf le seguenti
righe
ScriptAlias /php/ "c:/php/“
AddType application/x-httpd-php .php
Action application/x-httpd-php "/php/php.exe"
24 Novembre 2005
Stefano Clemente
19
File .php
24 Novembre 2005
Stefano Clemente
20
Tipi di dati e variabili
• Le variabili PHP sono multitipo – possono
contenere diversi tipi di dato in diversi
momenti
• Tipi di dati
− Integer – numeri interi
− Double – numeri reali
− String – testo racchiuso tra apici singoli (' ') o
doppi (" ")
− Boolean – true o false
− Array – gruppo di elementi dello stesso tipo
− Object – gruppo di dati e metodi associati
− Resource – sorgente esterna di dati
− Null – nessun valore
24 Novembre 2005
Stefano Clemente
21
Esempio 2
24 Novembre 2005
Stefano Clemente
22
Esempio 2
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Fig. 29.3: data.php
-->
<!-- Demonstration of PHP data types -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>PHP data types</title>
</head>
<body>
<?php
?>
// declare a string, double and integer
$testString = "3.5 seconds";
$testDouble = 79.2;
$testInteger = 12;
<!-- print each variable’s value -->
<?php print( $testString ) ?> is a string.<br />
<?php print( $testDouble ) ?> is a double.<br />
<?php print( $testInteger ) ?> is an integer.<br />
24 Novembre 2005
Stefano Clemente
23
Esempio 2
<br />
Now, converting to other types:<br />
<?php
// call function settype to convert variable
// testString to different data types
print( "$testString" );
settype( $testString, "double" );
print( " as a double is $testString <br />" );
print( "$testString" );
settype( $testString, "integer" );
print( " as an integer is $testString <br />" );
settype( $testString, "string" );
print( "Converting back to a string results in
$testString <br /><br />" );
$value = "98.6 degrees";
// use type casting to cast variables to a
// different type
print( "Now using type casting instead: <br />
As a string - " . (string) $value .
"<br />As a double - " . (double) $value .
"<br />As an integer - " . (integer) $value );
?>
</body>
</html>
24 Novembre 2005
Stefano Clemente
24
Conversione tra tipi di dati
• Può essere necessaria per eseguire operazioni
aritmetiche con le variabili
• Si può usare la funzione settype i cui
argomenti sono
− la variabile della quale si vuole cambiare il tipo di
dato
− il nuovo tipo di dato della variabile
• Può comportare perdita di dati
− double troncati se convertiti in interi
• Se si converte un stringa in numero
− viene usato il numero all’inizio della stringa
− altrimenti vale 0
24 Novembre 2005
Stefano Clemente
25
Conversione tra tipi di dati
• Un altro modo per eseguire la conversione è il
casting
• Si antepone tra parentesi il tipo di dato alla
variabile
− Es: (double) $variabile
• A differenza della settype il casting non
cambia il contenuto della variabile
• Il casting crea una copia temporanea della
variabile in memoria
• Utile quando uno specifico tipo di dato è
richiesto in un’operazione aritmetica
24 Novembre 2005
Stefano Clemente
26
print
• Esegue la stampa sul documento XHTML
delle stringhe
• Può stampare una o più stringhe
concatenate attraverso l’operatore "."
• Un comando print può essere suddiviso
su più righe
− tutto ciò che è compreso tra le parentesi "("
e ")" e seguito da ";" viene inviato al client
24 Novembre 2005
Stefano Clemente
27
Esempio 3
24 Novembre 2005
Stefano Clemente
28
Esempio 3
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<!-- Fig. 29.4: operators.php
-->
<!-- Demonstration of operators -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Using arithmetic operators</title>
</head>
<body>
<?php
$a = 5;
print( "The value of variable a is $a <br />" );
24 Novembre 2005
Stefano Clemente
29
Esempio 3
// define constant VALUE
define( "VALUE", 5 );
// add constant VALUE to variable $a
$a = $a + VALUE;
print( "Variable a after adding constant VALUE is $a <br />" );
// multiply variable $a by 2
$a *= 2;
print( "Multiplying variable a by 2 yields $a <br />" );
// test if variable $a is less than 50
if ( $a < 50 )
print( "Variable a is less than 50 <br />" );
// add 40 to variable #a
$a += 40;
print( "Variable a after adding 40 is $a <br />" );
// test if variable $a is 50 or less
if ( $a < 51 )
print( "Variable a is still 50 or less<br />" );
24 Novembre 2005
Stefano Clemente
30
Esempio 3
// test if variable $a is between 50 and 100, inclusive
elseif ( $a < 101 )
print( "Variable a is now between 50 and 100,
inclusive<br />“);
else
print( "Variable a is now greater than 100 <br />" );
// print an uninitialized variable
print( "Using a variable before initializing:
$nothing <br />" );
// add constant VALUE to an uninitialized variable
$test = $num + VALUE;
print( "An uninitialized variable plus constant
VALUE yields $test <br />" );
// add a string to an integer
$str = "3 dollars";
$a += $str;
print( "Adding a string to an integer yields $a <br />" );
?>
</body>
</html>
24 Novembre 2005
Stefano Clemente
31
Osservazioni sull’Esempio 3
• define
− definisce una costante
− richiede due argomenti
• nome della costante
• valore della costante
− è previsto un terzo argomento booleano che indica se la
costante è case-insensitive (true)
• le costanti sono case-sensitive per default
• Abbreviazioni sintattiche per l’assegnamento
− +=, -=, *=, /=
• Le variabili non inizializzate valgono undef, che ha
diversi significati a seconda del contesto
− numeri → 0
− stringhe → ""
• Le stringhe sono convertite automaticamente in valori
aritmetici quando sono usate in operazioni aritmetiche
24 Novembre 2005
Stefano Clemente
32
PHP keywords
PHP keywords
and
break
case
class
continue
default
24 Novembre 2005
do
else
elseif
extends
false
for
foreach
function
global
if
include
list
new
not
or
Stefano Clemente
require
return
static
switch
this
true
var
virtual
xor
while
33
Array
• Gli elementi di un array sono acceduti attraverso un
indice racchiuso tra parentesi quadre
$nome_array [ indice ]
• Un array viene creato quando si assegna un valore a
un array che non esiste
• Se si assegna un valore a un array senza specificarne
l’indice, viene automaticamente aggiunto un elemento
alla fine dell’array
• Il primo elemento di un array ha indice 0
• Si può creare un array anche attraverso la funzione
array, che restituisce un array i cui elementi
contengono i valori passati come argomenti alla
funzione
array ( valore_1, .. , valore_n)
24 Novembre 2005
Stefano Clemente
34
Array
• Un array può avere anche indici non numerici
(es. stringhe)
• PHP fornisce funzioni che consentono
l’iterazione sugli elementi di un array
• Ogni array ha un puntatore interno che ad
ogni istante punta a un elemento dell’array
− reset – setta il puntatore al primo elemento
dell’array
− key – restituisce l’indice dell’elemento a cui punta il
puntatore
− next – sposta il puntatore all’elemento successivo
• se non esiste un elemento successivo restituisce false
24 Novembre 2005
Stefano Clemente
35
Array
• La funzione array può essere utilizzata anche
per creare un array con indici non numerici
• In questo caso viene usato l’operatore => per
impedire la creazione automatica di indici
numerici
array ( indice_1 => valore_1, .. ,
indice_n => valore_n )
• Un’altra struttura di iterazione utilizzabile con
gli array è il foreach
foreach ( $array as $elemento =>
$variabile ) <istruzione>;
estrae ad ogni ciclo un elemento e ne salva
l’indice in $elemento e il valore in $variabile
24 Novembre 2005
Stefano Clemente
36
Esempio 4
24 Novembre 2005
Stefano Clemente
37
Esempio 4
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<!-- Fig. 29.6: arrays.php -->
<!-- Array manipulation
-->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Array manipulation</title>
</head>
<body>
<?php
// create array first
print( "<strong>Creating the first
array</strong>
<br />" );
24 Novembre 2005
Stefano Clemente
38
Esempio 4
$first[ 0 ] = "zero";
$first[ 1 ] = "one";
$first[ 2 ] = "two";
$first[] = "three";
// print each element’s index and value
for ( $i = 0; $i < count( $first ); $i++ )
print( "Element $i is $first[$i] <br />" );
print( "<br /><strong>Creating the second array
</strong><br />" );
);
24 Novembre 2005
// call function array to create array second
$second = array( "zero", "one", "two", "three"
for ( $i = 0; $i < count( $second ); $i++ )
print( "Element $i is $second[$i] <br />" );
Stefano Clemente
39
Esempio 4
print( "<br /><strong>Creating the third array </strong><br />" );
// assign values to non-numerical indices
$third[ "Harvey" ] = 21;
$third[ "Paul" ] = 18;
$third[ "Tem" ] = 23;
// iterate through the array elements and print each
// element’s name and value
for ( reset( $third ); $element = key( $third ); next( $third ) )
print( "$element is $third[$element] <br />" );
print( "<br /><strong>Creating the fourth array </strong><br />" );
// call function array to create array fourth using
// string indices
$fourth = array(
"January"
=> "first",
"February" => "second",
"March"
=> "third",
"April"
=> "fourth",
"May"
=> "fifth",
"June"
=> "sixth",
"July"
=> "seventh", "August"
=> "eighth",
"September" => "ninth",
"October" => "tenth",
"November" => "eleventh","December" => "twelfth"
);
// print each element’s name and value
foreach ( $fourth as $element => $value )
print( "$element is the $value month <br />" );
?>
</body>
</html>
24 Novembre 2005
Stefano Clemente
40
Manipolazione di Stringhe ed
Espressioni Regolari
• L’elaborazione delle stringhe è facile, efficiente con la
possibilità di eseguire la ricerca di sottostringhe, la
sostituzione, la concatenazione e l’estrazione
• La manipolazione di stringhe viene fatta attraverso le
espressioni regolari
− serie di caratteri che servono come criterio di ricerca (patternmatching) in stringhe, file di testo e DB
• Si può eseguire il confronto di due stringhe attraverso
gli operatori relazionali (==, !=, <, <=, >, >=)
• È possibile confrontare due stringhe attraverso la
funzione strcmp che accetta due stringhe come
argomenti e restituisce
− -1 – se la prima stringa precede la seconda in ordine
alfabetico
− 0 – se le stringhe sono uguali
− 1 – se la prina stringa segue la seconda in ordine alfabetico
24 Novembre 2005
Stefano Clemente
41
Esempio 5
24 Novembre 2005
Stefano Clemente
42
Esempio 5
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Fig. 29.7: compare.php -->
<!-- String Comparison
-->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>String Comparison</title>
</head>
<body>
<?php
// create array fruits
$fruits = array( "apple", "orange", "banana" );
// iterate through each array element
for ( $i = 0; $i < count( $fruits ); $i++ ) {
// call function strcmp to compare the array element
24 Novembre 2005
Stefano Clemente
43
Esempio 5
// to string "banana"
if ( strcmp( $fruits[ $i ], "banana" ) < 0 )
print( $fruits[ $i ]." is less than banana " );
elseif ( strcmp( $fruits[ $i ], "banana" ) > 0 )
print( $fruits[ $i ].
" is greater than banana " );
else
print( $fruits[ $i ]." is equal to banana " );
// use relational operators to compare each element
// to string "apple"
if ( $fruits[ $i ] < "apple" )
print( "and less than apple! <br />" );
elseif ( $fruits[ $i ] > "apple" )
print( "and greater than apple! <br />" );
elseif ( $fruits[ $i ] == "apple" )
print( "and equal to apple! <br />" );
}
?>
</body>
</html>
24 Novembre 2005
Stefano Clemente
44
Manipolazione di Stringhe ed
Espressioni Regolari
• Per confronti più sofisticati ci sono le funzioni
ereg e preg_match
− usano le espressioni regolari
• ereg usa Portable Operating System Interface
(POSIX) extended regular expressions
• preg_match usa Perl-compatible regular expressions
− cercano una sottostringa in una stringa secondo il
criterio specificato
• Le espressioni regolari di PHP si riferiscono
allo standard POSIX per cui esamineremo solo
ereg
• ereg accetta due parametri:
− l’espressione regolare che indica il criterio (pattern)
− la stringa dentro la quale effettuare la ricerca
24 Novembre 2005
Stefano Clemente
45
Manipolazione di Stringhe ed
Espressioni Regolari
• Se la ricerca ha esito positivo restituisce true
• ereg esegue una ricerca case sensitive
• PHP fornisce una versione case insensitive:
eregi
• Caratteri speciali della stringa pattern
(metacaratteri)
− ^ – cerca all’inizio della stringa
− $ – cerca alla fine della stringa
− . – qualsiasi singolo carattere
24 Novembre 2005
Stefano Clemente
46
Manipolazione di Stringhe ed
Espressioni Regolari
• Espressioni con parentesi
− liste di caratteri racchiuse tra [ ] – eseguono il confronto di
un singolo carattere della lista
− gli intervalli di caratteri possono essere specificati indicando
gli estremi separati da un trattino – es. [ a – z ]
− espressioni con parentesi speciali
• [[:<:]] – confronta l’inizio delle parole
• [[:>:]] – confronta la fine delle parole
− character class
•
•
•
•
•
•
[[:alnum:]]
[[:alpha:]]
[[:digit:]]
[[:space:]]
[[:lower:]]
[[:upper:]]
24 Novembre 2005
–
–
–
–
–
–
qualsiasi carattere alfanumerico
qualsiasi carattere alfabetico
numeri
spazi
lettere minuscole
lettere maiuscole
Stefano Clemente
47
Manipolazione di Stringhe ed
Espressioni Regolari
• Quantificatori – eseguono il confronto
del pattern che li precede
− {n} – n volte
− {m,n} – tra m e n volte (estremi inclusi)
− {n,} – n o più volte
− + – una o più volte ({1,})
− * – zero o più volte ({0,})
− ? – zero o una volta ({0,1})
24 Novembre 2005
Stefano Clemente
48
Manipolazione di Stringhe ed
Espressioni Regolari
• Per effettuare delle sostituzioni all’interno di
una stringa in base a un criterio di ricerca si
usa la funzione ereg_replace i cui argomenti
sono
− il pattern
− la stringa che rimpiazza la sottostringa
corrispondente al pattern
− la stringa dentro la quale eseguire la ricerca e
l’eventuale sostituzione
• ereg_replace può anche essere usata per
trovare tutte le occorrenze di un pattern
24 Novembre 2005
Stefano Clemente
49
Esempio 6
24 Novembre 2005
Stefano Clemente
50
Esempio 6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<!-- Fig. 29.8: expression.php -->
<!-- Using regular expressions -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Regular expressions</title>
</head>
<body>
<?php
24 Novembre 2005
Stefano Clemente
51
Esempio 6
$search = "Now is the time";
print( "Test string is: '$search'<br /><br />" );
// call function ereg to search for pattern ’Now’
// in variable search
if ( ereg( "Now", $search ) )
print( "String 'Now' was found.<br />" );
// search for pattern ’Now’ in the beginning of
// the string
if ( ereg( "^Now", $search ) )
print( "String 'Now' found at beginning of the line.<br />" );
// search for pattern ’Now’ at the end of the string
if ( ereg( "Now$", $search ) )
print( "String 'Now' was found at the end of the line.<br />" );
// search for any word ending in ’ow’
if ( ereg( "[[:<:]]([a-zA-Z]*ow)[[:>:]]", $search, $match ) )
print( "Word found ending in 'ow': " . $match[ 1 ] . "<br />" );
// search for any words beginning with ’t’
print( "Words beginning with 't' found: ");
24 Novembre 2005
Stefano Clemente
52
Esempio 6
while ( eregi( "[[:<:]](t[[:alpha:]]+)[[:>:]]", $search, $match ) ) {
print( $match[ 1 ] . " " );
// remove the first occurrence of a word beginning
// with ’t’ to find other instances in the string
$search = ereg_replace( $match[ 1 ], "", $search );
}
print ( "<br />" );
print( "<br />" );
print ( "$search" );
print( "<br />" );
?>
</body>
</html>
24 Novembre 2005
Stefano Clemente
53
Variabili d’ambiente
• Poter conoscere l’ambiente del client è utile
per personalizzare le sessioni in base a
informazioni specifiche
• Le variabili d’ambiente contengono le
informazioni sul browser del client, il server
HTTP e la stessa connessione HTTP
• PHP memorizza le variabili d’ambiente e i
relativi valori nell’array $GLOBALS
• Le singole variabili possono essere accedute
usando le chiavi degli elementi di $GLOBALS
24 Novembre 2005
Stefano Clemente
54
Esempio 7
24 Novembre 2005
Stefano Clemente
55
Esempio 7
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Fig. 29.11: globals.php
-->
<!-- Program to display environment variables -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Environment Variables</title>
</head>
<body>
<table border = "0" cellpadding = "2" cellspacing = "0"
width = "100%">
<?php
// print the key and value for each element in the
// in the $GLOBALS array
foreach ( $GLOBALS as $key => $value )
print( "<tr><td bgcolor = \"#11bbff\">
<strong>$key</strong></td>
<td>$value</td></tr>" );
?>
</table>
</body>
</html>
24 Novembre 2005
Stefano Clemente
56
Elaborazione delle Form
• Quando si esegue l’azione di POST o
GET dei dati della form, questi vengono
inviati al web server
• Per ogni campo della form che viene
inviato a uno script PHP, PHP crea una
variabile globale avente lo stesso nome
del campo
24 Novembre 2005
Stefano Clemente
57
Esempio 8
24 Novembre 2005
Stefano Clemente
58
Esempio 8
24 Novembre 2005
Stefano Clemente
59
Esempio 8
24 Novembre 2005
Stefano Clemente
60
Esempio 8
24 Novembre 2005
Stefano Clemente
61
Esempio 8: form.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Fig. 29.13: form.html
-->
<!-- Form for use with the form.php program -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Sample form to take user input in XHTML</title>
</head>
<body>
<h1>This is a sample registration form.</h1>
Please fill in all fields and click Register.
<!-- post form data to form.php -->
<form method = "post" action = "form.php">
<img src = "images/user.gif" alt = "User" /><br />
<span style = "color: blue">
Please fill out the fields below.<br />
24 Novembre 2005
Stefano Clemente
62
Esempio 8: form.html
</span>
<!-- create four text boxes for user input -->
<img src = "images/fname.gif" alt = "First Name" />
<input type = "text" name = "fname" /><br />
<img src = "images/lname.gif" alt = "Last Name" />
<input type = "text" name = "lname" /><br />
<img src = "images/email.gif" alt = "Email" />
<input type = "text" name = "email" /><br />
<img src = "images/phone.gif" alt = "Phone" />
<input type = "text" name = "phone" /><br />
<span style = "font-size: 10pt">
Must be in the form (555)555-5555</span>
<br /><br />
<img src = "images/downloads.gif"
alt = "Publications" /><br />
24 Novembre 2005
Stefano Clemente
63
Esempio 8: form.html
<span style = "color: blue">
Which book would you like information about?
</span><br />
<!-- create drop-down list containing book names -->
<select name = "book">
<option>Internet and WWW How to Program 2e</option>
<option>C++ How to Program 3e</option>
<option>Java How to Program 4e</option>
<option>XML How to Program 1e</option>
</select>
<br /><br />
<img src = "images/os.gif" alt = "Operating System" />
<br /><span style = "color: blue">
Which operating system are you currently using?
<br /></span>
<!-- create five radio buttons -->
<input type = "radio" name = "os" value = "Windows NT"
checked = "checked" />
24 Novembre 2005
Stefano Clemente
64
Esempio 8: form.html
Windows NT
<input type = "radio" name = "os" value =
"Windows 2000" />
Windows 2000
<input type = "radio" name = "os" value =
"Windows 98" />
Windows 98<br />
<input type = "radio" name = "os" value = "Linux" />
Linux
<input type = "radio" name = "os" value = "Other" />
Other<br />
<!-- create a submit button -->
<input type = "submit" value = "Register" />
</form>
</body>
</html>
24 Novembre 2005
Stefano Clemente
65
Esempio 8: form.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Fig. 29.14: form.php
-->
<!-- Read information sent from form.html -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Form Validation</title>
</head>
<body style = "font-family: arial,sans-serif">
<?php
// determine if phone number is valid and print
// an error message if not
if ( !ereg( "^\([0-9]{3}\)[0-9]{3}-[0-9]{4}$",
$phone ) ){
24 Novembre 2005
Stefano Clemente
66
Esempio 8: form.php
print( "<p><span style = \"color: red;
font-size: 2em\">
INVALID PHONE NUMBER</span><br />
A valid phone number must be in the form
<strong>(555)555-5555</strong><br />
<span style = \"color: blue\">
Click the Back button, enter a valid phone
number and resubmit.<br /><br />
Thank You.</span></p></body></html>" );
?>
}
die(); // terminate script execution
<p>Hi
<span style = "color: blue">
<strong>
<?php print( "$fname" ); ?>
</strong>
</span>.
24 Novembre 2005
Stefano Clemente
67
Esempio 8: form.php
Thank you for completing the survey.<br />
You have been added to the
<span style = "color: blue">
<strong>
<?php print( "$book " ); ?>
</strong>
</span>
mailing list.
</p>
<strong>The following information has been saved
in our database:</strong><br />
<table border = "0"
<tr>
<td bgcolor =
<td bgcolor =
<td bgcolor =
<td bgcolor =
</tr>
24 Novembre 2005
cellpadding = "0" cellspacing = "10">
"#ffffaa">Name </td>
"#ffffbb">Email</td>
"#ffffcc">Phone</td>
"#ffffdd">OS</td>
Stefano Clemente
68
Esempio 8: form.php
<tr>
<?php
?>
</tr>
</table>
// print each form field’s value
print( "<td>$fname $lname</td>
<td>$email</td>
<td>$phone</td>
<td>$os</td>" );
<br /><br /><br />
<div style = "font-size: 10pt; text-align: center">
This is only a sample form.
You have not been added to a mailing list.
</div>
</body>
</html>
24 Novembre 2005
Stefano Clemente
69
Gestione dei file
• Un file viene aperto attraverso la funzione
fopen che assegna un file-handle, vale a dire
un numero attraverso il quale il web server
identificherà il file
• fopen accetta due argomenti
− il nome del file
− la modalità con cui aprire il file
• read
• write
• append
• Una volta aperto il file si può leggere o
scrivere rispettivamente attraverso le funzioni
fgets e fputs
24 Novembre 2005
Stefano Clemente
70
Gestione dei file
• fgets
− accetta come parametri un file-handle e
opzionalmente la lunghezza della stringa da leggere
− se si omette la lunghezza legge la linea fino al
raggiungimento del new-line o dell’EOF
− in caso di errore restituisce false
• fputs
− accetta come parametri un file-handle, la stringa da
scrivere e opzionalmente la lunghezza massima
della stringa da scrivere
− restituisce il numero di byte scritti o false in caso
di errore
24 Novembre 2005
Stefano Clemente
71
Gestione dei file
• Alla fine dell’utilizzo il file deve essere
chiuso attraverso la funzione fclose
• fclose accetta come argomento il filehandle
• Restituisce true in caso di successo e
false altrimenti
24 Novembre 2005
Stefano Clemente
72
Esempio 9
24 Novembre 2005
Stefano Clemente
73
Esempio 9
24 Novembre 2005
Stefano Clemente
74
Esempio 9
24 Novembre 2005
Stefano Clemente
75
Esempio 9
24 Novembre 2005
Stefano Clemente
76
Esempio 9
24 Novembre 2005
Stefano Clemente
77
Esempio 9
24 Novembre 2005
Stefano Clemente
78
Esempio 9
24 Novembre 2005
Stefano Clemente
79
Esempio 9
24 Novembre 2005
Stefano Clemente
80
Esempio 9
24 Novembre 2005
Stefano Clemente
81
Esempio 9
24 Novembre 2005
Stefano Clemente
82
Esempio 9: password.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Fig. 29.15: password.html
-->
<!-- XHTML form sent to password.php for verification -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Verifying a username and a password.</title>
<style type = "text/css">
td { background-color: #DDDDDD }
</style>
</head>
<body style = "font-family: arial">
<p style = "font-size: 13pt">
Type in your username and password below.
<br />
24 Novembre 2005
Stefano Clemente
83
Esempio 9: password.html
<span style = "color: #0000FF; font-size: 10pt;
font-weight: bold">
Note that password will be sent as plain text
</span>
</p>
<!-- post form data to password.php -->
<form action = "password.php" method = "post">
<br />
<table border = "0" cellspacing = "0"
style = "height: 90px; width: 123px;
font-size: 10pt" cellpadding = "0">
<tr>
<td colspan = "3">
<strong>Username:</strong>
</td>
</tr>
24 Novembre 2005
Stefano Clemente
84
Esempio 9: password.html
<tr>
<td colspan = "3">
<input size = "40" name = "USERNAME"
style = "height: 22px; width: 115px" />
</td>
</tr>
<tr>
<td colspan = "3">
<strong>Password:</strong>
</td>
</tr>
<tr>
<td colspan = "3">
<input size = "40" name = "PASSWORD"
style = "height: 22px; width: 115px"
type = "password" />
24 Novembre 2005
Stefano Clemente
85
Esempio 9: password.html
<br/></td>
</tr>
<tr>
<td colspan = "1">
<input type = "submit" name = "Enter"
value = "Enter" style = "height: 23px;
width: 47px" />
</td>
<td colspan = "2">
<input type = "submit" name = "NewUser"
value = "New User"
style = "height: 23px" />
</td>
</tr>
</table>
</form>
</body>
</html>
24 Novembre 2005
Stefano Clemente
86
Esempio 9: password.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Fig. 29.16: password.php
-->
<!-- Searching a database for usernames and passwords. -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<?php
// check if user has left USERNAME
// or PASSWORD field blank
if ( !$USERNAME || !$PASSWORD ) {
fieldsBlank();
die();
}
// check if the New User button was clicked
if ( isset( $NewUser ) ) {
24 Novembre 2005
Stefano Clemente
87
Esempio 9: password.php
// open password.txt for writing using append mode
if ( !( $file = fopen( "password.txt",
"append" ) ) ) {
}
// print error message and terminate script
// execution if file cannot be opened
print( "<title>Error</title></head><body>
Could not open password file
</body></html>" );
die();
// write username and password to file and
// call function userAdded
fputs( $file, "$USERNAME,$PASSWORD\n" );
userAdded( $USERNAME );
}
else {
24 Novembre 2005
Stefano Clemente
88
Esempio 9: password.php
// if a new user is not being added, open file
// for reading
if ( !( $file = fopen( "password.txt",
"read" ) ) ) {
print( "<title>Error</title></head>
<body>Could not open password file
</body></html>" );
die();
}
$userVerified = 0;
// read each line in file and check username
// and password
while ( !feof( $file ) && !$userVerified ) {
// read line from file
$line = fgets( $file, 255 );
24 Novembre 2005
Stefano Clemente
89
Esempio 9: password.php
// remove newline character from end of line
$line = chop( $line );
// split username and password
$field = split( ",", $line, 2 );
// verify username
if ( $USERNAME == $field[ 0 ] ) {
$userVerified = 1;
}
24 Novembre 2005
}
// call function checkPassword to verify
// user’s password
if ( checkPassword( $PASSWORD, $field )
== true )
accessGranted( $USERNAME );
else
wrongPassword();
Stefano Clemente
90
Esempio 9: password.php
// close text file
fclose( $file );
}
// call function accessDenied if username has
// not been verified
if ( !$userVerified )
accessDenied();
// verify user password and return a boolean
function checkPassword( $userpassword, $filedata )
{
if ( $userpassword == $filedata[ 1 ] )
return true;
else
return false;
}
24 Novembre 2005
Stefano Clemente
91
Esempio 9: password.php
// print a message indicating the user has been added
function userAdded( $name )
{
print( "<title>Thank You</title></head>
<body style = \"font-family: arial;
font-size: 1em; color: blue\">
<strong>You have been added
to the user list, $name.
<br />Enjoy the site.</strong>" );
}
// print a message indicating permission
// has been granted
function accessGranted( $name )
{
print( "<title>Thank You</title></head>
<body style = \"font-family: arial;
font-size: 1em; color: blue\">
<strong>Permission has been
granted, $name. <br />
24 Novembre 2005
Stefano Clemente
92
Esempio 9: password.php
}
Enjoy the site.</strong>" );
// print a message indicating password is invalid
function wrongPassword()
{
print( "<title>Access Denied</title></head>
<body style = \"font-family: arial;
font-size: 1em; color: red\">
<strong>You entered an invalid
password.<br />Access has
been denied.</strong>" );
}
// print a message indicating access has been denied
function accessDenied()
{
print( "<title>Access Denied</title></head>
<body style = \"font-family: arial;
24 Novembre 2005
Stefano Clemente
93
Esempio 9: password.php
}
font-size: 1em; color: red\">
<strong>
You were denied access to this server.
<br /></strong>" );
// print a message indicating that fields
// have been left blank
function fieldsBlank()
{
print( "<title>Access Denied</title></head>
<body style = \"font-family: arial;
font-size: 1em; color: red\">
<strong>
Please fill in all form fields.
<br /></strong>" );
}
?>
</body>
</html>
24 Novembre 2005
Stefano Clemente
94
Esempio 10
24 Novembre 2005
Stefano Clemente
95
Esempio 10
24 Novembre 2005
Stefano Clemente
96
Esempio 10
24 Novembre 2005
Stefano Clemente
97
Esempio 10
24 Novembre 2005
Stefano Clemente
98
Esempio 10
24 Novembre 2005
Stefano Clemente
99
Esempio 10: data.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- Fig. 29.18: data.html
-->
<!-- Querying a MySQL Database -->
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Sample Database Query</title>
</head>
<body style = "background-color: #F0E68C">
<h2 style = "font-family: arial color: blue">
Querying a MySQL database.
</h2>
<form enctype="multipart/form-data" method = "post" action
= "database.php">
<p>Select a field to display:
24 Novembre 2005
Stefano Clemente
100
Esempio 10: data.html
<!-- add a select box containing options -->
<!-- for SELECT query
-->
<select name = "select">
<option selected = "selected">*</option>
<option>ID</option>
<option>Title</option>
<option>Category</option>
<option>ISBN</option>
</select>
</p>
<input type = "submit" value = "Send Query"
style = "background-color: blue;
color: yellow; font-weight: bold" />
</form>
</body>
</html>
24 Novembre 2005
Stefano Clemente
101
Esempio 10: database.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Search Results</title>
</head>
<body style = "font-family: arial, sans-serif"
style = "background-color: #F0E68C">
<?php
$db = 'C:\\web\\html\\books.mdb';
$conn = new COM('ADODB.Connection');
$conn->Open("DRIVER={Microsoft Access Driver
(*.mdb)}; DBQ=$db");
24 Novembre 2005
Stefano Clemente
102
Esempio 10: database.php
$sql = "SELECT $select FROM books ORDER BY ID";
$rs = $conn->Execute($sql);
?>
<table border = "1" cellpadding = "3" cellspacing
= "2"
style = "background-color: #ADD8E6">
<?php
print("<tr>");
if ( $select == "*" ) {
print("<th>ID</th>");
print("<th>Title</th>");
print("<th>Category</th>");
print("<th>ISBN</th>");
24 Novembre 2005
Stefano Clemente
103
Esempio 10: database.php
}
else
print("<th>$select</th>");
print("</tr>");
$count = 0;
while (!$rs->EOF):
print("<tr>");
if ( $select == "*" ) {
print("<td>" . $rs->Fields['ID']->Value .
"</td>");
print("<td>" . $rs->Fields['Title']->Value .
"</td>");
print("<td>" . $rs->Fields['Category']->Value .
"</td>");
print("<td>" . $rs->Fields['ISBN']->Value .
"</td>");
} else
print("<td>" . $rs->Fields[$select]->Value .
"</td>");
print("</tr>");
$rs->MoveNext();
$count++;
24 Novembre 2005
Stefano Clemente
104
Esempio 10: database.php
endwhile;
?>
</table>
<br />Your search yielded <strong>
<?php
$i = $rs->RecordCount();
print(" $count results.<br /><br /></strong>");
$rs->Close();
$conn->Close();
?>
<h5>Please email comments to
<a href = "mailto:[email protected]">
Deitel and Associates, Inc.
</a>
</h5>
</body>
</html>
24 Novembre 2005
Stefano Clemente
105
Cookie
• Per inviare i cookie al client PHP dispone
della funzione setcookie
• setcookie deve essere richiamata
prima di qualsiasi tag XHTML
• argomenti
− il nome del cookie
− il valore (opzionale)
− la data di expire (opzionale)
24 Novembre 2005
Stefano Clemente
106
Cookie
• I cookie memorizzati sul client, vengono
inviati al server insieme a ogni richiesta
• Analogamente ai dati inviati con le form,
PHP crea le variabili relative ai cookie
non appena li riceve
• Inoltre php crea l’array
$HTTP_COOKIE_VARS indicizzato in base
ai nomi dei cookie
24 Novembre 2005
Stefano Clemente
107
Esempio 11
24 Novembre 2005
Stefano Clemente
108
Esempio 11
24 Novembre 2005
Stefano Clemente
109
Esempio 11
24 Novembre 2005
Stefano Clemente
110
Esempio 11: cookies.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Writing a cookie to the client computer</title>
</head>
<body style = "font-family: arial, sans-serif; background-color: #99CCFF">
<h2>Click Write Cookie to save your cookie data.</h2>
<form method = "post" action = "cookies.php"
style = "font-size: 10pt">
<strong>Name:</strong><br />
<input type = "text" name = "NAME" /><br />
<strong>Height:</strong><br />
<input type = "text" name = "HEIGHT" /><br />
<strong>Favorite Color:</strong><br />
<input type = "text" name = "COLOR" /><br />
<input type = "submit" value = "Write Cookie"
style = "background-color: #F0E86C; color: navy;
font-weight: bold" /></p>
</form>
</body>
</html>
24 Novembre 2005
Stefano Clemente
111
Esempio 11: cookies.php
<?php
// Fig. 29.21: cookies.php
// Program to write a cookie to a client's machine
?>
// write each form field’s value to a cookie and set the
// cookie’s expiration date
setcookie( "Name", $NAME, time() + 60 * 60 * 24 * 5 );
setcookie( "Height", $HEIGHT, time() + 60 * 60 * 24 * 5 );
setcookie( "Color", $COLOR, time() + 60 * 60 * 24 * 5 );
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>Cookie Saved</title>
</head>
24 Novembre 2005
Stefano Clemente
112
Esempio 11: cookies.php
<body style = "font-family: arial, sans-serif">
<p>The cookie has been set with the following data:</p>
<!-- print each form field’s value -->
<br /><span style = "color: blue">Name:</span>
<?php print( $NAME ) ?><br />
<span style = "color: blue">Height:</span>
<?php print( $HEIGHT ) ?><br />
<span style = "color: blue">Favorite Color:</span>
<span style = "color: <?php print( "$COLOR\">$COLOR" ) ?>
</span><br />
<p>Click <a href = "readCookies.php">here</a>
to read the saved cookie.</p>
</body>
</html>
24 Novembre 2005
Stefano Clemente
113
Esempio 11: readCookies.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml">
<head><title>Read Cookies</title></head>
<body style = "font-family: arial, sans-serif">
<p>
<strong>
The following data is saved in a cookie on your
computer.
</strong>
</p>
<table border = "5" cellspacing = "0" cellpadding = "10">
<?php
// iterate through array $HTTP_COOKIE_VARS and print
// name and value of each cookie
foreach ( $HTTP_COOKIE_VARS as $key => $value )
print( "<tr>
<td bgcolor=\"#F0E68C\">$key</td>
<td bgcolor=\"#FFA500\">$value</td>
</tr>" );
?>
</table>
</body>
</html>
24 Novembre 2005
Stefano Clemente
114
Scarica

Lucidi 11