Pagine Dinamiche e Forms

Lunedì, 19 Aprile 2004

OBIETTIVI DELLA LEZIONE
In questa lezione:
  1. impareremo la differenze tra pagine statiche e dinamiche
  2. vedremo come costruire un FORM HTML
  3. vedremo come vengono passati i dati ad una CGI

Pagine statiche vs pagine dinamiche

Dispense: 1-PagineDinamiche_new.pdf

FORMS

Un esempio: Form che scarica una pagina TELEVIDEO

<html>
<head>
<title>Esempio di form che accede a Televideo</title>
</head>
<body>
VISUALIZZA LA PAGINA TELEVIDEO
<br />
<form method="get" action="http://www.televideo.rai.it/nazionale/solotesto.asp">
<table>
    <tr>
    <th>Pagina Televideo:</th>
    <td><input type="text" name="tlv"></td>
    </tr>
    <tr>
    <th></th>
    <td><input type="submit" value="Visualizza"></td>
    </tr>
</table>
<input type="hidden" name="sottop" value="01">
</form>
</body>
</html>

Il nostro primo script PHP

<html>
<head>
<title>Prova FORM. La tua matricola è
<?php
print " " . $_REQUEST['matricola'] . ".";
?>
</title>
</head>
<body>
Ben arrivato
<?php
print "<b>" . $_REQUEST["nome"] . " " . $_REQUEST['cognome'] . "</b>";
?>
&nbsp;ti stavo aspettando. <br />
Il tuo numero di matricola è nel titolo.
</body>
</html>

Lab

Esercizio 1:
Costruire una pagina HTML che contenga un FORM che richieda all'utente di inserire nome, cognome e matricola. Il FORM deve inviare i dati con il metodo GET all'indirizzo http://www.dti.unimi.it/~sassi/LIA2003/provaform.php; i dati devono essere contenuti in controlli chiamati rispettivamente "nome", "cognome" e "matricola".
Una volta ottenuta la risposta corretta dal server, rifate l'esercizio utilizzando il metodo POST per l'invio dei dati. Cosa cambia?
Esercizio 2:
Dal sito www.trenitalia.com è possibile ottenere informazioni circa l'orario ferroviario. La pagina è però appensantita da immagini e applets. Scriviamo noi una nostra interfaccia!
Ispirandosi all'interfaccia a Televideo vista a lezione, preparare una pagina HTML che contenga un FORM che permetta di ottenere dal server http://orario.trenitalia.com/webapp/trenitalia/TimeTable l'orario di un particolare treno.
I controlli da fornire con il metodo POST (o GET, in questo caso funzionano entrambi) sono:
"stazin" (stazione di partenza),
"stazout" (stazione di arrivo),
"datag" (giorno di partenza),
"datam" (mese di partenza),
"dataa" (anno di partenza),
"timsh", (ora di partenza),
"timsm" (minuti dopo l'ora di partenza),
"lang" (linguaggio; suggerimento: predisporre un controllo hidden con il valore predefinito "it")
"nreq" (numero di risultati da visualizzare).
Esercizio 3: BONUS
In questo esercizio è richiesto di sviluppare una applicazione leggermente più complessa di quanto fatto fino ad ora (questo non vuol dire che le linee di codice richieste saranno molte).
Il signor Rossi è ossessionato dai consumi elettrici di casa e tenta in ogni modo di ridurli. A questo fine introduce spesso migliorie all'impianto (introduzione lampadine a basso consumo, elettrodomestici più avanzati, ...).
A fronte di ogni miglioria si annota su di un foglio la data e la lettura del contatore.
Sapendo che siete dei brillanti studenti, vi commissiona il programma tabellaconsumi.c che gli permetta di tenere nota delle lettura e creare a richiesta una pagina HTML con una tabella riassuntiva.
Il programma una volta partito deve mostrare il testo "PRONTO> " e rimanere in attesa di un comando. Una volta eseguito il comando deve tornare di nuovo nello stato di attesa (dovete scrivere un semplice interprete di comandi). I comandi che il programma accetta sono:
  1. 'E': termina il programma
  2. 'N': crea un file di testo vuoto "consumienel.txt" e lo chiude. Se il file esiste già chiede conferma prima di cancellarlo. Suggerimento: per verificare se il file esiste apritelo in sola lettura. Se non riuscite ad aprirlo significa che non esiste.
  3. 'C': cancella il file di testo "consumienel.txt". Chiede sempre conferma prima di cancellare.
  4. 'A': aggiunge una lettura al file "consumienel.txt". La lettura contiene quattro valori: giorno, mese, anno e KWh consumati. Suggerimento: per prima cosa chiedete il valore della lettura all'utente, quindi aprite il file e aggiungetela in fondo. Il file viene chiuso dopo ogni lettura aggiunta. Suggerimento: rigurdate l'input/output formattato!
  5. 'H': crea il file HTML "consumi.html" in cui ci sia per ogni riga il numero della lettura, la data e il numero di KWh consumati.
Chi spedisce l'esercizio risolto correttamente entro il 26 Aprile all'indirizzo sassi@dti.unimi.it potrà concorrere all'assegnazione di un bonus da utilizzare eventualmente in sede di esame.
Esercizio 4:
Scrivere un programma in C che calcoli la differenza tra due date qualunque inserite dall'utente. Le date devono essere memorizzate in un dato di tipo struct e passate ad una funzione calcoladifferenza().
Suggerimento: per verificare se un anno è bisestile, riguarda il programma "AnniBisestili.c" della lezione 4. Riguarda inoltre la lezione 7 e la differenza tra gli operatori "." e "->".

Per visualizzare la risposta di un web server alla richiesta del client, potete utilizzare il client telnet PuttyTel.
Per esempio, dopo averlo lanciato specificate l'Hostname (www.dti.unimi.it), la porta (80), il protocollo (RAW) e specificate "Close window on exit": NEVER.
Quindi una volta aperta la finestra telnet (potrebbe non apparire nulla) digitate, ad esempio,
GET / HTTP/1.0
e premete enter due volte.

Ad esempio, una richiesta GET minimale allo script PHP dell'esercizio 1

GET /~sassi/LIA2003/provaform.php?nome=Giovanni&cognome=Rossi&matricola=123456 HTTP/1.0

... e una richiesta POST minimale:

POST /~sassi/LIA2003/provaform.php HTTP/1.0
Host: www.dti.unimi.it
Content-Type: application/x-www-form-urlencoded
Content-Length: 44

nome=Giovanni&cognome=Rossi&matricola=123456




Informazioni sul sito