Newsgroup: it.comp.lang.perl
Titolo: Subroutine con FORM

Il mio problema è questo: ho un form con vari campi di testo e tre pulsanti
[INVIA] [MODIFICA] [CANCELLA].
Premettendo che CANCELLA non mi serve, come faccio per richiamare un
subroutine associata al tasto INVIA.
Mi spiego, se premo INVIA lo script deve capire che ho premuto INVIA e
richiamare la subroutine associta ad invia.
Ma appunto come faccio a far capire allo script quale pulsante ho premuto?
In uno script simile ho visto che si usa la:
  $FORM{$name} = $value;  #questa riga risiede nel Get input
read(STDIN)...etc etc
e poi i vari blocchi
if ($FORM{'action'} eq "Create Page") {
 &create;
 }
if ($FORM{'action'} eq "Edit Page") {
 &confirm;
  }
if ($FORM{'action'} eq "checkuser") {
 &checkuser;
 }
if ($FORM{'action'} eq "recreate") {
 &recreate;
 }
seguono le varie sub.....
sub create etc etc.
A me non funziona, come devo fare?
Grazie a tutti, spero mi abbiate capito!
Riccardo

 sub create etc etc.

A me non funziona cosa? Hai un INPUT con name="action" nella tua form?
Comunque, un una situazione simile, mi e' capitato di di usare delle
variabili HIDDEN e associare il bottone [MODIFICA] e [INVIA] a due form
separate, con un valore diverso di qualche variabile HIDDEN.
Ci sarebbe poi da capire che differenza c'e' tra l'avere un bottone 'INVIA'
e uno 'MODIFICA'...
L'altra via e' un javascript che inizializza una variabile HIDDEN prima di
fare il submit.
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@netscape.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

 fare il submit.
Niente campi hidden e niente javascript:
Semplicemente dentro il form si fanno n bottoni che si chiamano tutti nello
stesso modo e hanno valori diversi: quando ne clicchi uno e' il _suo_ valore
che viene passato al form
Il form:
[HTML code]
  <form method="POST" action="/cgi-bin/pigia">
    <p>
     <input type="submit" value="primo" name="bottone">
     <input type="submit" value="secondo" name="bottone">
     <input type="submit" value="terzo" name="bottone">
     <input type="reset" value="Reimposta" name="reimposta">
    </p>
    [...] tutto quello che ti pare
  </form>
  <!-- Nel form tutti i bottoni di tipo 'submit'
       si chiamano (in questo caso) 'bottone' -->
[/code]
e il cgi corrispondente 'pigia':
[CGI code]
  #!/usr/bin/perl
  use CGI qw(:standard);
  $glipasso = new CGI;
  $qualebottone = $glipasso->param('bottone');
  # Secondo cosa pigi ti ritrovi 'primo', 'secondo' oppure 'terzo'
  # come valore del parametro 'bottone'
  print <<FINE
  Content-type: text/html
  <html>
  <head>
  <title>Proviamo Sto form</title>
  </head>
  <body bgcolor="#ffffff">
  <h1>Proviamo Sto form</h1>
  Hai pigiato il $qualebottone bottone<br>
  <h1>Buon per te!</h1>
  </body>
  </html>
  FINE
[/code]
Ciao, marco
--
Marco Cacchiani                                
e-mail:ma...@sirius.pisa.it
Public pgp key:         
http://www.sirius.pisa.it/marco/pgp_public_key.asc
Sirius Servizi Informatici                     e-mail: 
in...@sirius.pisa.it
Parco Teatro Pasolini, 1                       Phone:  +39 (50) 865120
I-56019 - Vecchiano                            Fax:    +39 (50) 860260
(Pisa - ITALIA)                                
http://www.sirius.pisa.it/

Ci sarebbe poi da capire che differenza c'e' tra l'avere un bottone 'INVIA'
e uno 'MODIFICA'...
'INVIA' mi serve per postare quello che ho scritto (viene generata un pagina
HTML con gli input che ho dato) e 'MODIFICA' serve per modificare quello che
si č scritto. Ovviamente la modifica avviene grazie alla rilettura dei
record in un file data.txt o .dat adesso non ricordo. Io non riesco solo ad
impostare le subroutine, come faccio a dire allo script:
Se schiaccio INVIA allora leggi la condizione 1
Se schiaccio MODIFICA allora leggi la condizione 2
questo č il mio problema: ovvio che le condizioni 1 e 2 sono le subroutine,
mi sono spiegato ora? Spero di si.
Grazie anticipatamente a chiunque mi possa aiutare.
Ciao
Riccardo


Lo script ed il codice funzionano perfettamente, ma adesso come faccio ad
associare le subroutine corrispondenti. Torniamo al caso dei bottoni:
se premo il bottone uno, allora deve avviarmi la sub 1 e cosě per gli altri.
Il codice perl qual č?
if (bottone 1) allora sub 1
qualcosa del genere, mi sapete dire?
Grazie davvero, siete stati gentilissimi
Ciao
Riccardo

Grazie Marco stasera lo provo e poi vi risposto e vi dico se va.
Ciao
Riccardo

 qualcosa del genere, mi sapete dire?
La risposta giusta a questa domanda e': "RTFM".
Comunque, dato che ormai ho cominciato....
[CGI code]
  #!/usr/bin/perl
  use CGI qw(:standard);
  $glipasso = new CGI;
  $qualebottone = $glipasso->param('bottone');
  %qualesub = ('primo'    => \&primobottone,
               'secondo'  => \&secondobottone,
               'terzo'    => \&terzobottone);
  bho() unless ($vaiqui = $qualesub{$qualebottone} and &$vaiqui);
  sub primobottone {
     print "hai pigiato il primo bottone\n";
  }
  sub secondobottone {
     print "hai pigiato il secondo bottone\n";
  }
  sub terzobottone {
     print "hai pigiato il secondo bottone\n";
  }
  sub bho {
     print "Hai pigiato un bottone che non conosco\n";
  }
[/CGI Code]
Ovviamente un modo piu' piatto per fare la stessa cosa e':
[CGI code]
  #!/usr/bin/perl
  use CGI qw(:standard);
  $glipasso = new CGI;
  $qualebottone = $glipasso->param('bottone');
     if ($qualebottone eq 'primo')    { primobottone() }
  elsif ($qualebottone eq 'secondo')  { secondobottone() }
  elsif ($qualebottone eq 'terzo')    { terzobottone() }
  else { bho() }
  sub primobottone {
     print "hai pigiato il primo bottone\n";
  }
  sub secondobottone {
     print "hai pigiato il secondo bottone\n";
  }
  sub terzobottone {
     print "hai pigiato il secondo bottone\n";
  }
[/CGI Code]
ciao, marco


Marco, grazie, io ho risolto però in un altro modo, dimmi se va bene:
############################## inizio
$bottone = $valore->param("bottone1");
$bottone = $valore->param("bottone2");
if ($bottone = $valore->param("bottone1")) {&bottone1}
if ($bottone = $valore->param("bottone2")) {&bottone2}
sub bottone1 {.....}
sub bottone2 {.....}
##################### end
Funziona bene, cmq grazie.
Riccardo
P.S.: che vuol dire RTFM?

 P.S.: che vuol dire RTFM?
te lo spiego un'altra volta.
