Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
969 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] [CGI] Recherche a partir de données d'un formulaire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] [CGI] Recherche a partir de données d'un formulaire

n°1376078
Supermagnu​s
Posté le 27-05-2006 à 22:08:16  profilanswer
 

Bonjour,
 
Je suis en train de développer un script perl pour récupérer les données de 2 champs d'un formulaire (une adresse IP et un hostname) et les comparer avec ceux d'un fichier de base (base.routeur.txt). Si l'un des deux champs du formulaire correspond à une ligne du fichier de base alors on effectue le traitement adéquat.
 
Ex du fichier de base :

192.168.31.23 FGHUN-123
193.34.53.23 GHEN12-45
...


 
Voici le code html du formulaire :

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <title>Page de Recherche</title>
  5. </head>
  6. <body bgcolor="#E0E0E0">
  7. <h1>R&eacute;cup&eacute;ration de configuration : </h1>
  8. <form action="cgi-bin/script.cgi" method="post">
  9. <p>Hostname : <input size="30" maxlength="40" name="hostname"></p>
  10. <p>Adresse IP : <input size="15" maxlength="15" name="adresse"></p>
  11. <p><input type="submit" value="Chercher"> <input name="reset" type="reset" value="Effacer"></p>
  12. </form>
  13. </body>
  14. </html>


 
Puis celui du script cgi en perl dont il est question (script.cgi) :
 

Code :
  1. #!/usr/bin/perl -w
  2. use strict;
  3. use CGI::Carp qw(fatalsToBrowser);
  4. use POSIX 'strftime';
  5. open (BASE, 'base.routeur.txt') || die ("Prblm d'ouverture du fichier base.routeur.txt : $!\n" );
  6. #Lecture des champs du formulaire
  7. read(STDIN, my $donnees, $ENV{'CONTENT_LENGTH'});
  8. my @champs_formulaire = split(/&/, $donnees);
  9. my ($champ, $nom, $valeur);
  10. my %formulaire;
  11. my (@version,@conf);
  12. ## Boucle de decodage HTML (type MIME)
  13. foreach $champ (@champs_formulaire)
  14. {
  15.   (my $nom, my $valeur) = split(/=/, $champ);
  16.   $valeur =~ tr/+/ /;
  17.   $valeur =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  18.   $valeur =~ s/</&lt;/g;
  19.   $valeur =~ s/>/&gt;/g;
  20.   $formulaire{$nom} = $valeur;
  21. }
  22. #Boucle de traitement du fichier ligne par ligne
  23. while (my $ligne=<BASE> )
  24. {
  25. chomp $ligne;
  26. chop $ligne;
  27. my($ipr,$hostname)=split(/ /, $ligne);
  28. my $iprform = $formulaire{adresse};
  29. my $hostform = $formulaire{hostname};
  30. #si le champ @IP correspond a une @ip reconnue alors...
  31. if ($iprform eq $ipr)
  32. {
  33. my $fichierver="/tftpboot/speedstream/$hostname/VERSION.TXT";
  34. my $time = (stat $fichierver)[9];
  35. open(VERSION,$fichierver);
  36. @version = <VERSION>;
  37. close(VERSION);
  38. open(COPY,"/tftpboot/speedstream/$hostname/COPY.TXT" );
  39. @conf = <COPY>;
  40. close(COPY);
  41. print "Content-type: text/html\n\n";
  42. print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
  43. print "<html><head><title>Configuration</title></head>\n";
  44. print "<body><h1>Resultat de la recherche :</h1>\n";
  45. print "<p><b>Hostname :</b> $hostname</p>";
  46. print "<p><b>Adresse IP :</b> $formulaire{adresse}</p>";
  47. print "<b>Version :</b><pre> @version</pre>";
  48. print "\n <b>Syntaxe pour rÈcupÈrer la conf :\n</b><pre> @conf</pre>";
  49. print "<b>Date de la derniere modification : </b>";
  50. print strftime '%a %d %b %Y @ %I:%M %p', localtime $time;
  51. print "<p><a href=\"/index.html\"><em><strong>Retour</strong></em></a></p>";
  52. print "</body></html>\n";
  53. last;
  54. }
  55. #de même si le hostname du routeur correspond
  56. elsif ($hostform eq $hostname)
  57. {
  58. my $fichierver="/tftpboot/speedstream/$hostname/VERSION.TXT";
  59. my $time = (stat $fichierver)[9];
  60. open(VERSION,$fichierver);
  61. @version = <VERSION>;
  62. close(VERSION);
  63. open(COPY,"/tftpboot/speedstream/$hostname/COPY.TXT" );
  64. @conf = <COPY>;
  65. close(COPY);
  66. print "Content-type: text/html\n\n";
  67. print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
  68. print "<html><head><title>Configuration</title></head>\n";
  69. print "<body><h1>Resultat de la recherche :</h1>\n";
  70. print "<p><b>Hostname :</b> $formulaire{hostname}</p>";
  71. print "<p><b>Adresse IP :</b> $ipr</p>";
  72. print "<b>Version :</b><pre> @version</pre>";
  73. print "\n <b>Syntaxe pour rÈcupÈrer la conf :\n</b><pre> @conf</pre>";
  74. print "<b>Date de la derniere modification : </b>";
  75. print strftime '%a %d %b %Y @ %I:%M %p', localtime $time;
  76. print "<p><a href=\"/index.html\"><em><strong>Retour</strong></em></a></p>";
  77. print "</body></html>\n";
  78. last;
  79. }
  80. #sinon en attendant on envoi un lien retour
  81. print "Content-type: text/html\n\n";
  82. print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
  83. print "<html><head><title>Configuration</title></head>\n";
  84. print "<p><a href=\"/index.html\"><em><strong>Retour</strong></em></a></p>";
  85. print "</html>\n";
  86. }


 
 
Actuellement le script fonctionne mais mal, en effet je trouve ma méthode peut pratique et je suis persuadé de pouvoir faire plus simple, c'est pourquoi je demande de l'aide ou des idées pour améliorer tout ça.
 
Aussi comme le fichier de base est lu ligne par ligne chaque if est traiter ligne par ligne, c'est à dire que si je recherche une @IP qui ce trouve à la ligne 50, j'obtient ceci : http://img480.imageshack.us/img480/9420/screenshot26hd.th.png   Et si rien ne correspond ceci : http://img69.imageshack.us/img69/483/screenshot4if.th.png
 
Donc voilà si quelqu'un peu me débloquer ou me donner 2/3 idées, j'ai pensé à un tableau de Hashage mais je sais pas comment l'initialiser avec les valeurs du fichier de base.
 
Merci  :hello:


Message édité par Supermagnus le 28-05-2006 à 18:12:05
mood
Publicité
Posté le 27-05-2006 à 22:08:16  profilanswer
 

n°1376256
Supermagnu​s
Posté le 28-05-2006 à 18:11:32  profilanswer
 
n°1376658
burgergold
5$? va chez l'diable!
Posté le 29-05-2006 à 13:40:55  profilanswer
 


 
j'ai pas tout lu mais...
 
Pour récupérer les arguments, tu serais pas mieux avec ca?
 

Code :
  1. use strict;
  2. use CGI;
  3. use POSIX;
  4. my $base_router_file = 'base.routeur.txt';
  5. my $cnt;
  6. $cnt .= "Content-type: text/html\n\n";
  7. $cnt .= '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">';
  8. $cnt .= '<html><head><title>Configuration</title></head>';
  9. $cnt .= '<body><h1>Resultat de la recherche :</h1>';
  10. $cnt .= '<p><b>Hostname :</b>__HOSTNAME__</p>';
  11. $cnt .= '<p><b>Adresse IP :</b>__IPR__</p>';
  12. $cnt .= '<b>Version :</b><pre>__VERSION__</pre>';
  13. $cnt .= '<b>Syntaxe pour récupérer la conf :</b><pre>__CONF__</pre>';
  14. $cnt .= '<b>Date de la derniere modification :</b>__TIME__';
  15. $cnt .= '<p><a href="/index.html"><em><strong>Retour</strong></em></a></p>';
  16. $cnt .= '</body></html>';
  17. open (BASE, '< ' . $base_router_file)
  18. while (my $line = <BASE> ) {
  19.   chomp($line);
  20.   my ($ipr, $hostname) = split(/ /, $line);
  21.   if ($ipr eq $q->param('adresse') || $hostname eq $q->param('hostname')) {
  22.     #my $ctime = (stat($fichierver))[9];
  23.     #open(VERSION, '< ' . $fichierver);
  24.     #my @version = <VERSION>;
  25.     #close(VERSION);
  26.     #open(COPY,'< /tftpboot/speedstream/' . $hostname . '/COPY.TXT');
  27.     #my @conf = <COPY>;
  28.     #close(COPY);
  29.     #$cnt =~ s/__TIME__/$time/;
  30.     #$cnt =~ s/__VERSION__//;
  31.     #$cnt =~ s/__HOSTNAME__//;
  32.     #$cnht =~ s/__IPR__//;
  33.   }
  34. }
  35. close(BASE);


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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] [CGI] Recherche a partir de données d'un formulaire

 

Sujets relatifs
[MATH] Tracer une ligne a partir d'un angleEnvoyer les données d'une boitre de sélection dans un JavaScript ?
[Java] expression régulière : extraction à partir d'un motifplobeme de "réflexion" pour la structure d'une base de données
[Access 2003] Fusionner 2 valeurs en SQL lors d'un import de donnéesUtiliser Fmod pour acquérir des données sonores
génération de fichier XML à partir d'une base de données SQL ??[Recherche - Info] Création d'un soft pro
envoyer un mail apres une recherche 
Plus de sujets relatifs à : [PERL] [CGI] Recherche a partir de données d'un formulaire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR