• Non ci sono risultati.

4 Tecnologie Web: approcci avanzati

N/A
N/A
Protected

Academic year: 2022

Condividi "4 Tecnologie Web: approcci avanzati"

Copied!
15
0
0

Testo completo

(1)

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 1

Tecnologie Web:

approcci avanzati

a.a. 2020/2021

4

Anna Goy

(2)

Object-oriented

interazione con il client PHP:

(form)

(3)

Tecnologie Web: approcci avanzati

Goy - a.a. 2020/2021 3

FORM in HTML - I

In HTML...

<FORM METHOD="POST" ACTION="id.php" >

campi...

</FORM>

metodo HTTP utilizzato (di fatto, modo in cui vengono codificati i dati nell'HTTP request)

GET: i dati (coppie <nome, valore>) sono scritti in

coda alla risorsa richiesta POST: i dati (coppie <nome, valore>) sono scritti all'interno del body di HTTP request

script o programma server-side che "raccoglie" ed "elabora" i dati contenuti nel form

HTTP header

risorsa = identif.php HTTP body...

dati: <login, admin>

<pwd, pippo>

...

HTTP header

risorsa = identif.php?login=admin&pwd=pippo HTTP body......

(4)

Tipi di campi (tag <INPUT...>):

• Caselle di testo (di vario tipo)

<INPUT TYPE="text" NAME="login"/>

<INPUT TYPE="password" NAME="pwd"/>

• Pulsanti di opzione (radio button)

<INPUT TYPE="radio" NAME="accetto" value="si"/>

<INPUT TYPE="radio" NAME="accetto" value="no"/>

NB sono mutuamente esclusivi!

• Caselle di controllo (checkbox)

<INPUT TYPE="checkbox" NAME="cinema"/>

<INPUT TYPE="checkbox" NAME="teatro"/>

Oppure

<INPUT TYPE="checkbox" NAME="interessi[]" value="cinema"/>

<INPUT TYPE="checkbox" NAME="interessi[]" value="teatro"/>

NB non sono mutuamente esclusivi!

⇒ devo usare nomi diversi, opp "raccoglierli" in un array!

FORM in HTML - II

NB stesso nome!

(5)

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 5

• Campi nascosti

<INPUT TYPE="hidden" NAME="utente" value="pippo"/>

non vengono visualizzati nella pagina, ma vengono inclusi in HTTP request:

<utente, pippo>

• Pulsante di invio (submit)

<INPUT TYPE="submit" value="invia"/>

Pulsante di reset

<INPUT TYPE="reset" value="reset"/>

NB Il tag <INPUT...> ha altri attributi opzionali, per esempio:

<INPUT TYPE="text" NAME="login" value="pippo" size="4"/>

<INPUT TYPE="checkbox" NAME="interessi" value="cinema"

checked/> [NB checked ≡ checked=true]

FORM in HTML - III

(6)

Altri tipi di campi:

Aree di testo

<TEXTAREA NAME="msg" cols="20" row="5">

</textarea>

Drop-down menu (select)

<SELECT NAME="job">

<option value="null"> </option>

<option value="imp">impiegato</option>

<option value="ins">insegnante</option>

</SELECT>

NB Il tag <SELECT...> ha un attributo opzionale:

<SELECT NAME="job" multiple >

... [NB multiple ≡ multiple=true]

se multiple=true posso effettuare selezioni multiple (click col mouse sulle scelte,

tenendo premuto il tasto Ctrl) → Attenzione! questa soluzione non è tanto usabile...

spesso meglio una checkbox!

FORM in HTML - IV

(7)

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 7

HTML5 introduce:

• nuovi valori per l'attributo type che fanno sì che alcuni controlli vengano effettuati automaticamente:

– <input type="email">

– <input type="url">

• nuovi valori per l'attributo type che fanno sì che venga fornito all'utente un widget per

l'input del dato:

– <input type="date">

FORM in HTML - V

(8)

• nuovi attributi per facilitare l'input e controllarlo:

placeholder: testo che compare in un campo e che scompare quando l'utente inizia a scrivere

required: attributo booleano che serve a rendere obbligatoria la compilazione dell'elemento; il controllo viene fatto automaticamente all'invio del form

<textarea

placeholder="Scrivi qui il tuo messaggio"

required>

</textarea>

NB per gli attributi booleani vale la seguente equivalenza:

attr=trueattr (es: required=truerequired)

FORM in HTML - VI

(9)

Tecnologie Web: approcci avanzati

Goy - a.a. 2020/2021 9

FORM in HTML - VII

I valori inseriti attraverso i campi del form vanno a finire nell'HTTP request, nella forma di coppie <nome, valore>

⇒ 1. attenzione all'attributo NAME nel tag HTML corrispondente!

2. attenzione a non usare spazi o caratteri strani (sia nel NAME che nel valore inserito dall'utente)!

es: http://www.mysite.com/choice.php?my taste=milkchocolate

errore!

es: http://www.mysite.com/choice.php?taste=milk&chocolate

errore!

nel NAME... basta evitarlo!

nel valore (inserito dall'utente) → URL encoding (sostituzione dei caratteri "strani" inseriti nei campi dei form)

... per fortuna i browser lo fanno automaticamente!

(vedremo una problematica simile quando accenneremo ai problemi di sicurezza e di validazione dell'input...)

(10)

FORM in HTML - VIII

NOTA: Il caso delle checkbox è un po' più complesso...

se ogni checkbox ha un nome diverso, allora verranno inseriti nell'HTTP request solo le caselle selazionate, come coppie <nome, ON>; x es:

<INPUT TYPE="checkbox" NAME="cinema"/>

<INPUT TYPE="checkbox" NAME="teatro"/>

<INPUT TYPE="checkbox" NAME="musica"/>

<INPUT TYPE="checkbox" NAME="sport"/>

→ <cinema,ON> <teatro,ON> <musica,ON>

• se le checkbox hanno lo stesso nome (un array), allora nell'HTTP request ci sarà una sola coppia, il cui valore sarà un array; x es:

<INPUT TYPE="checkbox" NAME="interessi[]" value="cinema"/>

<INPUT TYPE="checkbox" NAME="interessi[]" value="teatro"/>

<INPUT TYPE="checkbox" NAME="interessi[]" value="musica"/>

<INPUT TYPE="checkbox" NAME="interessi[]" value="sport"/>

→ <interessi,{cinema,teatro,musica}>

(11)

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 11

PHP: gestire i dati dei form - I

Come faccio (dallo script contenuto nella pagina PHP indicata nell'attributo

ACTION del tag <FORM...>) a leggere i parametri contenuti in HTTP request?

• I parametri sono resi disponibili a PHP all'interno di due variabili

"superglobali" (superglobals), predefinite e accessibili da qualunque pagina PHP: $_GET[] e $_POST[]

• $_GET[] e $_POST[] sono array associativi

− se il metodo utilizzato è GET, i parametri sono memorizzati in $_GET[]

$_GET["login"] admin

$_GET["pwd"] pippo

− se il metodo utilizzato è POST, i parametri sono memorizzati in $_POST[]

$_POST["login"] admin

$_POST["pwd"] pippo

admin pippo

...

login pwd ...

chiavi valori

(12)

PHP: gestire i dati dei form - II

NB1 le chiavi in $_GET[] o $_POST[] sono definite dai valori degli attributi NAME nei tag INPUT (o SELECT, o TEXTAREA):

<FORM METHOD="POST" ...>

<INPUT TYPE="text" NAME="login" /> → $_POST["login"]

NB2Essendo array (associativi), $_GET[] o $_POST[] possono essere manipolati con le funzioni per gli array (es. count, print_r, ecc.) e con i cicli, x es:

<?php foreach ($_POST as $par) { ?>

<p>parametro: <?= $par ?></p>

<?php } ?>

→ stampa solo i valori, senza chiavi!

<?php foreach ($_POST as $par => $val) { ?>

<p>parametro: <?= $par ?> = <?= $val ?> </p>

<?php } ?>

→ stampa chiavi e valori

parametro: admin parametro: pippo

parametro: login = admin parametro: pwd = pippo

(13)

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati 13

PHP: gestire i dati dei form - III

NB3Il caso delle checkbox è un po' più complicato...

supponiamo di aver utilizzato un array (metodo consigliato), allora devo estrarre il valore (che è un array) e poi utilizzare un ciclo; x es:

$inter = $_POST["interessi"];

foreach ($inter as $int) { print $int.", ";

}

Il caso dei drop-down menu con scelta multipla è analogo...

chiave valore

ARRAY interessi

cinema teatro 0

1

23 musica sport

$_POST

cinema, teatro, musica, sport,

(14)

PHP: gestire i dati dei form - IV

Attenzione!!

Questi esempi mettono a rischio la sicurezza della vostra applicazione!!

MAI usare direttamente il valore di un parametro, senza controlli!!

• l'utente, infatti, potrebbe aver inserito testo, immagini, tag, o anche codice, che potrebbe finire nella pagina (visualizzato o peggio eseguito) o – come vedremo – nella query ad un database...!!!

• occorre sempre validare l'input (controllare i valori dei parametri) per evitare iniezioni di codice maligno; x es:

<?php

$nome = htmlspecialchars($_POST["name"]);

?>

<p>Benvenuto <?= $nome ?></p>

funzione che ricodifica i caratteri speciali dell'HTML (rendendoli innocui), x es:

$txt="<p>hello</p>";

$clean_txt=htmlspecialchars($text); &lt;p&gt;hello&lt;/p&gt;

(15)

Goy - a.a. 2020/2021 Tecnologie Web: approcci avanzati

CASE STUDY: quiz

(versione 2) Aggiorniamo il case study

• costruiamo un form per permettere all'utente di inserire le risposte nel quiz

cercate di usare campi di input diversi: testo, drop-down menu, checkbox, radio button, ...

potete aggiungere alla classe Domanda

(a) una variabile per indicare quale tipo di campo di form richiede quella domanda;

(b) una variabile (magari di tipo array) che contenga le possibili risposte

nella classe Risposta potrebbe esserci anche una variabile che dica se la risposta è corretta...

• leggiamo le risposte e calcoliamo i punti

• diamo un feedback all'utente

Suggerimento: siccome gli script in DomandaII.php, RispostaII.php, domande_v2.php si occupano esclusivamente di gestire i dati, "isoliamoli" in una cartella (x es. dataMgr)...

PUT ALL TOGETHER & TRY YOURSELF!

RIF dataMgr/DomandaII.php, dataMgr/RispostaII, dataMgr/domande_v2.php, quiz_v2.php, quiz_v2_elabora_risposte.php 15

Riferimenti

Documenti correlati

came into force (huge potential for energy efficiency gains in the EU building sector, includes measures that advance the rate of building renovation and enhance the

Nella prima parte di questo lavoro, capitoli 1 e 2, ho voluto introdurre l’argomento della trasmissione transgenerazionale del trauma, partendo prima da un’analisi dei

Ovviamente, il Commercio Elettronico per la maggior parte si fa tramite il WEB.

A tal proposito dichiara e garantisce di tenere indenne e manlevare la redazione dei siti internet utilizzati per la formazione di cui al presente bando, nonché i soggetti ad

● Con più di un milione download, conducenti di tutto il mondo stanno risparmiando ore di lavoro ogni giorno. ● Organizza il tuo percorso in meno di

Non c’è alcun dubbio che quella degli anzia- ni rappresenta una delle fasce più deboli della nostra società, ed è una parte pre- ponderante della popolazione che non vive

Interi piani cristallini presentano una disposizione anomala rispetto al cristallo perfetto (superficie esterna del cristallo, bordi di grano) Difetti di volume.. Alterazione

mentre vi immagino impegnati nelle stesure, vi ricordo che il termine ultimo per la presentazione delle relazioni, di Didattica e di Laboratorio, è il 10 Maggio, mentre quello per