Costruzione di Siti Web con PHP e MySQL. Lezione 4: Operatori, Array, Controlli e Cicli

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Costruzione di Siti Web con PHP e MySQL. Lezione 4: Operatori, Array, Controlli e Cicli"

Transcript

1 Costruzione di Siti Web con PHP e MySQL Lezione 4: Operatori, Array, Controlli e Cicli

2 Argomenti della lezione In questa lezione si riprenderà il concetto di Array, nel suo aspetto basilare, ed in particolare si vedranno quali sono le funzioni per modificare i suoi elementi Si darà uno sguardo ad un array particolare $_GET per il passaggio di parametri ad una pagina web. Successivamente si darà spazio a ciò che sono le strutture di controllo e come scriverle. Come ultimo argomento vi sono i cicli, e impareremo come ciclare dinamicamente su un array. Nella seconda parte della lezione, scriveremo dei programmi di riepilogo per esercitarsi su questi argomenti. Pagina 1

3 Funzioni per modificare gli array Vi sono delle funzioni native interne al linguaggio per modificare il contenuto degli array, modificarne la struttura ed effettuare ordinamenti; qui di seguito una tabella che rappresenta le istruzioni più comuni: Funzione count(array) array_reverse(array [, booleano]) sort(array) in_array(valore, array) array_key_exists(valor e, array) Significato conta il numero di elementi dell'array. Restituisce un intero. inverte l'ordine degli elementi dell'array. Se vogliamo mantenere le chiavi dell'array di input, dobbiamo passare il secondo parametro con valore TRUE. Restituisce l'array di input con gli elementi invertiti. ordina gli elementi dell'array. Bisogna fare attenzione, perchè questa funzione, contrariamente a molte altre, modifica direttamente l'array che le viene passato in input, che quindi andrà perso nella sua composizione originale. cerca il valore all'interno dell'array. Restituisce un valore booleano: vero o falso a seconda che il valore cercato sia presente o meno nell'array. cerca il valore fra le chiavi (e non fra i valori) dell'array. Restituisce un valore booleano. array_search(valore, array) cerca il valore nell'array e ne indica la chiave. Restituisce la chiave del valore trovato o, se la ricerca non va a buon fine, il valore FALSE. Pagina 2

4 Funzioni per modificare gli array Funzione array_merge(array, array [, array]) array_pop(array) array_push(array, valore [,valore]) array_shift(array) Significato fonde gli elementi di due o più array. Gli elementi con chiavi numeriche vengono accodati l'uno all'altro e le chiavi rinumerate. Le chiavi associative invece vengono mantenute, e nel caso vi siano più elementi nei diversi array con le stesse chiavi associative, l'ultimo sovrascrive i precedenti. Restituisce l'array risultante dalla fusione. estrae l'ultimo elemento dell'array, che viene 'accorciato'. Restituisce l'elemento in fondo all'array e, contemporaneamente, modifica l'array in input togliendogli lo stesso elemento. accoda i valori indicati all'array. Equivale all'uso dell'istruzione di accodamento $array[]=$valore, con il vantaggio che ci permette di accodare più valori tutti in una volta. Restituisce il numero degli elementi dell'array dopo l'accodamento. estrae un elemento come array_pop(), ma in questo caso si tratta del primo. Anche in questo caso l'array viene 'accorciato', ed inoltre gli indici numerici vengono rinumerati. Rimangono invece invariati quelli associativi. Restituisce l'elemento estratto dall'array. Pagina 3

5 Funzioni per modificare gli array Qui di seguito, alcuni esempi di codice: $arr = array('luca', 'Giovanni', 'Matteo', 'Paolo', 'Antonio', 'Marco', 'Giuseppe'); $n = count($arr); // $n vale 7 $arr1 = array_reverse($arr); // $arr1 avrà gli elementi invertiti, da 'Giuseppe' a 'Luca' echo $arr[1], '<br>'; // 'Giovanni' echo $arr1[1], '<br>'; // 'Marco' sort($arr); /* ora $arr sarà modificato e conterrà: * 'Antonio', 'Giovanni', 'Giuseppe', 'Luca', 'Marco', ' Matteo', 'Paolo' */ $a = in_array('giovanni', $arr); // $a è vero (TRUE) $a = in_array('francesco', $arr); // $a è falso (FALSE) $ultimo = array_pop($arr); // $ultimo è 'Paolo' (li avevamo ordinati!) $ultimo = array_pop($arr); // ora $ultimo è 'Matteo', e in $arr sono rimasti 5 elementi $primo = array_shift($arr); // primo è 'Antonio' Pagina 4

6 Funzioni per modificare gli array Qui di seguito, alcuni esempi di codice: $arr = array( 'Luca', 'Giovanni', 'Matteo', 'Paolo', 'Antonio', 'Marco', 'Giuseppe' ); // === $arr1 avrà gli elementi invertiti, da 'Giuseppe' a 'Luca' $arr1 = array_reverse($arr); // === $stringa diventa 'Matteo Antonio Giovanni Giuseppe Luca Marco' */ $stringa = implode(' ', $arr); /* $new_arr conterrà 13 elementi: * 'Matteo', 'Antonio', 'Giovanni', * 'Giuseppe', 'Luca', 'Marco' (questi sono i 6 provenienti da $arr), * 'Giuseppe', 'Marco',' Antonio', 'Paolo', * 'Matteo', 'Giovanni', 'Luca' (questi sono i 7 di $arr1). * Gli indici andranno da 0 a 12. */ $new_arr = array_merge($arr, $arr1); Pagina 5

7 Argomenti della lezione Qui di seguito, alcuni esempi di codice: // Impostiamo ora un array con chiavi associative: $famiglia = array( 'padre' => 'Claudio', 'madre' => 'Paola', 'figlio' => 'Marco', 'figlia' => 'Elisa' ); // === creiamo una copia del nostro array per poter fare esperimenti $fam1 = $famiglia; // === ora $fam1 sarà 'Paola', 'Marco', 'Elisa', 'Claudio', con chiavi da 0 a 3 rsort($fam1); $fam1 = $famiglia; // ripristiniamo l'array originale /* di nuovo $fam1 sarà 'Paola', 'Marco', 'Elisa', 'Claudio', * ma ciascuno con la sua chiave originale * ('madre', 'figlio', 'figlia', 'padre') */ arsort($fam1); $a = array_key_exists('figlia', $fam1); // $a è TRUE $a = array_key_exists('zio', $fam1); // $a è FALSE $a = array_search('claudio', $fam1); // $a è 'padre' $a = array_search('matteo', $fam1); // $a è FALSE Pagina 6

8 Passaggio di parametri ad una pagina con $_GET Adesso vedremo come è possibile passare dei parametri in ingresso alla nostra pagina servendoci di una chiamata di tipo HTTP GET. Tale chiamata si concretizza nel passare i parametri direttamente nella nostra URL; esprimiamo tali parametri con un elenco di coppie (nome_parametro=valore) separati dal carattere & e che comincia con carattere?. Dobbiamo fare attenzione al passaggio delle stringhe, osservando queste semplici regole: In una URL non sono ammessi spazi, quindi per specificarlo dobbiamo usare il simbolo %20 Non sono ammessi caratteri accentati (à, è, é, ù, ò ) Il carattere # indica il riferimento ad un ancora e non è consigliabile inserirlo nelle nostre stringhe Accertarsi di non avere stringhe che contengono il carattere & in quanto potrebbe compromettere la nostra sequenza di parametri Quindi possiamo esprimere la nostra URL nel seguente modo: Pagina 8

9 Passaggio di parametri ad una pagina con $_GET In PHP, all'interno del nostro script abbiamo automaticamente popolato un array associativo $_GET che contiene le coppie parametro=valore // === Array generato AUTOMATICAMENTE DA PHP $_GET['par1']='val1'; $_GET['par2']='frase con spazio'; $_GET['par3']='60'; Esercitazione 1 Scrivere un programma che mi mostra a video l'elenco dei parametri passati come HTTP GET Esercitazione 2 Scrivere un programma che mi mostra a video il tipo di dato di ogni parametro passato come HTTP GET Esercitazione 3 Scrivere un programma che effettua il merge e l'ordimamento di un'array definito internamente al programma e l'array popolato dalla chiamata HTTP GET Pagina 10

10 Strutture di controllo All'interno di ogni programma c'è la necessità di effettuare delle valutazioni, controllare il valore delle nostre variabili. Le strutture di controllo che andremo ad esaminare solo le seguenti: if elseif else e switch // === Struttura di if if(<condizione>) { // --- Istruzioni se <condizione> si verifica } Come si esprime una <condizione>? Il fatto che la nostra condizione si verifichi vuol dire che il suo valore sia TRUE; la nostra <condizione> può essere il risultato di una espressione booleana, il valore di uscita di una funzione o una combinazione di entrambi, mediante l'uso degli operatori! (not) (or) && (and) == (confronto) < o <= > o >= Pagina 11

11 Strutture di controllo Ecco degli esempi di scrittura di espressioni booleane: // === Definisco due variabili $a = 10; $b = 30; if($a == 20 && $b == 50) { // --- Visualizzo risultato echo ($a + $b); } Questo si traduce come: se(if) il valore della variabile $a è uguale (==) a 20 e (&&) il valore della variabile $b è uguale (==) a 30 allora visualizza (echo) la loro somma. // === Definisco due variabili $a = 'testo'; $b = 30; if($a == 20 && $b == 50) { // --- Visualizzo risultato echo ($a + $b); } In questo caso la nostra espressione booleana sarà FALSE. Perchè? Pagina 12

12 Strutture di controllo // === Definisco due variabili $a = 'testo'; $b = 30; if(is_int($a) && $a == 20 && ($b == 50 $b <= 300 )) { // --- Visualizzo risultato echo ($a + $b); } Se $a è un valore intero ( is_int($a)==true ) e(&&) $a è uguale a 20 e (&&) ($b è uguale a 50 oppure( ) $b è minore o uguale a 300) Allora Visualizza la somma tra $a e $b Pagina 13

13 Strutture di controllo // === Analizzo le variabili che mi arrivano come HTTP GET If( count($_get)!=0 && isset($_get['nome']) &&!empty($_get['cognome']) ) { echo "\n"$_get['nome'].' - '.$_GET['cognome']; } Questa espressione si legge: se(if) l'array $_GET non è vuoto e(&&) esiste l'elemento dell'array $_GET['nome'] e(&&) non è vuoto l'elemento dell'array $_GET['cognome'] Allora Visualizza nome - cognome Esercitazione 1 Scrivere un programma che verifica parametri passati come HTTP GET siano 5 e che siano rispettivamente un intero, due stringa, un intero e una stringa con spazi e mostra a video il la somma dei parametri interi. Pagina 14

14 Strutture di controllo Nel nostro if c'è anche il caso contrario, dettato dalla parola chiave else, che esegue arbitrariamente del codice lì dove la nostra <condizione> non è verificata // === Struttura di if if(<condizione>) { // --- Istruzioni se <condizione> si verifica } else { // --- altrimenti esegui queste istruzioni } Il codice else (altrimenti) viene eseguito se la nostra <condizione> (o espressione booleana) dà esito FALSE. Pagina 15

15 Strutture di controllo Possiamo anche avere degli if più struttrati che ci possono servire in caso di espressioni booleane a più fasi: qui entra in gioco else if // === Struttura di if if(<condizione1>) { // --- Istruzioni se <condizione> si verifica <statement1> } else if(<condizione2>) { // --- altrimenti esegui queste istruzioni <statement2> } else if(<condizione3>) { // --- altrimenti esegui queste istruzioni <statement3> } else { // --- altrimenti esegui queste istruzioni <statement4> } Se quindi se <condizione1> si verifica allora esegui <statement1>, se si verifica <condizione2> allora esegui <statement2>, se si verifica <condizione3> allora esegui <statement3> altrimenti esegui <statement4> Pagina 16

16 Strutture di controllo: switch case -defalut Nel nostro codice possiamo avere l'esigenza di controllare in modo sequenziale e il valore della nostra variabile ed eseguire uno <statement> specifico per quel valore; potremmo scrivere degli if annidati, ma non è una buona prassi di programmazione. In questo caso c'è il controllo switch che ha la seguente struttura: // === valuto il valore della variabile switch (<variabile>) { case '<valore1>'; // --- <statement1> break; case '<valore2>'; // --- <statement2> break; case '<valore3>'; // --- <statement3> break; } default: // --- <statement_default> break; Pagina 16

17 Strutture di controllo: switch case -defalut In questo caso lo statement non va specificato tra parentesi graffe {}, ma termina con la parola chiave break che indica la fine del blocco. Se nessuna la nostra variabile di ingresso non rientra in nessuno dei valori specificati nei case allora viene eseguito lo statement di default; l'esistenza di questo statement è facoltativa. switch ($nome) { case 'Gianfranco'; echo 'Docente corso'; break; } case 'Coral': echo 'Studentessa del corso'; break; case 'ARMANDO': echo 'Persona non appartente del corso'; break; default: echo 'Persona non indentificata'; break; Pagina 17

18 Strutture di controllo: switch case -defalut Ciò che noi valutiamo dopo il case può essere anche di natura mista, in quanto avviene automaticamente la convesione in mixed come tipo di dato. Esercitazione 1 Scrivere un programma che accettando in ingresso un parametro via HTTP GET, disegni un sistema di navigazione a tab evidenziando il tab attivo e quelli non attivi; verificare inoltre che il valore in ingresso sia corretto. Pagina 18

Costruzione di Siti Web con PHP e MySQL. Lezione 5: Cicli, Funzioni, Operazioni con Stringhe e Date

Costruzione di Siti Web con PHP e MySQL. Lezione 5: Cicli, Funzioni, Operazioni con Stringhe e Date Costruzione di Siti Web con PHP e MySQL Lezione 5: Cicli, Funzioni, Operazioni con Stringhe e Date Argomenti della lezione In questa lezione si riprenderanno le strutture di controllo, verrà introdotto

Dettagli

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008

[MANUALE VISUAL BASIC SCUOLA24ORE PROF.SSA PATRIZIA TARANTINO] 14 dicembre 2008 Se devo memorizzare più valori che sono in qualche modo parenti dal punto di vista logico, posso usare il concetto di vettore di variabili (array). Ad esempio, se devo memorizzare le temperature di tutti

Dettagli

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI

PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA DI UN ELEMENTO IN UN ARRAY E ALGORITMI RISOLUTIVI PROBLEMA DELLA RICERCA in termini generali: Dati in input un insieme S di elementi (numeri, caratteri, stringhe, ) e un elemento

Dettagli

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali

Introduzione a Visual Basic Lezione 1 Concetti base e istruzioni condizionali a Visual Basic Lezione 1 Concetti base e istruzioni condizionali Mario Alviano Introduzione all informatica Università della Calabria http://alviano.net/introinfo A.A. 2008/09 Introduzione Un esempio:

Dettagli

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione

Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione Libreria standard Java possiede un enorme libreria di classi standard organizzata in vari package che raccolgono le classi secondo un organizzazione basata sul campo d utilizzo. I principali package sono:

Dettagli

Algebra Booleana ed Espressioni Booleane

Algebra Booleana ed Espressioni Booleane Algebra Booleana ed Espressioni Booleane Che cosa è un Algebra? Dato un insieme E di elementi (qualsiasi, non necessariamente numerico) ed una o più operazioni definite sugli elementi appartenenti a tale

Dettagli

JAVASCRIPT. Tale file è associato alla pagina web mediante il tag