[CGI] Encore du nouveau : probleme avec formulaire

Encore du nouveau : probleme avec formulaire [CGI] - Perl - Programmation

Marsh Posté le 13-05-2004 à 00:25:42    

Salut,  
bon bah en fait je dois faire un formulaire sous perl/CGI et je m'y connais pas trop trop.
En fait j'aurais besoin d'un formulaire qui se deroule en plusieurs etapes suivant les donnees recupereees lors de l'etape precedente.
En clair, je voudrais que, suivant la valeur d'une variable, une nouvelle page CGI s'ouvre (differente dans chaque cas) et que l'on puisse continuer a remplir le formulaire a partir de cette nouvelle page.
 
Si quelqu'un a une idee, merci.
 
PS : sinon, je voudrais savoir si y'a y'aurais aussi un moyen de garder les donnees recuperees depuis les pages precedentes ou si je dois les stocker moi meme dans des fichiers temporaires ?


Message édité par malcolm x le 28-05-2004 à 20:09:05
Reply

Marsh Posté le 13-05-2004 à 00:25:42   

Reply

Marsh Posté le 13-05-2004 à 00:42:15    

un gros cgi avec différents choix
 
ex: si tel condition, afficher section b-1
si tel condition, afficher section b-2
sinon, afficher section a
 
pour garder les données, l'idéal serait de créer un entrée dans une DB avec un ID de formulaire, qui serait passé en parametre entre chaque formulaire.
 
Si pas de DB, tu fais place les variables à être conservés dans un input hidden. Par contre, niveau sécurité c'est pas la meilleur solution
 
Sinon, tu stock dans des fichiers temporaires, mais c'est une solution moins propre.


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 00:47:35    

en fait, pour le moment ce que je voudrais faire c savoir comment ds le script je lui dis d'ouvrir une nouvelle page Internet ?

Reply

Marsh Posté le 13-05-2004 à 00:50:05    

comment on fait pour le rediriger sur une nouvelle page c'est a dire la suite du formulaire ?

Reply

Marsh Posté le 13-05-2004 à 00:50:23    

tu n'ouvres pas une nouvelle page, tu fais des print du code html que le client doit recevoir


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 00:58:57    

Je regarde mais si tu pouvais etre plus explicite (genre me mettre un exemple pour le code) : desole je debute

Reply

Marsh Posté le 13-05-2004 à 01:02:23    

Voila, je te file mon code actuel, c'est juste pour faire un essai :
 
#!/usr/bin/perl
use strict;
use CGI qw(:standard);
 
print header, start_html("Protocol for measuring energy use" ), h1("<body bgcolor='aliceblue'><center>Protocol for measuring<
br> appliance energy use</center>" );
 
 
if (param()) {
my $type = param("type" );
if ($type eq "Refrigerator" ) {  
print p http://pams.lbl.gov/yann/protocol_ [...] tocol.cgi;  
} else {  
print p("Pas bon" );  
}  
} else {
print hr();
print start_form();
print p("<font size='4'><b>What type of appliance ? ", popup_menu("type", ['Refrigerator','Washing_machine','Clothes_dryer',
'Room_air_conditionner']));
print br();
print p(submit("Submit" ), reset("Cancel" ));
print end_form(), hr();
}
print end_html;
 
 
 
Voila, mais je pense pas que c'est ca pour le print !

Reply

Marsh Posté le 13-05-2004 à 01:03:27    

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. print "
  4. <html>
  5.   <head>
  6.   </head>
  7.   <body>
  8.     <div>allo toto</div>
  9.   </body>
  10. </html>";


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:07:09    

en fait je voudrais que si la variable vaut Refrigerator, que ca ouvre la page http://pams.lbl.gov/yann/protocol_ [...] tocol.cgi; qui n'est pas la page source dont est tire le code que je t'ai file


Message édité par malcolm x le 13-05-2004 à 01:07:29
Reply

Marsh Posté le 13-05-2004 à 01:08:09    

ce 2protocol.cgi c'est toi qui va devoir le faire? ou c'est à l'interne de ta compagnie? ou c'est à l'externe?


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:08:09   

Reply

Marsh Posté le 13-05-2004 à 01:09:27    

c moi, il existe deja
dans l'absolu ca serait la page 2 de mon formulaire, la page 1 etant celle qui contient le code que je t'ai file (je pense avoir besoin de 3 ou 4 pages ou total pour le formulaire)


Message édité par malcolm x le 13-05-2004 à 01:11:11
Reply

Marsh Posté le 13-05-2004 à 01:10:46    

je te dirais que l'idéal, c'est de faire qu'un seul cgi qui s'occupe de toutes les possibilités
 
si tu veux pas faire ainsi, affiche une page html banal avec un meta redirect vers ton cgi


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:14:56    

le pb , c que ca va etre super chaud a gerer parce que je vais avoir moultes possibilites pour le choix du tyoe d'appareil et apres en fonction du type, moultes possibilites pour le numero de modele ...
 
Sinon, y'a un moyen pour que quand un popup_menu est rentre, pour que le suivant ne propose que les choix relatif au choix fait (dans mon cas du type d'appareil choisi) et que les choix relatifs aux autres appareils ne soient pas proposes dans le popup_menu ?

Reply

Marsh Posté le 13-05-2004 à 01:15:49    

Burgergold a écrit :

je te dirais que l'idéal, c'est de faire qu'un seul cgi qui s'occupe de toutes les possibilités
 
si tu veux pas faire ainsi, affiche une page html banal avec un meta redirect vers ton cgi


 
c pas possible de faire ca depuis le cgi initial ?

Reply

Marsh Posté le 13-05-2004 à 01:19:07    

malcolm x a écrit :

c pas possible de faire ca depuis le cgi initial ?


 
ca se fait mais pas très proprement...
 

Code :
  1. my @html = `ton_2e_cgi.cgi param1=1 param2=2`;
  2. print @html;


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:22:12    

c quoi param1=1 et param2=2 ?

Reply

Marsh Posté le 13-05-2004 à 01:23:25    

au fait merci pour tes reponses, je sais qu'il est tard en France.
Merci bcp

Reply

Marsh Posté le 13-05-2004 à 01:27:38    

19hrs25 au québec :D
 
bin les param1=1 et param2=2 c'est les valeurs que tu veux passer au second formulaire
 
sous la forme name=value


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:29:52    

Burgergold a écrit :

19hrs25 au québec :D
 
bin les param1=1 et param2=2 c'est les valeurs que tu veux passer au second formulaire
 
sous la forme name=value


 
ok
 
sinon, 16h28 a San Francisco
 
mais ca marche pas, je dois faire une erreur quelque part
juste la partie du code que g change par rapport a tout a l'heure :  

Code :
  1. my $type = param("type" );
  2. if ($type eq "Refrigerator" ) {
  3. my @html = `http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/2protocol.cgi param1=1 param2=2`;
  4. print @html;
  5. } else {
  6. print p("Pas bon" );
  7. }

Reply

Marsh Posté le 13-05-2004 à 01:34:18    

ouais mais fallait mettre le http :D
 
faut mettre le path réel sur le serveur web. En gros tu exécute le script en ligne de commande avec les ``
 
du genre /web/yann/protocol_electricity_meter/CGI_forms/2protocol.cgi
 
sinon ya tjrs ceci mais jamais testé avec un cgi (qu'avec des html), mais ca peut marcher
 

Code :
  1. use LWP::Simple;
  2. $source = get("http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/2protocol.cgi?param1=1&param2=2" );


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:38:20    

ca marche (sans le http), par contre, en haut de 2protocol.cgi, j'ai le header de la page precedente qui s'affiche
 
si tu vx essayer :  
page 1 : http://pams.lbl.gov/yann/protocol_ [...] s/type.cgi
page 2 : http://pams.lbl.gov/yann/protocol_ [...] otocol.cgi

Reply

Marsh Posté le 13-05-2004 à 01:40:34    

pb, apres sur page 2, si je clic sur submit, ca revient a la page 1 : moi je voudrais que quand la page 2 est ouverte, il oubli qu'il a ouvert la 1 et qu'il execute la 2 comme si on venait directement par la

Reply

Marsh Posté le 13-05-2004 à 01:42:32    

malcolm x a écrit :

pb, apres sur page 2, si je clic sur submit, ca revient a la page 1 : moi je voudrais que quand la page 2 est ouverte, il oubli qu'il a ouvert la 1 et qu'il execute la 2 comme si on venait directement par la


 
dans ton <form>, ajoute le parametre action="cgi_qui_recoit_le_submit.cgi"


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:49:05    

comment ca ?
j'y mets ou ?

Reply

Marsh Posté le 13-05-2004 à 01:50:40    

dans ton 2protocol.cgi, vu que t'a un formulaire avec un bouton submit, t'a forcément un truc du genre
 

Code :
  1. <form>
  2. <input ... />
  3. <input type="submit" />
  4. </form>


 
modifie le pour
 

Code :
  1. <form action="2protocol.cgi">
  2. ...


 
edit:
 
voir même
 

Code :
  1. <form action="http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/2protocol.cgi">


 
si jamais ils sont pas dans le meme dossier


Message édité par burgergold le 13-05-2004 à 01:51:46

---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:53:38    

ils sont dans le meme dossier
 
mon code c'est :  

Code :
  1. print start_form();
  2. print p("<font size='4'><b>What type of appliance ? ", popup_menu("type", ['Refrigerator','Washing_machine','Clothes_dryer',
  3. 'Room_air_conditionner']));
  4. print br();
  5. print p("What manufacturer ? ", popup_menu("manufac", ['HBC','MKF','IUE','FFG','POU']));
  6. print br();
  7. print p("What brand ? ", popup_menu("brand", ['Daewoo','Friedrich','Frigidaire','Goldstar','Panasonic']));
  8. print br();
  9. print p("What model number ?</b></font>", popup_menu("model", ['aa','bb','cc']));
  10. print br();
  11. print p("If your appliance is not proposed, please fill out 'NEW' in this box.", textfield("new" ));
  12. print br();
  13. print hr();
  14. print p("<font size='5' color='blue'>PLEASE FILL OUT THE BOX WITH THE DATA YOU GET FROM THE ELECTRIC METER.</font>" );
  15. print br();
  16. print p("<font size='4'><b>Lenght of the measuring ? </b></font>", textfield("time" ), "<i> (hh:mm) </i>" );
  17. print br();
  18. print p("<font size='4'><b>Energy use during the measuring ? </b></font>", textfield("use" ), "<i> kWh </i>" );
  19. print br();
  20. print p("<font size='4'><b>Is your appliance working continuously ?</b></font> <i>(refrigerator ...)</i>", radio_group("cont
  21. inu", ['Yes','No']));
  22. print br();
  23. print p("<font size='4'><b>If no, how many time do you use it each week ? </b></font>", textfield("week" ));
  24. print br();
  25. print p(submit("Submit" ), reset("Cancel" ));

Reply

Marsh Posté le 13-05-2004 à 01:56:43    

start_form() ca vient d'ou? quel lib?
 
perso jai jamais voulu utilisé les librairies du genre qui génère du html...


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 01:58:08    

les seules lib que j'utilise et je suis pas certains que ca en soit c :
use strict;
use CGI qw(:standard);
 

Reply

Marsh Posté le 13-05-2004 à 02:00:28    

Burgergold a écrit :

start_form() ca vient d'ou? quel lib?
 
perso jai jamais voulu utilisé les librairies du genre qui génère du html...


 
je comprends mais moi perl c pas mon domaine, je suis etudiant en energie et environnement mais la en stage, le gars il nous fait faire du perl, du cgi et du html ... donc y'a fallut apprendre rapidos (et tout seul) donc je sais faire quelques trucs meme si c'est souvent du recopiage de programmes que j'essaie d'adapter sans toutefois toujours savoir exactement pourquoi je fais ca

Reply

Marsh Posté le 13-05-2004 à 02:00:57    

essaye
 
print start_form(-action => "http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/2protocol.cgi" );


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 13-05-2004 à 02:03:40    

Burgergold a écrit :

essaye
 
print start_form(-action => "http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/2protocol.cgi" );


 
toujours pareil ...

Reply

Marsh Posté le 13-05-2004 à 02:05:05    

mais laisse tomber pour ce soir
c'est bientot 5h et j'en est ma claque, je vais aller voir mon boss si il peut m'aider et je m'y remettrais demain
 
Merci bcp en tout cas

Reply

Marsh Posté le 13-05-2004 à 02:09:31    

j'ai peut etre trouve, je regarde ca chez moi ce soir et je te tiens au jus
 
EDIT : bah en fait non, c'est pas ca
Tant pis ...


Message édité par malcolm x le 13-05-2004 à 02:11:44
Reply

Marsh Posté le 13-05-2004 à 02:12:27    

:D
 
hésite pas à repasser, ca va me faire plaisir de t'aider


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 18-05-2004 à 00:08:44    

Voila mon code,  

Code :
  1. #!/usr/bin/perl
  2. use strict;
  3. use CGI qw(:standard);
  4. print header, start_html("Protocol for measuring energy use" ), h1("<body bgcolor='aliceblue'><center>Protocol for measuring<
  5. br> appliance energy use</center>" );
  6. if (param()) {
  7. my $type = param("type" );
  8. if ($type eq "Refrigerator" ) {
  9. print p("<a href=
  10. 'http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/refrig.cgi'>
  11. Continue</a></li><br><br>" );
  12. } elsif ($type eq "Washing_machine" ) {
  13. print p("<a href=
  14. 'http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/washing.cgi'>
  15. Continue</a></li><br><br>" );
  16. } elsif ($type eq "Clothes_dryer" ) {
  17. print p("<a href=
  18. 'http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/dryer.cgi'>
  19. Continue</a></li><br><br>" );
  20. } elsif ($type eq "Room_air_conditionner" ) {
  21. print p("<a href=
  22. 'http://pams.lbl.gov/yann/protocol_electricity_meter/CGI_forms/room_ac.cgi'>
  23. Continue</a></li><br><br>" );
  24. }
  25. } else {
  26. print hr();
  27. print start_form();
  28. print p("<font size='4'><b>What type of appliance ? ", popup_menu("type", ['Refrigerator','Washing_machine','Clothes_dryer',
  29. 'Room_air_conditionner']));
  30. print br();
  31. print p(submit("Submit" ), reset("Cancel" ));
  32. print end_form(), hr();
  33. }
  34. print end_html;


 
J'aimerais pouvoir rediriger directement depuis le submit vers la page voulue sans etre obligé de passer par des pages intermediaires ou je dois proposer des liens ou la personne est obligée de cliquer.
 
Si quelqu'un a une idée ...
Merci

Reply

Marsh Posté le 18-05-2004 à 00:14:07    

je t'ai fourni une masse de possibilité
 
-avec LWP::Simple
-en submittant ta page vers la page en question (et non vers elle même)


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 18-05-2004 à 00:19:05    

oui mais concretement je gere comment les differentes possiblites avec le submit ?

Reply

Marsh Posté le 18-05-2004 à 00:35:51    

dans le cgi qui recoit l'action
 
donc soit tu fais un meta redirection, soit tu traites dans la page qui recoit le submit


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 18-05-2004 à 00:49:33    

Burgergold a écrit :

dans le cgi qui recoit l'action
 
donc soit tu fais un meta redirection, soit tu traites dans la page qui recoit le submit


 
dsl mais pour moi c'est pas du chinois mais presque

Reply

Marsh Posté le 18-05-2004 à 00:59:53    

ok, oublis le perl, tout langugage, et concentre toi sur le principe meme d'un formulaire en html avec un language coté serveur (php, asp, perl, jsp, alouette...)
 
une fois que tu auras compris comment un formulaire fonctionne, code
 
parce que là c'est vraiment l'essence même du formulaire en html que tu ne semble pas comprendre
 


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed