SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
PHP5
seconda parte - interazione con l’HTML

             Gianfranco Fedele
            Analista programmatore

        g.fedele@dinamicadigitale.it
      www.linkedin.com/in/gianfrasoft
PHP5: Parametri HTML

•   Il trasferimento dei dati da una pagina HTML all’altra può avveniere mediante i
    metodi:
     – GET
     – POST
     – Altri metodi previsti dal protocollo HTTP sono caduti in disuso
•   GET accoda all’URL i valori dei parametri scambiati, separandoli con i
    caratteri ? e poi & (in XHTML la & è sostituita da &).
•   POST introduce le informazioni nel corpo della richiesta HTTP non
    rendendole immediatamente visibili nella barra di indirizzo del browser. In
    questo modo non sono posti limiti alla dimensione ed al numero dei parametri
    passati.




                                                                     gianfrasoft.wordpress.com - 2008
PHP5: Form HTML / 1

•   I form HTML consentono di trasmettere dati ad una pagina PHP. Ciò mediante
    il tag form ed i tag che rappresentano componenti di input.
•   Nei form è indispensabile indicare gli attributi action e method per segnalare
    rispettivamente la pagina dinamica PHP da interrogare ed il metodo (GET o
    POST) con cui i dati devono essere trasmessi.
•   I principali controlli di input HTML sono i seguenti:
     –   text
     –   password
     –   checkbox
     –   radio
     –   hidden
     –   submit
     –   file
•   I controlli con tag non input HTML possono essere di tipo:
     – select - option - multiple
     – textarea
                                                                 gianfrasoft.wordpress.com - 2008
PHP5: Form HTML / 2


<form action="elabora.php" method="get">
      <h1>Qual’&egrave; il tuo nome?</h1>
      <input type="text" name="nome"
            maxlength="30"/>
      <input type="hidden" name=“alias"
            value="nome_segreto"/>
      <h1>Quali di questi linguaggi conosci?</h1>
      <select multiple name="linguaggi[ ]" size="3">
            <option>PHP</option>
                                                       $nome = $_GET["nome"];
            <option>ASP </option>
            <option>Java </option>                     $alias = $_GET["alias"];
            <option>C++ </option>                      $linguaggi = $_REQUEST["linguaggi"];
      </select>
      <input type="submit" value="Invia“ /> <!--       // meglio non usare $_REQUEST
      notazione XHTML -->                              $registra = $_GET["registra"];
      <input type="check" name="registra" />           $registra = $_GET["registra_ml"];
      <input type="check" name="registra_ml"
            value="rml" />
                                                       // Mostro i dati inseriti
</form>
                                                       echo "<h1>Ciao $nome</h1>";
                                                       foreach($linguaggi as $k=>$v)
                                                          echo "<h2>$k - $v</h2>";
                                                       echo $registra."<br />"; // notaz. XHTML


                                                                            gianfrasoft.wordpress.com - 2008
PHP5: Variabili superglobali

•   Sono immediatamente accessibili negli script PHP alcune variabili speciali
    dette superglobali (da verificare in phpinfo())
     –   $_REQUEST, $_POST, $_GET (da form HTML)
     –   $_SERVER (sezione Apache Environment)
     –   $_ENV (sezione Environment)
     –   $_SESSION (per la gestione delle sessioni)
     –   $_COOKIE[“nome_cookie"] (per la gestione dei cookies)
     –   $HTTP_POST_FILES [“nome_file"] (per l’upload dei file)




    <?php

    // esempio
    echo $_SERVER["HTTP_HOST"];

    ?>

                                                                  gianfrasoft.wordpress.com - 2008
PHP5: Cenni sulla sicurezza

•   Esiste nel PHP la direttiva di configurazione register_globals che trasferisce il
    contenuto delle variabili superglobali in variabili semplici.
•   L’utilizzo di questa funzionalità, come della funzione
    import_request_variables(), è pericoloso in termini di sicurezza in quanto
    consente agli hacker di introdurre valori di default, mediante accesso ai
    parametri HTTP (della GET e della POST), alle variabili presenti nello script
    PHP.
•   Per questo stesso motivo è indispensabile sempre:
     – assegnare un valore di default alle variabili negli script PHP;
     – caricare i dati acquisiti dal form in variabili semplici e verificare che i valori in esse
       contenuti rispettino le limitazioni imposte dal sistema: la massima lunghezza in
       caratteri, il massimo valore numerico consentito, il giusto formato di numero e/o di
       data, ecc. In ogni caso mai accontentarsi dei controlli client side;
     – prevenire attacchi di tipo sql injection e code injection verificando il contenuto delle
       variabili testé descritte, perché non contengano caratteri non consentiti (utilizzare
       strlen(), is_int(), htmlspecialchars(), addslashes(), ereg() ecc.)

                                                                          gianfrasoft.wordpress.com - 2008
PHP5: Scoping / 1

•   Ambito di visibilità (scope) di una variabile è il contesto in cui è possibile
    accedere al suo contenuto.

•   In PHP esistono due categorie di variabili:
     –   le variabili globali, dichiarate nella parte dello script esterna a tutte le funzioni ed a
         tutte le classi.

     –   Le variabili locali sono dichiarate, invece, all'interno di funzioni o classi.

•   Le variabili globali non sono visibili all'interno di funzioni o classi. E' possibile,
    comunque, rendere visibili le variabili globali all'interno di funzioni e classi ri-
    dichiarandole con la parola chiave global.

•   Le variabili globali sono, altresì, accessibili tramite l'array associativo
    $GLOBALS.



                                                                            gianfrasoft.wordpress.com - 2008
PHP5: Scoping / 2



<?
// Dichiarazione della funzione restituisce_totale()
function restituisce_totale() {
   return $totale;
}

// Dichiarazione della funzione restituisce_totale2()
function restituisce_totale2() {
   // Cosi' indico che $totale è una variabile globale
   global $totale;
   return $totale;
}

// Una variabile globale
$totale = 99;

// Questo stampa "è il totale."
echo restituisce_totale()." &egrave; il totale.";
// Questo stampa "99 è il totale."
echo restituisce_totale2()." &egrave; il totale.";
?>


                                                         gianfrasoft.wordpress.com - 2008
PHP5: Output nell’ambito dell’HTML

•   La funzione echo() è la funzione più utilizzata per la generazione dinamica
    dell'output HTML.
            echo "<h1>Benvenuto su questo sito!</h1>";


•   Del tutto analoga al costrutto echo() è la funzione print().

•   Le variabili all’interno dei doppi apici vengono interpolate.

•   Le stringhe fra apici singoli vengono inviate (stampate) inalterate.
           print "Il valore di a è $a";
           print ('Con $a si indica una variabile');

•   Infine, un modo stringato di scrivere l’output di PHP nell’ambito della pagina
    HTML è quello di utilizzare i tag speciali <?= espressione ?>, senza richiamare
    funzioni di output né terminatore di riga “;”.
           <?= $variabile + 5 ?>

                                                                    gianfrasoft.wordpress.com - 2008
PHP5: Escaping

•   Il carattere  viene utilizzato come escape per l’output di caratteri speciali. Ad
    esempio: n significa newline (a capo).
    Attenzione al fatto che l’output generato nell’ambito delle pagine HTML non
    tiene conto del carattere newline come del carattere space (se ripetuto); per
    andare a capo utilizzare il tag <BR />, per lo spazio &nbsp;.




    <?php
                                                  Output HTML:
    $nome = “Gianfranco Federe";
    $titolo = "Corso di PHP";                     Autore: Gianfranco Fedele
    /* stampa */                                  Titolo: Corso di PHP
    echo "Autore:     $nome<BR />n";
    echo "Titolo:nn $titolo<BR />nn";
    ?>




                                                                 gianfrasoft.wordpress.com - 2008
PHP5: Funzioni di uscita


•   Per interrompere l'esecuzione di uno script PHP si possono utilizzare le
    funzioni exit() e die().

• die() accetta come parametro un messaggio che verrà riportato nella pagina
  HTML prima di uscire.




    if ($i == 0) {
       // errore...
       die(“Il valore del denominatore &egrave; zero.
             Impossibile procedere.”);
    }
    $j = 10 / $i;


                                                         gianfrasoft.wordpress.com - 2008
PHP5: Espressioni / 1

•    Espressione booleana:

     $a = FALSE;
     $b = TRUE;
     if ($a and $b) print("a e b sono vere");


•    Espressione di confronto:

         $a   = " 04";
         $b   = "0003";
         if   ($a > $b) print("a è maggiore di b");
         if   (strcmp($a, $b)) print("a è più grande di b");



•    Espressione condizionale:

     // Un numero e' pari se, diviso per due, non da' resto
     echo "n è ".( $n % 2 == O ? "pari" : "dispari" );

                                                               gianfrasoft.wordpress.com - 2008
PHP5: Espressioni / 2


Attenzione:
•   sono equivalenti al valore TRUE:
     –   i numeri, interi o in virgola mobile, diversi da zero (compresi i negativi);
     –   le stringhe non vuote;
     –   gli array con almeno un elemento.
•   sono equivalenti al valore FALSE:
     –   lo zero
     –   le stringhe vuote
     –   gli array privi di elementi




                                                                           gianfrasoft.wordpress.com - 2008
PHP5: Flow control / 1

•    Il costrutto if-elseif-else non impone l’utilizzo dei delimitatori di blocco delle
     istruzioni ({…}) se l’istruzione che segue il confronto si compone di una sola
     riga.


    if (condizione1)
    {
       blocco-istruzioni-1;
    }                                        if ( $a < $b )
    elseif (condizione2)                        echo '$a è minore di $b';
    {                                        elseif ( $a > $b )
       blocco-istruzioni-2;                  {
    }                                           echo '$a è maggiore di $b';
    ...                                      }
    }                                        else
    else                                        echo '$a e $b sono uguali';
    {
       blocco-istruzioni-N;
    }



                                                                   gianfrasoft.wordpress.com - 2008
PHP5: Flow control / 2

•    Il costrutto switch-case è più compatto ed autoesplicativo del costrutto if-
     elseif-else. Può essere usato se la condizione è una soltanto.
•    L’istruzione break determina l’uscita immediata dopo l’esecuzione del
     blocco di istruzioni relativo al valore dell’espressione.
•    Il blocco di default viene eseguito solo se nessuno dei valori descritti nelle
     case viene restituito dall’espressione.

    switch (espressione) {
      case valore-1:                       switch( $a )   {
         blocco-istruzioni-1;                case 1:
         break;                                 echo("a   è uguale a uno");
      case valore-2:                            break;
         blocco-istruzioni-1;                case 2:
         break;                                 echo("a   è uguale a due");
      ...                                       break;
      default:                               default:
         blocco-istruzioni-N;                   echo("a   non é uno né due");
    }                                      }


                                                                gianfrasoft.wordpress.com - 2008
PHP5: Flow control / 3

•    Il costrutto while antepone il confronto alle istruzioni; do-while lo
     postpone determinando che le istruzioni vengano eseguite sempre almeno
     una volta.
•    il costrutto continue fa saltare le istruzioni restanti nel blocco. Il costrutto
     break interrompe il ciclo.


    while (condizione) {
       blocco-istruzioni;
    }                                  $cont = 1;
                                       $max = 10;
                                       while ( $cont <= $max ) {
                                          echo "contatore = $cont <br>";
                                          $cont++;
    do {                               }
       blocco-istruzioni
    } while (condizione);




                                                                 gianfrasoft.wordpress.com - 2008
PHP5: Flow control / 4

•     Il costrutto for espone tre espressioni che determinano:

       – Assegnazione del valore iniziale della variabile di controllo.

       – Condizione di interruzione del ciclo.

       – Espressione di incremento.

•     il costrutto continue fa saltare le istruzioni restanti e fa passare
      direttamente all’iterazione successiva. il costrutto break invece fa uscire
      definitivamente dal ciclo.



    for (espr1; espr2; espr3)               // ciclo for
    {                                       for ($i = 1; $i <= 5; $i++)
       blocco-istruzioni;                   {
    }                                          echo "$i &egrave; $i";
                                            }



                                                                  gianfrasoft.wordpress.com - 2008
PHP5: Cicli sugli elementi di un array

•     Le istruzioni while e foreach rappresentano il modo standard di accedere agli
      elementi di un array:




    // dichiaro un array
    $a = array(
        "Gianfranco" => "portiere",
        "Nicola" => "attaccante"
    );

    // ciclo while
    while (list ($key, $val) = each($a))
        echo "$key -> $val <br>";

    // ciclo foreach
    foreach ($a as $valore)
       echo "Valore : $valore<br>";




                                                                gianfrasoft.wordpress.com - 2008
PHP5: Funzioni / 1

•     La dichiarazione di funzioni avviene con la parola chiave function e può
      essere dichiarata ovunque nello script PHP.
    function nome-funzione (lista_degli_argomenti)
    {
       blocco-istruzioni;
    }

•     Il risultato della funzione viene restituito utilizzando             l'istruzione
      return(valore) che provoca l'uscita dalla funzione.

•     E’ consentita la definizione di funzioni ricorsive.
    function fattoriale($n)
    {
       if ($n == 0)
          return = 1;
       else
          return ($n * fattoriale($n - 1));
    }

    // Scriverà 120
    echo fattoriale(5);

                                                            gianfrasoft.wordpress.com - 2008
PHP5: Funzioni / 2

•     PHP è tollerante rispetto al numero di parametri passati (in eccesso e in difetto).
•     Le variabili all’interno di una funzione sono private alla stessa. Per richiamare
      variabili globali si deve utilizzare la parola chiave global.
•     Le funzioni possono tenere memoria della loro esecuzione mediante l’utilizzo
      della parola chiave static.
•     Una funzione definita in uno script è disponibile ovunque in esso.

    // Scriverà 120
    echo fattoriale(5);

    function fattoriale($n)
    {
       if ($n == 0)
          return = 1;
       else
          return ($n * fattoriale($n - 1));
    }



                                                                   gianfrasoft.wordpress.com - 2008
PHP5: Funzioni / 3

•    Per passare ad una funzione un argomento per riferimento, dovete anteporre un
     ampersand (&) al nome dell'argomento nella definizione della funzione
•    Solitamente le funzioni vengono definite in file separati (librerie) da includere
     all'occorrenza nel programma:
       – include(filename): Ritorna un warning in caso di fallimento
       – require(filename): Ritorna un fatal error in caso di fallimento
       – require_ones(filename) - include_ones(filename): Come
         sopra ma se il file è già stato incluso non lo include nuovamente.
    function incrementa_di_5(&$n)
    {
       $n += 5;
    }

    $est = 3;
    incrementa_di_5($est);

    // Scriverà 8
    echo $est;
                                                                   gianfrasoft.wordpress.com - 2008
PHP5: Upload di file / 1

•   Esiste un metodo standard per effettuare l’upload dei file in PHP5.
•   Se fileutente è il nome che abbiamo assegnato al campo della form
    contenente il file da caricare, in caso di successo dell’upload nello script di
    destinazione troveremo definito l'array associativo $HTTP_POST_FILES con i
    seguenti valori:
     –  $HTTP_POST_FILES["fileutente"]["tmp_name"] - il nome del file temporaneo
       (sul server);
     – $HTTP_POST_FILES["fileutente"]["name"] - il nome originario del file (sul
       client);
     – $HTTP_POST_FILES["fileutente"]["size"] - la dimensione (in byte) del file;
     – $HTTP_POST_FILES["fileutente"]["type"] - il tipo di file, secondo la codifica
       MIME (ad esempio text/html).
•   Il form da dove viene caricato il file deve obbligatoriamente utilizzare come
    metodo di trasferimento il metodo POST.




                                                                 gianfrasoft.wordpress.com - 2008
PHP5: Upload di file / 2

<? /* A proposito… ecco un modo sicuro di scrivere i commenti in HTML */ ?>
<form enctype="multipart/form-data“ action="<?php echo $_SERVER["PHP_SELF"] ?>“ method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="10000">
<h3>
            Fai l'upload di questo file
            <p><input name="uploadfile" type="file">
            <p><input type="submit" value="Invia File"></p>
</h3>
<p><input type=“reset" value="Cancella!“ /></p>
</form>
                   $file = $HTTP_POST_FILES["uploadfile"];
                   if (isset($file[tmp_name])) // notare l’assenza delle " nell’array
                   {
                       echo "<h3>Hai caricato il file $file[name], ";
                       echo "la cui dimensione è $file[size] bytes. ";
                       copy($file[tmp_name], "./UPLOADS/$file[name]") // copia file
                           or die("<br>Non posso copiare il file.");
                       echo "<p>Il nome sul server è <strong>$file[tmp_name]</strong>.";
                       echo "<p>&egrave; stato salvato nella cartella
                           <strong>UPLOADS/$file[name]</strong></h3>.";
                   }
PHP5
   seconda parte - FINE

       Gianfranco Fedele
      Analista programmatore

  g.fedele@dinamicadigitale.it
www.linkedin.com/in/gianfrasoft

Weitere ähnliche Inhalte

Was ist angesagt?

Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHP
extrategy
 
Php mysql e cms
Php mysql e cmsPhp mysql e cms
Php mysql e cms
orestJump
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQL
extrategy
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
STELITANO
 
Consigli per iniziare tdd
Consigli per iniziare tddConsigli per iniziare tdd
Consigli per iniziare tdd
Tassoman ☺
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06
Majong DevJfu
 

Was ist angesagt? (18)

Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHP
 
Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3Funzioni anonime in PHP 5.3
Funzioni anonime in PHP 5.3
 
Php mysql e cms
Php mysql e cmsPhp mysql e cms
Php mysql e cms
 
PHP
PHPPHP
PHP
 
PHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQLPHP:funzioni e interazione con MySQL
PHP:funzioni e interazione con MySQL
 
Comandi bash
Comandi bashComandi bash
Comandi bash
 
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
 
Gcc & Make
Gcc & MakeGcc & Make
Gcc & Make
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
7 Sottoprogrammi
7   Sottoprogrammi7   Sottoprogrammi
7 Sottoprogrammi
 
Js intro
Js introJs intro
Js intro
 
Consigli per iniziare tdd
Consigli per iniziare tddConsigli per iniziare tdd
Consigli per iniziare tdd
 
corso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascriptcorso web developer - Introduzione a Javascript
corso web developer - Introduzione a Javascript
 
Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06Sistemi Operativi: Il kernel linux - Lezione 06
Sistemi Operativi: Il kernel linux - Lezione 06
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
[BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA][BASH] Shell Scripting [ITA]
[BASH] Shell Scripting [ITA]
 
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
Creare un proprio linguaggio di programmazione per il web e applicazioni desk...
 
Interfaccia di Xamarin
Interfaccia di XamarinInterfaccia di Xamarin
Interfaccia di Xamarin
 

Ähnlich wie Gianfrasoft Corso Di Php Parte 2

Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in Jquery
Alberto Buschettu
 
JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)
jampslide
 
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H PLaboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
guestbe916c
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
Tommaso Torti
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
Sandro Marcon
 

Ähnlich wie Gianfrasoft Corso Di Php Parte 2 (20)

Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
Sicurezza Php (giugno 2010) Stefano Bianchini presso Ce.Se.N.A.
 
Perl Template Toolkit
Perl Template ToolkitPerl Template Toolkit
Perl Template Toolkit
 
Rich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in JqueryRich Ajax Web Interfaces in Jquery
Rich Ajax Web Interfaces in Jquery
 
Sviluppo web dall'antichità all'avanguardia e ritorno
Sviluppo web  dall'antichità all'avanguardia e ritornoSviluppo web  dall'antichità all'avanguardia e ritorno
Sviluppo web dall'antichità all'avanguardia e ritorno
 
JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)JAMP DAY 2010 - ROMA (4)
JAMP DAY 2010 - ROMA (4)
 
Programmazione Internet
Programmazione InternetProgrammazione Internet
Programmazione Internet
 
HTML Form
HTML Form HTML Form
HTML Form
 
jQuery e i suoi plugin
jQuery e i suoi pluginjQuery e i suoi plugin
jQuery e i suoi plugin
 
Form e HTML basi
Form e HTML basiForm e HTML basi
Form e HTML basi
 
Progetto di Basi di Dati
Progetto di Basi di DatiProgetto di Basi di Dati
Progetto di Basi di Dati
 
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
Laboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H PLaboratorio Di  Basi Di  Dati 09  Il Linguaggio  P H P
Laboratorio Di Basi Di Dati 09 Il Linguaggio P H P
 
Codemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazioneCodemotion 2012 creare un proprio linguaggio di programmazione
Codemotion 2012 creare un proprio linguaggio di programmazione
 
Primo Incontro Con Scala
Primo Incontro Con ScalaPrimo Incontro Con Scala
Primo Incontro Con Scala
 
Seminario team working - 21-1-2015
Seminario team working - 21-1-2015Seminario team working - 21-1-2015
Seminario team working - 21-1-2015
 
Ajax
AjaxAjax
Ajax
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 
RESTful APIs (ITA) - /w WebMachine
RESTful APIs (ITA) - /w WebMachineRESTful APIs (ITA) - /w WebMachine
RESTful APIs (ITA) - /w WebMachine
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
PHP Template Engine (introduzione)
PHP Template Engine (introduzione)PHP Template Engine (introduzione)
PHP Template Engine (introduzione)
 
Laravel Framework PHP
Laravel Framework PHPLaravel Framework PHP
Laravel Framework PHP
 

Gianfrasoft Corso Di Php Parte 2

  • 1. PHP5 seconda parte - interazione con l’HTML Gianfranco Fedele Analista programmatore g.fedele@dinamicadigitale.it www.linkedin.com/in/gianfrasoft
  • 2. PHP5: Parametri HTML • Il trasferimento dei dati da una pagina HTML all’altra può avveniere mediante i metodi: – GET – POST – Altri metodi previsti dal protocollo HTTP sono caduti in disuso • GET accoda all’URL i valori dei parametri scambiati, separandoli con i caratteri ? e poi & (in XHTML la & è sostituita da &amp;). • POST introduce le informazioni nel corpo della richiesta HTTP non rendendole immediatamente visibili nella barra di indirizzo del browser. In questo modo non sono posti limiti alla dimensione ed al numero dei parametri passati. gianfrasoft.wordpress.com - 2008
  • 3. PHP5: Form HTML / 1 • I form HTML consentono di trasmettere dati ad una pagina PHP. Ciò mediante il tag form ed i tag che rappresentano componenti di input. • Nei form è indispensabile indicare gli attributi action e method per segnalare rispettivamente la pagina dinamica PHP da interrogare ed il metodo (GET o POST) con cui i dati devono essere trasmessi. • I principali controlli di input HTML sono i seguenti: – text – password – checkbox – radio – hidden – submit – file • I controlli con tag non input HTML possono essere di tipo: – select - option - multiple – textarea gianfrasoft.wordpress.com - 2008
  • 4. PHP5: Form HTML / 2 <form action="elabora.php" method="get"> <h1>Qual’&egrave; il tuo nome?</h1> <input type="text" name="nome" maxlength="30"/> <input type="hidden" name=“alias" value="nome_segreto"/> <h1>Quali di questi linguaggi conosci?</h1> <select multiple name="linguaggi[ ]" size="3"> <option>PHP</option> $nome = $_GET["nome"]; <option>ASP </option> <option>Java </option> $alias = $_GET["alias"]; <option>C++ </option> $linguaggi = $_REQUEST["linguaggi"]; </select> <input type="submit" value="Invia“ /> <!-- // meglio non usare $_REQUEST notazione XHTML --> $registra = $_GET["registra"]; <input type="check" name="registra" /> $registra = $_GET["registra_ml"]; <input type="check" name="registra_ml" value="rml" /> // Mostro i dati inseriti </form> echo "<h1>Ciao $nome</h1>"; foreach($linguaggi as $k=>$v) echo "<h2>$k - $v</h2>"; echo $registra."<br />"; // notaz. XHTML gianfrasoft.wordpress.com - 2008
  • 5. PHP5: Variabili superglobali • Sono immediatamente accessibili negli script PHP alcune variabili speciali dette superglobali (da verificare in phpinfo()) – $_REQUEST, $_POST, $_GET (da form HTML) – $_SERVER (sezione Apache Environment) – $_ENV (sezione Environment) – $_SESSION (per la gestione delle sessioni) – $_COOKIE[“nome_cookie"] (per la gestione dei cookies) – $HTTP_POST_FILES [“nome_file"] (per l’upload dei file) <?php // esempio echo $_SERVER["HTTP_HOST"]; ?> gianfrasoft.wordpress.com - 2008
  • 6. PHP5: Cenni sulla sicurezza • Esiste nel PHP la direttiva di configurazione register_globals che trasferisce il contenuto delle variabili superglobali in variabili semplici. • L’utilizzo di questa funzionalità, come della funzione import_request_variables(), è pericoloso in termini di sicurezza in quanto consente agli hacker di introdurre valori di default, mediante accesso ai parametri HTTP (della GET e della POST), alle variabili presenti nello script PHP. • Per questo stesso motivo è indispensabile sempre: – assegnare un valore di default alle variabili negli script PHP; – caricare i dati acquisiti dal form in variabili semplici e verificare che i valori in esse contenuti rispettino le limitazioni imposte dal sistema: la massima lunghezza in caratteri, il massimo valore numerico consentito, il giusto formato di numero e/o di data, ecc. In ogni caso mai accontentarsi dei controlli client side; – prevenire attacchi di tipo sql injection e code injection verificando il contenuto delle variabili testé descritte, perché non contengano caratteri non consentiti (utilizzare strlen(), is_int(), htmlspecialchars(), addslashes(), ereg() ecc.) gianfrasoft.wordpress.com - 2008
  • 7. PHP5: Scoping / 1 • Ambito di visibilità (scope) di una variabile è il contesto in cui è possibile accedere al suo contenuto. • In PHP esistono due categorie di variabili: – le variabili globali, dichiarate nella parte dello script esterna a tutte le funzioni ed a tutte le classi. – Le variabili locali sono dichiarate, invece, all'interno di funzioni o classi. • Le variabili globali non sono visibili all'interno di funzioni o classi. E' possibile, comunque, rendere visibili le variabili globali all'interno di funzioni e classi ri- dichiarandole con la parola chiave global. • Le variabili globali sono, altresì, accessibili tramite l'array associativo $GLOBALS. gianfrasoft.wordpress.com - 2008
  • 8. PHP5: Scoping / 2 <? // Dichiarazione della funzione restituisce_totale() function restituisce_totale() { return $totale; } // Dichiarazione della funzione restituisce_totale2() function restituisce_totale2() { // Cosi' indico che $totale è una variabile globale global $totale; return $totale; } // Una variabile globale $totale = 99; // Questo stampa "è il totale." echo restituisce_totale()." &egrave; il totale."; // Questo stampa "99 è il totale." echo restituisce_totale2()." &egrave; il totale."; ?> gianfrasoft.wordpress.com - 2008
  • 9. PHP5: Output nell’ambito dell’HTML • La funzione echo() è la funzione più utilizzata per la generazione dinamica dell'output HTML. echo "<h1>Benvenuto su questo sito!</h1>"; • Del tutto analoga al costrutto echo() è la funzione print(). • Le variabili all’interno dei doppi apici vengono interpolate. • Le stringhe fra apici singoli vengono inviate (stampate) inalterate. print "Il valore di a è $a"; print ('Con $a si indica una variabile'); • Infine, un modo stringato di scrivere l’output di PHP nell’ambito della pagina HTML è quello di utilizzare i tag speciali <?= espressione ?>, senza richiamare funzioni di output né terminatore di riga “;”. <?= $variabile + 5 ?> gianfrasoft.wordpress.com - 2008
  • 10. PHP5: Escaping • Il carattere viene utilizzato come escape per l’output di caratteri speciali. Ad esempio: n significa newline (a capo). Attenzione al fatto che l’output generato nell’ambito delle pagine HTML non tiene conto del carattere newline come del carattere space (se ripetuto); per andare a capo utilizzare il tag <BR />, per lo spazio &nbsp;. <?php Output HTML: $nome = “Gianfranco Federe"; $titolo = "Corso di PHP"; Autore: Gianfranco Fedele /* stampa */ Titolo: Corso di PHP echo "Autore: $nome<BR />n"; echo "Titolo:nn $titolo<BR />nn"; ?> gianfrasoft.wordpress.com - 2008
  • 11. PHP5: Funzioni di uscita • Per interrompere l'esecuzione di uno script PHP si possono utilizzare le funzioni exit() e die(). • die() accetta come parametro un messaggio che verrà riportato nella pagina HTML prima di uscire. if ($i == 0) { // errore... die(“Il valore del denominatore &egrave; zero. Impossibile procedere.”); } $j = 10 / $i; gianfrasoft.wordpress.com - 2008
  • 12. PHP5: Espressioni / 1 • Espressione booleana: $a = FALSE; $b = TRUE; if ($a and $b) print("a e b sono vere"); • Espressione di confronto: $a = " 04"; $b = "0003"; if ($a > $b) print("a è maggiore di b"); if (strcmp($a, $b)) print("a è più grande di b"); • Espressione condizionale: // Un numero e' pari se, diviso per due, non da' resto echo "n è ".( $n % 2 == O ? "pari" : "dispari" ); gianfrasoft.wordpress.com - 2008
  • 13. PHP5: Espressioni / 2 Attenzione: • sono equivalenti al valore TRUE: – i numeri, interi o in virgola mobile, diversi da zero (compresi i negativi); – le stringhe non vuote; – gli array con almeno un elemento. • sono equivalenti al valore FALSE: – lo zero – le stringhe vuote – gli array privi di elementi gianfrasoft.wordpress.com - 2008
  • 14. PHP5: Flow control / 1 • Il costrutto if-elseif-else non impone l’utilizzo dei delimitatori di blocco delle istruzioni ({…}) se l’istruzione che segue il confronto si compone di una sola riga. if (condizione1) { blocco-istruzioni-1; } if ( $a < $b ) elseif (condizione2) echo '$a è minore di $b'; { elseif ( $a > $b ) blocco-istruzioni-2; { } echo '$a è maggiore di $b'; ... } } else else echo '$a e $b sono uguali'; { blocco-istruzioni-N; } gianfrasoft.wordpress.com - 2008
  • 15. PHP5: Flow control / 2 • Il costrutto switch-case è più compatto ed autoesplicativo del costrutto if- elseif-else. Può essere usato se la condizione è una soltanto. • L’istruzione break determina l’uscita immediata dopo l’esecuzione del blocco di istruzioni relativo al valore dell’espressione. • Il blocco di default viene eseguito solo se nessuno dei valori descritti nelle case viene restituito dall’espressione. switch (espressione) { case valore-1: switch( $a ) { blocco-istruzioni-1; case 1: break; echo("a è uguale a uno"); case valore-2: break; blocco-istruzioni-1; case 2: break; echo("a è uguale a due"); ... break; default: default: blocco-istruzioni-N; echo("a non é uno né due"); } } gianfrasoft.wordpress.com - 2008
  • 16. PHP5: Flow control / 3 • Il costrutto while antepone il confronto alle istruzioni; do-while lo postpone determinando che le istruzioni vengano eseguite sempre almeno una volta. • il costrutto continue fa saltare le istruzioni restanti nel blocco. Il costrutto break interrompe il ciclo. while (condizione) { blocco-istruzioni; } $cont = 1; $max = 10; while ( $cont <= $max ) { echo "contatore = $cont <br>"; $cont++; do { } blocco-istruzioni } while (condizione); gianfrasoft.wordpress.com - 2008
  • 17. PHP5: Flow control / 4 • Il costrutto for espone tre espressioni che determinano: – Assegnazione del valore iniziale della variabile di controllo. – Condizione di interruzione del ciclo. – Espressione di incremento. • il costrutto continue fa saltare le istruzioni restanti e fa passare direttamente all’iterazione successiva. il costrutto break invece fa uscire definitivamente dal ciclo. for (espr1; espr2; espr3) // ciclo for { for ($i = 1; $i <= 5; $i++) blocco-istruzioni; { } echo "$i &egrave; $i"; } gianfrasoft.wordpress.com - 2008
  • 18. PHP5: Cicli sugli elementi di un array • Le istruzioni while e foreach rappresentano il modo standard di accedere agli elementi di un array: // dichiaro un array $a = array( "Gianfranco" => "portiere", "Nicola" => "attaccante" ); // ciclo while while (list ($key, $val) = each($a)) echo "$key -> $val <br>"; // ciclo foreach foreach ($a as $valore) echo "Valore : $valore<br>"; gianfrasoft.wordpress.com - 2008
  • 19. PHP5: Funzioni / 1 • La dichiarazione di funzioni avviene con la parola chiave function e può essere dichiarata ovunque nello script PHP. function nome-funzione (lista_degli_argomenti) { blocco-istruzioni; } • Il risultato della funzione viene restituito utilizzando l'istruzione return(valore) che provoca l'uscita dalla funzione. • E’ consentita la definizione di funzioni ricorsive. function fattoriale($n) { if ($n == 0) return = 1; else return ($n * fattoriale($n - 1)); } // Scriverà 120 echo fattoriale(5); gianfrasoft.wordpress.com - 2008
  • 20. PHP5: Funzioni / 2 • PHP è tollerante rispetto al numero di parametri passati (in eccesso e in difetto). • Le variabili all’interno di una funzione sono private alla stessa. Per richiamare variabili globali si deve utilizzare la parola chiave global. • Le funzioni possono tenere memoria della loro esecuzione mediante l’utilizzo della parola chiave static. • Una funzione definita in uno script è disponibile ovunque in esso. // Scriverà 120 echo fattoriale(5); function fattoriale($n) { if ($n == 0) return = 1; else return ($n * fattoriale($n - 1)); } gianfrasoft.wordpress.com - 2008
  • 21. PHP5: Funzioni / 3 • Per passare ad una funzione un argomento per riferimento, dovete anteporre un ampersand (&) al nome dell'argomento nella definizione della funzione • Solitamente le funzioni vengono definite in file separati (librerie) da includere all'occorrenza nel programma: – include(filename): Ritorna un warning in caso di fallimento – require(filename): Ritorna un fatal error in caso di fallimento – require_ones(filename) - include_ones(filename): Come sopra ma se il file è già stato incluso non lo include nuovamente. function incrementa_di_5(&$n) { $n += 5; } $est = 3; incrementa_di_5($est); // Scriverà 8 echo $est; gianfrasoft.wordpress.com - 2008
  • 22. PHP5: Upload di file / 1 • Esiste un metodo standard per effettuare l’upload dei file in PHP5. • Se fileutente è il nome che abbiamo assegnato al campo della form contenente il file da caricare, in caso di successo dell’upload nello script di destinazione troveremo definito l'array associativo $HTTP_POST_FILES con i seguenti valori: – $HTTP_POST_FILES["fileutente"]["tmp_name"] - il nome del file temporaneo (sul server); – $HTTP_POST_FILES["fileutente"]["name"] - il nome originario del file (sul client); – $HTTP_POST_FILES["fileutente"]["size"] - la dimensione (in byte) del file; – $HTTP_POST_FILES["fileutente"]["type"] - il tipo di file, secondo la codifica MIME (ad esempio text/html). • Il form da dove viene caricato il file deve obbligatoriamente utilizzare come metodo di trasferimento il metodo POST. gianfrasoft.wordpress.com - 2008
  • 23. PHP5: Upload di file / 2 <? /* A proposito… ecco un modo sicuro di scrivere i commenti in HTML */ ?> <form enctype="multipart/form-data“ action="<?php echo $_SERVER["PHP_SELF"] ?>“ method="POST"> <input type="hidden" name="MAX_FILE_SIZE" value="10000"> <h3> Fai l'upload di questo file <p><input name="uploadfile" type="file"> <p><input type="submit" value="Invia File"></p> </h3> <p><input type=“reset" value="Cancella!“ /></p> </form> $file = $HTTP_POST_FILES["uploadfile"]; if (isset($file[tmp_name])) // notare l’assenza delle " nell’array { echo "<h3>Hai caricato il file $file[name], "; echo "la cui dimensione è $file[size] bytes. "; copy($file[tmp_name], "./UPLOADS/$file[name]") // copia file or die("<br>Non posso copiare il file."); echo "<p>Il nome sul server è <strong>$file[tmp_name]</strong>."; echo "<p>&egrave; stato salvato nella cartella <strong>UPLOADS/$file[name]</strong></h3>."; }
  • 24. PHP5 seconda parte - FINE Gianfranco Fedele Analista programmatore g.fedele@dinamicadigitale.it www.linkedin.com/in/gianfrasoft