UD8: Costanti e Variabili

Transcript

UD8: Costanti e Variabili
UD8: Costanti e
Variabili
Fabio Cantaro
Fabio Cantaro
Le costanti




Convenzione: sono Maiuscole
Sono case-sensitive
Nome: inizia per lettera o _
Costruzione:


define(“nome costante ”, valore)
Dopo di ciò non è possibile modificarla
<?php
define(“PIGRECO”,3.14);
PIGRECO=5; //ERRORE
?>
Fabio Cantaro
Le variabili
Iniziano col simbolo di $
 Operatore di assegnazione: =
Esempio:

<?php
$variabile=“pippo”;
?>

La variabile può essere usata sempre, fino alla
sua distruzione tramite UNSET($variabile)
Esempio:
Fabio Cantaro
Esempio
<?php
$variabile="pippo";
//variabile.php
echo " Il mio amico {$variabile} &egrave; un burlone";
unset($variabile);
echo "<br>";
echo " Il mio amico {$variabile} &egrave; un burlone";
?>
Il mio amico pippo è un burlone
Il mio amico è un burlone
La 2° volta non stampa il contenuto della variabile (PIPPO) a causa d ella
UNSET
Fabio Cantaro
Variabili D’ambiente (0) (cenni)






Sono variabili esistenti al di fuori di script
PHP
Sono disponibili in qualsiasi script PHP
Forniscono informazioni sulla transazione
Client/Server
Hanno lo stesso formato delle normali
variabili
Non richiedono intervento da parte dell ’utente
Si possono vedere usando la funzione
phpinfo()
Fabio Cantaro
Variabili D’ambiente (1) (cenni)

$GLOBALS[ ]
Array associativo che contiene tutte le variabili globali
presenti all'interno dell'ambiente di esecuzione;

$HTTP_USER_AGENT :
indica il tipo di browser utilizzato dall'utente che stà
utilizzando l'applicazione.

$_POST[ ]:
Array associativo che contiene le variabili inviate da un
modulo form attraverso il metodo POST del protocollo di
trasmissione HTTP; il suo nome obsoleto è
$HTTP_POST_VARS.
Fabio Cantaro
Variabili D’ambiente (2) (cenni)

$_GET[ ]:
Array associativo che contiene tutte le variabili passate
via querystring ad un'applicazione, esse vengono inviate
tramite il metodo GET del protocollo di trasmissione
HTTP; il nome obsoleto corrispondente a questa
variabile è $HTTP_GET_VARS.

$_COOKIES[ ]:
Array associativo che contiene le variabili inviate tramite
cookie atraverso il protocollo HTTP. Il suo nome
obsoleto è $HTTP_COOKIE_VARS.

$_SESSION[ ]:
è la variabile destinata a contenere le variabili di
sessione dell'applicazione corrente. Il nome obsoleto è
$HTTP_SESSION_VARS.
Fabio Cantaro
Variabili D’ambiente (3) (cenni)

$_SERVER è certamente quella destinata a
contenere il maggior numero di variabili, tra
cui:

$HTTP_USER_AGENT : contiene l'informazione sul
browser utilizzato per la navigazione

$HTTP_HOST : contiene il nome del Server sul quale
lo script viene eseguito
$PHP_SELF: contiene il nome del file che include lo
script attualmente in esecuzione; tale nome viene
fornito in modo relativo a partire dalla cartella
document root.

Fabio Cantaro
Visibilità delle variabili




Qualsiasi variabile che non si trova all ’interno di una
funzione ha ambito globale
Se si assegna una variabile all ’inizio di un file PHP
=> il nome della variabile ha lo stesso significato per
tutto il resto del file.
L’assegnazione di una variabile non influirà sul
valore delle variabili con lo stesso nome in altri file
PHP.
Esistono metodi per passare variabili tra un file e
l’altro



utilizzando GET e POST
utilizzando i cookies
utilizzando un database
Fabio Cantaro
Esempio 1
<html>
<body>
<?php
$a = "test";
//ambito globale
echo "La variabile a vale: ".$a;
?>
<BR> Vediamo se a vale ancora!!!
<BR>
<?php
echo "SI!!! La variabile a vale: " .$a; //l’ambito è sempre lo stesso
?>
</body>
</html>
La variabile a vale: test
Vediamo se a vale ancora!!!
SI!!! La variabile a vale: test
Fabio Cantaro
Esempio 2
<HTML><HEAD>
<?php
$username="lisa"; // ambito globale
?>
</HEAD>
<BODY>
<?php
echo "$username<BR>"; // l’ambito è sempre lo stesso
?>
</BODY></HTML>
lisa
Fabio Cantaro
Variabili di variabili

Per accedere a una variabile il cui nome è
contenuto in un’altra variabile
Esempio:
<?php
$infor=100;
$a="infor";
echo $a;
echo "<BR>";
echo $$a;
?>
infor
100
$$a mi fa visualizzare il contenuto della variabile
puntata da $a => cioè $infor=100
Fabio Cantaro
Variabili di variabili
$infor=100;
$a="infor";
echo $$a;
$$a = $($a) = $ (infor) = $infor =100
=> echo $$a;
stampa 100
Esempio ( alias.php)

Creare caselle di testo in un FOR
<?php
//alias.php
$nome1="Cognome:";
$nome2="Nome:";
$nome3="Indirizzo:";
$nome4="cap:";
$nome5="Città:";
$nome6="Regione:";
$nome7="Provincia:";
$nome8="Telefono:";
$nome9="Fax:";
$nome10="Codice:";
echo "<FORM ACTION=pippo.php>";
for ($i=1; $i<11; $i++)
{
$temp = "nome$i";
$valore = $$temp;
// in $valore si copia il contenuto della
// variabile $nome1 poi $nome2 ecc..
echo $valore."<INPUT TYPE='text' name='nome$i' value='$valore'><br>";
}
?>
Fabio Cantaro
Fabio Cantaro
Esempio ( alias.php): spiegazione
for ($i=1; $i<11; $i++)
{
$temp = "nome$i";
$valore = $$temp;
echo $valore."<INPUT TYPE='text' name='nome$i' value='$valore'><br>";
}
Per i=1 => $valore=$nome1
$valore=$$temp= $($temp)=$(“nome$i”)
Per i=2 => $valore=$nome2
….
Fabio Cantaro
Esempio: Output
Fabio Cantaro
Variabili esterne: da FORM

Non è presente un meccanismo di prompt


In PHP (< 4.2.x) è estremamente facile accedere al
contenuto dei campi di un form:


=> PHP deve utilizzare i campi di un form HTML per
l’input.
=> Ad ogni campo corrisponde una variabile visibile
all’interno del codice PHP.
La nuova versione di PHP, scoraggia quest’utilizzo:

=> Al posto di una variabile per ogni campo, viene creato
un array di valori, accessibili per nome campo
Fabio Cantaro
Variabili esterne: da FORM

Form Html (lato CLIENT):
<html>
<body>
<form action="page.php" method=“POST">
<input type="text" name="nome" value="">
<input type="submit" name="submit" value="submit">
</form>
</body>
</html>
Questo Form:
• invoca il file page.php che verrà eseguito nel server
• usa il metodo post
• contiene un campo di testo chiamato "nome"
• e un pulsante di conferma.
Fabio Cantaro
Variabili esterne: da FORM


Il parametro METHOD impartisce istruzioni
sul come passare i parametri (Get, Post).
Il parametro ACTION segnala l’azione o
pagina o script da eseguire.
Fabio Cantaro
Variabili esterne: da FORM

Lo script PHP (richiamato) ritrover à i valori (inseriti
nelle caselle di testo) in opportune variabili

Esistono due modi con cui possono essere inviati i
dati:

Il metodo GET

Il metodo POST

È possibile passare i parametri ad uno script php
attaccando all’indirizzo dello script le coppie
nome/valore.

Altri metodi di passaggio parametri:

Cookies

Sessioni
Fabio Cantaro
Leggere i campi dai form: GET

Il metodo GET passa argomenti da una pagina alla
successiva come parte della stringa (URI)

Allega i parametri: coppie nome/valore separate da ‘=‘

Un punto di domanda ‘?’ come separatore dell’URL

Una ‘&’ commerciale separa le coppire
Esempio:
http://www.miosito.org/ index.php?indice=1&parametro=5
Fabio Cantaro
Problemi con Get




GET non è adatto per i login.
Nome utente e password viaggiano visibilmente
sull’URL.
Ogni invio GET viene registrato nel file di registro del
server WEB, compresi i dati.
La lunghezza dell’URL è limitata (255 caratteri) .
Esempio:
http://www.miosito.org/ index.php?login=mrossi&pass=mrossi
http://www.miosito.org/ index.php?section=qualcosa&sito=altro
Fabio Cantaro
Leggere i campi dai form: POST



E’ il metodo preferito di gestione dei moduli.
Il set dei dati è incluso nel corpo del modulo
quando viene inviato.
Non c’e’ cambiamento visibile nell’URL.
Esempio:
http://www.miosito.org/ index.php (with POST)
http://www.miosito.org/ index.php?login=mrossi&pass=mrossi
(with GET)
Fabio Cantaro
Leggere i campi dai form: POST (2)



E’ più sicuro di GET!
Le informazioni di query non sono mai parte
dell’URL
C’è un limite molto più ampio nella quantità
di dati che possono essere passati.
Esempio:
http://www.miosito.org/ index.php - (with POST)
http://www.miosito.org/ index.php?login=mrossi&pass=mrossi - (with GET)
Fabio Cantaro
Leggere i campi dai form

Il valore di un campo viene inserito in una
variabile avente lo stesso nome

Viene inserito in un array di parametri,
accessibile mediante:

$_REQUEST[“nomevar”]

$_GET[“nomevar”]

$_POST[“nomevar”]
(per post e get)
(per get)
(per post)
Fabio Cantaro
OSSERVAZIONI su PHP.INI

track_vars è settato su "on" in PHP.ini => le variabili GET e POST
saranno così disponibili:
$HTTP_POST_VARS e $http_GET_POST.
Per esempio: $HTTP_POST_VARS["NAME"]

register_globals è settato su "on" in PHP.ini => le variabili GET e POST
saranno disponibili nel formato standard delle variabili.
Per esempio: $name

register_globals e track_vars sono "on" nel PHP.ini => le variabili sono
disponibili in entrambi i Form.

PHP versione 4.1.0 o superiore : per motivi di sicurezza register_globals
è stato disapprovato => In sostituzione del vecchio $HTTP_POST_* è
stato introdotto: $_GET e $_POST.
Fabio Cantaro
Esempio: Php.ini

Metodo antico per passare i parametri (serviva
“register_globals = On”, altrimenti il valore non viene passato)
Esempio:
<FORM ACTION=“Search.php” METHOD=“GET” NAME=“Ricerca”>
<INPUT TYPE=“TEXT” NAME=“Parole”>
<INPUT TYPE=“SUBMIT”>
</FORM>
Search.php:
<HTML><BODY><H1>
$Parole funziona solo se in
Stai cercando: <?php echo $Parole; ?>
PHP.INI register_globals = On
</HTML></BODY></H1>
Fabio Cantaro
Leggere i campi dai form

$_REQUEST indicizza tutti i parametri
Esempio:
<FORM ACTION=“Search.php” METHOD=“GET” NAME=“Ricerca”>
<INPUT TYPE=“TEXT” NAME=“Parole”>
<INPUT TYPE=“SUBMIT”>
</FORM>
Search.php:
<HTML><BODY><H1>
Stai cercando:
<? echo $_REQUEST[“Parole”]; ?>
</HTML></BODY></H1>
Anche con POST avrebbe funzionato: $_REQUEST cattura sia il POST che
il GET
Fabio Cantaro
Leggere i campi dai form

se usiamo GET (o POST), c’è un array
corrispondente: $_GET ($_POST)!
Esempio:
<FORM ACTION=“Search.php” METHOD=“GET” NAME=“Ricerca”>
<INPUT TYPE=“TEXT” NAME=“Parole”>
<INPUT TYPE=“SUBMIT”>
</FORM>
Search.php:
<HTML><BODY><H1>
Stai cercando:
<? echo $_GET[“Parole”]; ?>
</HTML></BODY></H1>
Fabio Cantaro
Esempio: $_POST ( form.html) (1)
Lato Client
<HTML>
<HEAD>
<TITLE>form.html</TITLE>
</HEAD>
<BODY>
<FORM ACTION="var_form.php" METHOD=“POST">
<TABLE BORDER=2>
<TR>
<TD>Nome utente: </TD><TD><INPUT TYPE="text" NAME="username"><BR></TD>
</TR>
<TR>
<TD> Email: </TD><TD><INPUT TYPE="text" NAME="email"><BR></TD>
</TR>
</TABLE>
<INPUT TYPE="submit" NAME="submit" VALUE="invio dei dati">
</FORM>
</BODY></HTML>
Fabio Cantaro
Esempio: $_POST ( var_form.php ) (2)
Lato Server
<?php
$username = $_POST['username']; //ricavo lo Username e lo conservo in $username
$email= $_POST['email']; //ricavo la email e la conservo in $email
echo $username;
echo "<br>";
echo $email;
?>
Identico risultato usando:
• method=GET nella pagina html
• $_GET[‘username’] nel file php
Fabio Cantaro
Esempio: a video
Fabio Cantaro
I Cookie




I Cookie sono Strighe da utilizzare per memorizzare,
sul computer dei nostri utenti, delle informazioni che
vogliamo persistano anche nelle successive visite al
nostro sito.
Cookie sono molto utili per memorizzare piccoli dati
come ad esempio il nome dell'utente o una serie di
preferenze.
I cookie non sono adatti per informazioni critiche
come password o dati personali in quanto
potrebbero crearsi dei problemi di sicurezza.
Vengono trasmessi nell ’header HTTP => prima che
il codice venga interpretato dal browser
Fabio Cantaro
I Cookie

Un cookie può essere Scritto, Modificato e
Cancellato tramite la funzione SETCOOKIE:
Setcookie(“nome_cookie”, “valore_cookie”, “data_scadenza”, “percorso dove
salvarlo”, “dominio”)


Per MODIFICA/CANCELLAZIONE del cookie =>
impostare la DATA di SCADENZA:
 a NULL
 o già scaduta
Per leggere i cookie => $_COOKIE[ 'nome_cookie’ ];
Fabio Cantaro
Esempio 1

setcookie("nome_utente", "pippo", time()+3600);
All'interno di setcookie() ci sono 3 parametri:
- "nome_utente“: nome identificativo del nostro
cookie;
- “pippo ”: specifica il valore del cookie;
- time()+3600: scadenza del cookie. Se non
impostiamo una data di scadenza il cookie non scadrà;
Fabio Cantaro
Esempio 2

memorizzare il cookie “nome_utente” con
valore= fabio all'interno di in un cookie
Invio_cookie.php
<?
$nome = "fabio";
//memorizzo il nome in un cookie ed imposto la scadenza tra un'ora...
setcookie("nome_utente", $nome, time()+3600);
?>
Leggo_cookie.php
<?
//recupero il valore del cookie...
$nome = $_COOKIE['nome_utente'];
//stampo a video il nome...
echo $nome;
?>
Fabio Cantaro
Cancellare il cookie

basterà richiamare il cookie senza specificare
nessun valore => nel nostro esempio:
<?
//cancello il cookie
setcookie("nome_utente");
?>

Oppure, reimpostare la scadenza ad un
momento passato => Nostro esempio:
<?
//cancello il cookie
setcookie("nome_utente“, $nome, time()-9999 );
?>
Fabio Cantaro
Esercizio

Anziché assegnare il nome fabio, realizzare
un form che invii il nome dell ’utente e gli
script php per settare e leggere il cookie
Soluzione
Fabio Cantaro
<HTML><BODY>
Form.htm
<FORM ACTION="sendcookie2.php" METHOD="GET">
<INPUT TYPE="text" NAME="nome">Inserire il tuo nome<BR>
<INPUT TYPE="submit" NAME="submit" VALUE="invio dei dati">
</FORM>
</BODY></HTML>
<?
//recupero il nome dall querystring
$nome = $_GET['nome'];
sendcookie2.php
//memorizzo il nome in un cookie ed imposto la scadenza tra un'ora...
setcookie("nome_utente", $nome, time()+3600);
echo "<BR>";
echo "<A HREF='getcookie.php'>Clicca qui per richiamare lo script che legge il
cookie";
?>
<?
//recupero il valore del cookie...
$nome = $_COOKIE['nome_utente'];
echo "<BR>";
//stampo a video il nome...
echo $nome;
?>
getcookie.php
Fabio Cantaro
Variabili esterne da immagini


Immagine al posto del Submit
=> si ricevono dal form le Coordinate in cui è avvenuto il click dentro
l’immagine
Esempio: Immagine.html, imma.php
Immagine.html
<HTML>
<HEAD>
<TITLE>
immagine.html
</TITLE>
</HEAD>
<BODY>
<FORM ACTION="imma.php">
<INPUT TYPE="image"
SRC="image.gif" NAME=" sub ">
</FORM>
</BODY></HTML>
Imma.php
<?php
echo "Coordinata X:". $sub_x;
$sub_x
echo "<BR>";
echo "Coordinata Y:". $sub_y;
$sub_y
?>
Fabio Cantaro
Risultato
Fabio Cantaro
Esempio: clicca sull’immagine
(esempio2.php, pag 158)
 In questo esempio viene
generato un Form con
un’immagine che è divisa in 4
aree.
 A seconda di dove si clicca
viene assegnato un diverso
punteggio => il punteggio viene
via via aggiornato.
 Se si clicca esternamente => il
punteggio viene azzerato
OSS: si farà uso di $PHP_SELF => nel file
PHP.INI va settata la variabile
register_globals = On
<?PHP
$p_new=0;
if (($s_x>38) && ($s_x<145) && ($s_y>38) && ($s_y<145))
{
$p_new=5; //primo blocco
}
if (($s_x>145) && ($s_x<252) && ($s_y>38) && ($s_y<145))
{
$p_new=10; //secondo blocco
}
if (($s_x>38) && ($s_x<145) && ($s_y>145) && ($s_y<252))
{
$p_new=15; //terzo blocco
}
if (($s_x>145) && ($s_x<252) && ($s_y>145) && ($s_y<252))
{
$p_new=20; //quarto blocco
}
if (($s_x<38) || ($s_x>252) || ($s_y>252) || ($s_y<38))
{
setcookie("p",0);
//se fuori da tutti i blocchi
$p=0;
}
Else //se si è cliccato in un qualsiasi blocco
{
if (isset($HTTP_COOKIE_VARS['p'])) //se il cookie esiste gia
{
$p = $HTTP_COOKIE_VARS['p']; //lettura vecchio valore punteggio
$p=$p+$p_new;
//e aggiornamento
setcookie("p",$p); //memorizzazione cookie con nuovo punteggio
}
}
Fabio Cantaro
echo "<BR>Punteggio finora totalizzato :";
echo "<BR><HR>";
echo "Punti: ".$p;
?>
<HR>
<DIV ALIGN=center>
<FONT SIZE=3 COLOR=BLUE>
<B>GIOCO DELLE FRECCETTE</B>
</FONT>
</DIV>
<HR><FONT SIZE=1>
Attenzione cliccando sullo zero si azzera il punteggio
</FONT>
<HR>
<BR>
<?PHP
echo "<FORM NAME=mirino
ACTION=".$PHP_SELF.">";
?>
<CENTER>
<INPUT NAME="s" TYPE=image SRC="mirino.gif">
</FORM>
</HTML>