Newsgroup: it.comp.lang.perl
Titolo: CGI

Salve a tutti...ho un dubbio sull'uso del modulo CGI con Perl.
Con uno script butto fuori un form con checkbox group e radio group 
assortiti.
Per ogni elemento html (<input ...>), oltre agli attributi "name" e 
"value", ne imposto un altro, "id", usando il metodo spiegato nella 
documentazione del modulo (hash di hash riferito al valore 
dell'elemento) e funziona.
Ora al submit (c'è un altro script che viene eseguito) vorrei catturare 
il valore di quell'attributo per ogni checkbox e radio button 
selezionato, ma non ho trovato nessuna funzione che mi permetta di farlo.
Qualcuno sa come fare?
Vorrei fare tutto in Perl senza ricorrere a Javascript se possibile...
Grazie,
Seva

 il valore di quell'attributo per ogni checkbox e radio button
usando il modulo CGI (la doc la trovi qui:
http://search.cpan.org/~lds/CGI.pm-3.11/CGI.pm
 )
una maniera č:
@values = $query->param('foo');
dove foo č il nome del checkbox (il radiobutton restituisce un solo valore)


Non mi sono spiegato bene...
Non ho bisogno *solo* del valore del checkbox, ma anche del valore 
dell'attibuto id.

 dell'attibuto id.
Con
@names = $query->param();
hai tutti i nomi dei parametri, incluso l'"id".


Scusa, ma id non č il nome di un parametro bensě un suo attributo...

 Scusa, ma id non è il nome di un parametro bensì un suo attributo...
Avevo davvero capito male, scusa.
Credo non sia possibile fare quello che tu dici.
Nel protocollo CGI si passano al server le coppie nome=valore.
Gli attributi extra che puoi mettere in un tag (come ad esempio elementi
di stile eccetera) di input non sono passati al server. Solo nome=valore.
Un barbatrucco potrebbe essere quello di scrivere il valore come
"valorecheckbox-valoreid"
e poi tu fai uno split sul valore e ottieni il valore dell'id.

Nella documentazione ho trovato:
  -id
      A string identifier that can be used to identify this element to
JavaScript and DHTML.
Mi vengono in mente due considerazioni:
1. visto che si tratta di uno "string identifier", che cosa ottieni di
preciso ad utilizzare una HoH?
2. da quel che dice, sembrerebbe di utilità solo a JavaScript e DHTML,
quindi lato client.
Per far "tornare" informazione al server dovresti probabilmente
utilizzare la tecnica che ti ha suggerito Andrea. Che risultato vuoi
ottenere in particolare?
Ciao,
   Flavio.


Come ti ha detto Andrea nel suo terzo messaggio, il protocollo CGI
prevede che, in seguito all'invio di una form, venga passata al server 
per ogni elemento della form soltanto la coppia di attributi (name, 
value), quindi né l'attributo id né null'altro.
Per inviare l'attributo id di un elemento HTML dal client al server, 
senza fare ricorso a javascript, dovresti usare qualche "trucco" come 
quelli suggeriti sempre da Andrea.
Ma, il punto è: sei sicuro che ti serva? E la risposta è no, certamente.
Infatti se sei stato tu a generare l'HTML della form, dal lato server 
mediante il tuo script, come hai detto, significa che già conosci per 
ogni elemento la corrispondenza id-name, pertanto perché hai bisogno che 
il client ti rimandi indietro un'informazione che già possiedi?!
Ad esempio puoi scrivere nel tuo codice un hash costante che contiene 
tutte le corrispondenze name-id, oppure se tali attributi sono 
valorizzati dinamicamente (ma mi sembra strano) puoi generare l'hash 
dinamicamente e salvarlo nei dati di sessione server-side.
In ogni caso per recuperare l'id basterà fare un look-up sull'hash 
mediante la chiave name, cosa assolutamente banale.
Ma c'è un metodo ancora più semplice: dà agli elementi delle tue form 
esattamente lo stesso valore sia per l'attributo name che per 
l'attributo id, così avendo l'uno hai automaticamente anche l'altro ;-)
Ciao,
Emanuele.

 Emanuele.
Ciao,
 Seva

 problema.
Per curiosita`, quale e` il problema che devi risolvere ?
S.
-- 
Stefano Rodighiero      |  
http://larsen.perlmonk.org/blog
mailto:
lar...@perl.it
   |  Italian Perl Mongers: 
http://www.perl.it

 scrivero una patch.
Non è una mancanza del modulo CGI, né un limite del protocollo CGI (che
comunque non riguarda la comunicazione con il browser, bensi quella tra
server e script).
Il punto è che il browser, come ha detto Andrea, invia soltanto le coppie
nome/valore. Lo puoi vedere bene se adoperi il metodo GET e guardi la
query-string nell'URL. Altre informazioni non ne arrivano. 
Questo non è un limite della CGI, ma è un comportamento previsto dalle
specifiche dell'HTML. Vedi, ad esempio:
 
http://www.w3.org/TR/REC-html40/interact/forms.html#form-data-set
Max

 problema.
Bene. Allora saresti così gentile da descrivermi il tuo problema, 
spiegando in dettaglio da dove deriva la necessità di farti rimandare 
indietro dal client esattamente quello che tu stesso gli hai inviato 
prima (esponendoti peraltro ad inutili rischi di data-tampering)?!
Ciao,
Emanuele.