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} è un burlone"; unset($variabile); echo "<br>"; echo " Il mio amico {$variabile} è 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¶metro=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>