PDA

Visualizza la versione completa : banale problema per un cgi.


new
01-09-2005, 10:49
Salve.
Ho un semplicissimo script con due subroutine.
In una viene costruita una form e nell'altra vengono eseguite delle operazioni in base ai dati inseriti nel form.

my $query = new CGI;
print $query->header,
$query->start_html("Cambio password");
print "<div style='margin:0 auto;width:500px;text-align:center;'>";
print $query->img({src=>'/images/logo.gif'});
print $query->h2('Cambio password');
&print_form($query);
print "</div>";
print $query->end_html;

viene chiamata la subroutine print_form che stampa una form su una pagina web, vengono riempiti i campi e alla pressione del tasto submit vorrei richiamare la subroutine change_pass che e' definita nello stesso script e che si incarica di elaborare i dati inseriti.
Ho provato a mettere nella action $myself/change_pass, dove
myself=$query->self_url, ma non funziona.
Come devo fare?

shishii
01-09-2005, 11:38
C'è un errore concettuale, devi essere tu a dire allo script quali subroutine eseguire e quando.

mettiamo che hai il seguente codice:



use CGI;
my $query = new CGI;

sub tuo_codice {
#codice che hai postato
}

sub change_pass {
# codice cambio password
}


devi operare i seguenti interventi



use CGI;
my $query = new CGI;

if($query->param('change_pass')) {
&change_pass);
}
else {
&tuo_codice();
}

sub tuo_codice {
#codice che hai postato
}

sub change_pass {
# codice cambio password
# aggiungi codice html per la pagina di risposta
}

sub print_form {
....
# aggingi agli altri tag
print $query->hidden(-name => 'change_pass',
-value => '1' );
# non sono sicurissimo della sintassi per la
# creazione di tag hidden. Controlla
...
}


in questo modo la prima volta che la pagina sarà chiamata visualizzerà il form, la seconda - trovando il tag change_pass - effettuerà le operazioni che ti servono.

new
01-09-2005, 11:49
devi dire che se nella action metto $action che per default corrisponde allo script stesso la cosa funziona.
potrei lasciare cosi' visto che funziona ma non mi sembra un modo di procedere ortodosso.

new
01-09-2005, 13:07
si ma se nella print_form ho dei parametri da passare alla change_pass, il valore dei campi, come li passo?

shishii
01-09-2005, 18:35
non capisco la domanda.
Non sai come si passano dei valori tramite dei form?

new
01-09-2005, 18:46
Originariamente inviato da shishii
non capisco la domanda.
Non sai come si passano dei valori tramite dei form?

no, non mi funziona lo script e non capisco il motivo eppure e' abbastanza semplice:

my $query = new CGI;
if($query->param('change_pass')) {
&change_pass($query);
}
else{
&print_page;
}

sub print_page {
print $query->header,
$query->start_html("Cambio password");
&print_form;
print $query->end_html;
}

sub print_form {
print $query->start_form();
print $query->textfield( -name=>'user',
-size=>30,
-maxlength=>30);
print $query->hidden(-name=>'change_pass',
-value=>'1');
ecc.

sub change_pass {
my ($query) = @_ ;
my($user, $cur, $new1, $new2) = (
$query->param('user'),
$query->param('cur'),
$query->param('new1'),
$query->param('new2')
);
$user =~ s@^\s+|\s+$@@g;

l'errore me lo da sulle variabili $user, $cur, $new1, $new2 dicendo che non sono inizializzate.
Eppure l'oggetto $query lo passo.

Loading