PYTHON Inviare dati con i form A cura di Silvio Bonechi [sabandini_at_tiscali_dot_it] per

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "PYTHON Inviare dati con i form A cura di Silvio Bonechi [sabandini_at_tiscali_dot_it] per http://www.pctrio.com"

Transcript

1 PYTHON Inviare dati con i form A cura di Silvio Bonechi [sabandini_at_tiscali_dot_it] per Ver. 1.0 In questo articolo vedremo come gestire con un FORM l invio di dati ad un server e di come questi possa riceverli e renderli disponibili per un successivo utilizzo. Unico prerequisito la conoscenza, anche minima, dell HTML. Indice 1 Un po di teoria: i metodi get e post per la gestione dei dati Generiamo un form per l invio di dati Riceviamo i dati inviati con un form Controlliamo i dati passati per vedere se ci sono errori Confermiamo i dati ricevuti Un po di teoria: i metodi get e post per la gestione dei dati I FORM sono un comodo strumento che consentire di poter attuare dei meccanismi di comunicazione interattiva asincrona tra un server ed un utente remoto. Questo ultimo potrà utilizzare una pagina web per la compilazione di campi informativi che invierà ad un server remoto dove i valori ricevuti verranno estratti ed utilizzati. Prestiamo buona attenzione a come questi valori vengono passati: con il metodo GET saranno visibili sul nostro browser, mentre con il metodo POST verranno inviati in maniera anonima che non ne consentirà la libera visualizzazione. Python non si sottrae a questa casistica generale e sta al programmatore scegliere quale dei due metodi utilizzare per l invio dei dati al server scegliendo il valore più adatto, GET oppure POST, per il comando ACTION METHOD del form. Noi vedremo uno script che sarà in grado di capire se deve generare il form per l invio oppure elaborare i dati inviati con lo stesso e presentare un messaggio di errore oppure i valori dei parametri passati con il form. Potremo così meglio apprezzare la semplicità di gestione offerta da Python il grande. Trattandosi di un esempio è suscettibile di miglioramenti ma a noi serve per introdurre questo argomento. 2 Generiamo un form per l invio di dati Generare un form con Pythonè veramente semplice. Certo dovremo conoscere un po di HTML, sapere quali dati si debba richiedere, ma con semplici comandi di stampa dei comandi HTML generemo il nostro form. Ecco la porzione di codice che, nel nostro script, si occupa di generare il form. 1 2 # Print the Form 3 def print_form(err, nome, cognome, ): print """ 8 <head><title>modulo Richiesta di Informazioni</title></head> 9 <body> 10 <h1>modulo Richiesta Informazioni</h1> 11 Si prega di specificare i suoi dati.<br> 12 Verrà rincontattato al più presto.<hr> 13 """ Pagina 1 di 1

2 16 if err: 17 print "<h2><b>errore nel modulo:</b> <tt>"+err+"</tt></h2>" # output del form con i valori correnti 20 print """ 21 <form action='%s' > 22 <table> 23 <tr><td>nome: 24 <td><input type="text" name="nome" size="20" value="%s"><br> 25 <tr><td>cognome: 26 <td><input type="text" name="cognome" size="20" value="%s"><br> 27 <tr><td> <br> 28 <td><input type="text" name=" " size="20" value="%s"><br> 29 <tr><td colspan=2 align=center><input type="submit" name="invia" value="invia"> 30 </table> 31 </form> 32 """ % (REREFER, nome, cognome, ) Analizziamolo in dettaglio. Altri non è che una procedura def print_form(): alla quale vengono passati dei parametri err, nome, cognome, che verranno visualizzati su schermo parametrizzando una istruzione di stampa. La notazione print % (x1,x2) ci consente di scrivere su più righe una stringa parametrizzata con la notazione %s al posto di ciascuna occorrenza della quale verranno stampati i valori delle variabili passate che, se in numero maggiore di uno sono incluse tra parentesi e separate da virgola, vengono indicate dopo il segno % al termine della stringa. Con questa semplice notazione potremo generare tanti form nei quali i valori delle variabili potranno cambiare automaticamente. Pensate come diventa facilmente gestibile, per esempio, la modifica di dati registrati in una base di dati: si legge il record, si presentano i video i valori dei campi, si modificano e si riscrivono sulla tabella! Un solo script python,due pulsanti di azione (leggi record, scrivi dati), 3 procedure e si fa tutto.con un codice facilmente leggibile e manutenibile, come vedremo in un altro articolo. Vediamolo eseguito nel browser. Ok. Compiliamo i campi Nomi Cognome ed , pigiamo il pulsante INVIA e Pagina 2 di 2

3 3 Riceviamo i dati inviati con un form se non abbiamo inserito tutti i campi otterremo una videata di errore come compare nell immagine che segue. Se invece abbiamo scritto in maniera non corretta l indirizzo di posta elettronica, otterremo questo: Quando finalmente tutti i dati richiesti saranno scritti in maniera corretta si otterrà la seguente videata: Pagina 3 di 3

4 Questi risultati sono stati ottenuti impiegando una procedura per il controllo degli errori, che illustreremo nel paragrafo 4; ed una per la visualizzazione dei parametri passati, che illustreremo nel paragrafo 5. Ma prima vediamo il programma principale del nostro script. 1 # 2 # MAIN PROGRAM 3 # 4 print "Content-type: text/html\n\n<html>" 5 6 form = cgi.fieldstorage() 7 (err, nome,cognome, ) = form_check(form) 8 9 if form.has_key("invia"): 10 if err: 11 print_form(err, nome, cognome, ) send_mail(form) # first run 16 print_form("", nome, cognome, ) print "<hr>la ringraziamo per la preferenza accordataci.<br>cordiali Saluti.</html>" La riga 4 indica sia il tipo di dati che invieremo al browser che, con \n, i due righi vuoti obbligatori. La riga 6 serve a memorizzare nell array associativo o hash form tutti quante le variabili passate ed i valori che le stesse contengono. Ciascuna variabile corrisponde ad un campo input type del form, il name di quel campo sarà impiegabile come indice dell hash per ricavarne il valore passato. Il valore di ogni variable sarà ricavabile con la notazione <valore_campo>=form[ <nome_campo> ].value ed assegnabile ad una variabile. La riga 7 è una assegnazione multipla. Le variabile, separate dalla virgola, verranno valorizzate con i valori ritornati dalla funzione form_check: che riceve come parametro l elenco dei campi e dei valori ricevuti dal form con la pressione sul pulsante invia. Qui valorizziamo anche la variabile err che utilizzeremo successivamente. Con la riga 9 inizia la parte di logica del nostro script. Se per eseguire lo script abbiamo pigiato il pulsante invia possiamo essere certi che i campi sono stati compilati: se in essi ci sono errori (riga 10) presenteremo una videata di errore, print_form("", nome, cognome, ), altrimenti, riga 12 e 13, con send_mail(form), la videata di Conferma Richiesta. Se invece, riga 14, lo script è stato richiamato per la prima volta non si è certamente pigiato il pulsante invia ed eseguiremo, riga 16, la procedura print_form("", nome, cognome, ). Comunque, in presenza di una qualunque delle opzioni sopra descritte, ringrazieremo gli utenti, riga 18, porgendo loro i nostri saluti. 4 Controlliamo i dati passati per vedere se ci sono errori Pagina 4 di 4

5 Coerentemente con il resto dello script utilizzeremo una funzione, def form_check(form): la quale riceve, come parametro, l array dei dati ricevuti dal form, ne controlla la correttezza formale, e restituisce le corrispondenti variabili di lavoro inizializzate con valori coerenti alle situazioni riscontrate. 1 def form_check(form): 2 3 err = "" 4 nome = "" 5 cognome = "" 6 = "" 7 8 if not form.has_key("nome"): 9 err = err + "<br>specificare il nome" nome = form["nome"].value 12 if not form.has_key("cognome"): 13 err = err + "<br>specificare il cognome" cognome = form["cognome"].value 16 if not form.has_key(" "): 17 err = err + "<br>specificare l' " = form[" "].value 20 if string.find( , == -1: 21 err = err + "<br>il formato della non e' corretto" return (err, nome, cognome, ) Nelle righe da 3 a 6 si inizializzano, vuote, tutte le variabili di lavoro. Poi, si controlla per ciascuna variabile attesa se non sia stata passata (if not form.has_key("nome"): 1 ): se non lo è stata si predispone un opportuno messaggio di errore (err = err + "<br>specificare il nome") altrimenti si valorizza la variabile con il valore ricevuto dal form (nome = form["nome"].value). Solo per la variabile si procede, nel caso sia stato ricevuto un valore, a verificare se il valore contiene una occorrenza del tipico delle notazioni degli indirizzi di posta elettronica. Se non viene trovato nel valore della variabile (if string.find( , == -1:) si predispone il messaggio di errore. Lo script termina, riga 23, con la restituzione delle variabili valorizzate coerentemente con i valori passati e del messaggio di errore, err, che potrà contenere valori oppure avrà valore false se tutti i parametri attesi sono stati passati correttamente e resterà al valore con cui è stato inizializzato alla riga 3. 5 Confermiamo i dati ricevuti Se tutti i valori attesi sono stati passati e lo sono stati in maniera corretta, allora andremo a presentarli su video con la procedura def send_mail(form): 1 def send_mail(form): 2 = """ 3 Nome...: %s 4 Cognome..: %s : %s 6 """ % (form['nome'].value, form['cognome'].value, form[' '].value) 7 8 print """ 9 <head><title>modulo Richiesta di Informazioni</title></head> 10 <body> 11 <h1>conferma Richiesta</h1> 12 E' stata inviata la seguente richiesta di informazioni:<hr> 13 <pre>%s</pre> 14 """ % ( ) 15 1 Con la notazione variabile_hash.has_key("<nome_variabile>" è possibile verificare se in quella variabile hash (array associativo) esiste un indice di valore <nome_variabile. Il valore ritornato sarà True se quell indice è esistente ed è stato trovato, False altrimenti. Pagina 5 di 5

6 Di questa procedura possiamo notare cose interessanti nella righe 2-6 e Nelle righe 2-6 vediamo una assegnazione multipla nel formato nome_variabile = %s % (p1,..,pn) dove alla variabile nome_variabile si assegna il valore della stringa delimitata tra con la sostituzione all interno della stessa delle notazioni %s con i valori dei parametri p1,..,pn posti tra parentesi al termine della strina dopo il simbolo % che indica i parametri attuali di sostituzione di quelli formali posti all interno della stringa. Le righe 8-14 utilizzano lo stesso meccanismo solo che al termine delle sostituzioni dei parametri formali %s con quelli attuali la stringa così completata viene stampata sul video. 6 Lo script nella sua completezza Qui vi proponiamo completo lo script python. Potrete selezionarlo, copiarlo, incollarlo in un text editor e salvarlo su disco con il nome form_02.py e provarlo. Attenzione: c è da cambiare i valori a due righe, ma se fatto correttamente tutto dovrebbe funzionare alla perfezione. #!e:/progra~1/python/python.exe # ATTENZIONE! Nella riga sopra dovete indicare il path dell interprete python sul vostro computer # Parameters # Cambiare il path con l indirizzo della document root nella quale lo avete memorizzato # ed il nome dello script se lo avete modificato REREFER="http://localhost/p_python/form_02.py" # imports import cgi import string # Print the Form def print_form(err, nome, cognome, ): print """ <head><title>modulo Richiesta di Informazioni</title></head> <body> <h1>modulo Richiesta Informazioni</h1> Si prega di specificare i suoi dati.<br> Verrà rincontattato al più presto.<hr> """ if err: print "<h2><b>errore nel modulo:</b> <tt>"+err+"</tt></h2>" # output form with current fields print """ <form action='%s'> <table> <tr><td>nome: <td><input type="text" name="nome" size="20" value="%s"><br> <tr><td>cognome: <td><input type="text" name="cognome" size="20" value="%s"><br> <tr><td> <br> <td><input type="text" name=" " size="20" value="%s"><br> <tr><td colspan=2 align=center><input type="submit" name="invia" value="invia"> </table> </form> """ % (REREFER, nome, cognome, ) def form_check(form): err = "" nome = "" cognome = "" = "" if not form.has_key("nome"): err = err + "<br>specificare il nome" nome = form["nome"].value Pagina 6 di 6

7 if not form.has_key("cognome"): err = err + "<br>specificare il cognome" cognome = form["cognome"].value if not form.has_key(" "): err = err + "<br>specificare l' " = form[" "].value if string.find( , == -1: err = err + "<br>il formato della non e' corretto" return (err, nome, cognome, ) def send_mail(form): = """ Nome...: %s Cognome..: %s ...: %s """ % (form['nome'].value, form['cognome'].value, form[' '].value) print """ <head><title>modulo Richiesta di Informazioni</title></head> <body> <h1>conferma Richiesta</h1> E' stata inviata la seguente richiesta di informazioni:<hr> <pre>%s</pre> """ % ( ) # send mail here... # # MAIN PROGRAM # print "Content-type: text/html\n\n<html>" form = cgi.fieldstorage() (err, nome,cognome, ) = form_check(form) if form.has_key("invia"): if err: print_form(err, nome, cognome, ) send_mail(form) # first run print_form("", nome, cognome, ) print "<hr>la ringraziamo per la preferenza accordataci.<br>cordiali Saluti.</html>" Per i form è tutto. A presto quando parleremo di connessione a MySql e gestione di dati memorizzati su basi di dati. Buon PcTrio a tutti. Tutti i marchi sono di proprietà dei relativi proprietari. Il presente materiale ha esclusivamente scopo didattico ed illustrativo e non ha alcuno scopo di lucro. Pagina 7 di 7

Interazione con l utente : i moduli.

Interazione con l utente : i moduli. Interazione con l utente : i moduli. Nelle lezioni fin qui riportate, non abbiamo mai trattato l input di utente. Nelle applicazioni web, l input dell utente si acquisisce tramite i moduli (o FORM) HTML.

Dettagli

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER L architettura CLIENT SERVER è l architettura standard dei sistemi di rete, dove i computer detti SERVER forniscono servizi, e computer detti CLIENT, richiedono

Dettagli

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas

PHP. A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas. Copyright Istituto Italiano Edizioni Atlas PHP A. Lorenzi, R. Giupponi, D. Iovino LINGUAGGI WEB. LATO SERVER E MOBILE COMPUTING Atlas Copyright Istituto Italiano Edizioni Atlas Programmazione lato server PHP è un linguaggio che estende le funzionalità

Dettagli

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web Corso di PHP 6.1 PHP e il web 1 1 Prerequisiti Conoscenza HTML Tecnica della programmazione Principi di programmazione web 2 1 Introduzione In questa Unità illustriamo alcuni strumenti di programmazione

Dettagli

MySQL Controllare gli accessi alla base di dati A cura di Silvio Bonechi per http://www.pctrio.com

MySQL Controllare gli accessi alla base di dati A cura di Silvio Bonechi per http://www.pctrio.com MySQL Controllare gli accessi alla base di dati A cura di Silvio Bonechi per http://www.pctrio.com 15.03.2006 Ver. 1.0 Scarica la versione pdf ( MBytes) Nessuno si spaventi! Non voglio fare né un manuale

Dettagli

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server 2) Il Server richiama l'interprete PHP il quale esegue i comandi contenuti nel file.php specificato nell'attributo action del tag form creando un file HTML sulla base dei dati inviati dall utente 1) Il

Dettagli

BASI DI DATI http://www.diee.unica.it/~giacinto/bd. Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

BASI DI DATI http://www.diee.unica.it/~giacinto/bd. Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Contatti BASI DI DATI http://www.diee.unica.it/~giacinto/bd Esercitazione su PHP & MySQL! Roberto Tronci! e-mail: roberto.tronci@diee.unica.it!

Dettagli

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database Corso di Informatica Modulo T3 B3 Programmazione lato server 1 Prerequisiti Architettura client/server Conoscenze generali sui database 2 1 Introduzione Lo scopo di questa Unità è descrivere gli strumenti

Dettagli

19. LA PROGRAMMAZIONE LATO SERVER

19. LA PROGRAMMAZIONE LATO SERVER 19. LA PROGRAMMAZIONE LATO SERVER Introduciamo uno pseudocodice lato server che chiameremo Pserv che utilizzeremo come al solito per introdurre le problematiche da affrontare, indipendentemente dagli specifici

Dettagli

04/05/2011. Lezione 6: Form

04/05/2011. Lezione 6: Form Lezione 6: Form In alcuni documenti HTML può essere utile creare dei moduli (form) che possono essere riempiti da chi consulta le pagine stesse (es. per registrarsi ad un sito). Le informazioni sono poi

Dettagli

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014 Laboratorio Progettazione Web PHP e FORMs HTML Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014 Struttura Applicazioni Web Browser Web HTTP Server Web API Dati Presentation Application Storage

Dettagli

I FORM. L'attributo action contiene l'url del file php a cui devono essere inviati i file per essere elaborati.

I FORM. L'attributo action contiene l'url del file php a cui devono essere inviati i file per essere elaborati. I FORM Che cosa sono e che caratteristiche hanno Un form contiene molti oggetti che permettono di inserire dati usando la tastiera. Tali dati verranno poi inviati alla pagina php che avrà il compito di

Dettagli

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo Creazione di moduli Creazione di moduli Che cos'è un modulo? Un elenco di domande accompagnato da aree in cui è possibile scrivere le risposte, selezionare opzioni. Il modulo di un sito Web viene utilizzato

Dettagli

Indice. 1.13 Configurazione di PHP 26 1.14 Test dell ambiente di sviluppo 28

Indice. 1.13 Configurazione di PHP 26 1.14 Test dell ambiente di sviluppo 28 Indice 25 184 Introduzione XI Capitolo 1 Impostazione dell ambiente di sviluppo 2 1.1 Introduzione ai siti Web dinamici 2 1.2 Impostazione dell ambiente di sviluppo 4 1.3 Scaricamento di Apache 6 1.4 Installazione

Dettagli

Introduzione all'uso di

Introduzione all'uso di Introduzione all'uso di Microsoft Outlook Express 6 Outlook Express 6 è un programma, incluso nel browser di Microsoft Internet Explorer, che ci permette di inviare e ricevere messaggi di posta elettronica.

Dettagli

Educazione didattica per la E-Navigation

Educazione didattica per la E-Navigation Educazione didattica per la E-Navigation Guida utente per l utilizzo della piattaforma WIKI Rev. 3.0 23 febbraio 2012 Guida EDEN rev. 3.0 P. 1 di 24 23/02/2012 Indice Come registrarsi... 3 Utilizzo della

Dettagli

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