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

  FORUM HardWare.fr
  Programmation
  Perl

  CGI: probleme html (firefox) et upload

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

CGI: probleme html (firefox) et upload

n°1121622
suomi
Posté le 16-06-2005 à 10:38:21  profilanswer
 

Bonjour à tous.
J'utilise un script perl pour recupérer les variables d'un formulaire afin ensuite d'executer des requetes via le module DBI de perl.
 
Cependant j'ai un petit problème avec Firefox à ce niveau:

Code :
  1. ######Création du fichier html de retour à l'execution du script perl
  2. print "content-type : text/html\n\n";
  3. print "<html><head><link rel='stylesheet' href='../public_html/leptostyle.css' type='text/css'></head>\n";
  4. print "<body><h1>Verification de l'insertion</h1>\n";
  5. print "<br><br>\n";
  6. print "<form method='post' action='../public_html/index.php?page=inserer'>\n";
  7. print "<input type='submit' value='Retour'></form>\n";
  8. print "toto\n";
  9. print "</body></html>\n";


 
Sous Internet Explorer, ma page html s'affiche correctement, le navigateur comprent le code html, tandis que sous firefox, il ne lie pas le code, il l'affiche juste.
Y-a t'il un probleme avec firefox et ce type d'utilisation?
Comment remédier à ce probleme?
Merci  :hello:


Message édité par suomi le 16-06-2005 à 17:07:54
mood
Publicité
Posté le 16-06-2005 à 10:38:21  profilanswer
 

n°1121656
pospos
Posté le 16-06-2005 à 10:55:01  profilanswer
 

il faut que tu indique le type de document que tu envoi.
en haut de ton scrip, le premier print doit etre:
print "Content-Type: text/html\n\n";
 
en fait IE a "deviné" qu'il s'agissait de HTML, mais normalement il aurait du faire comme firefox et l'afficher tel quel

n°1121660
Elmoricq
Modérateur
Posté le 16-06-2005 à 10:56:23  profilanswer
 

Tout d'abord, tu ferais mieux d'utiliser le module CGI en PERL, cela te faciliterait grandement la tache.
Voir : http://www.cpan.org
 
Ainsi, ton code avec le module CGI donnerait :

Code :
  1. use CGI (qw: standard);
  2. use strict;
  3. my $CGI = new CGI;
  4. print $CGI->header();
  5. print $CGI->start_html(-title => 'titre de la page',
  6.                        -style => '../public_html/leptostyle.css');
  7. print $CGI->h1('Verification de l'insertion'), $CGI->br();
  8. print $CGI->start_form( -name => 'nom_de_la_forme',
  9.                         -method => 'post',
  10.                         -action => '../public_html/index.php?page=inserer');
  11. print $CGI->submit( -name => 'nom_du_bouton', -value => 'Retour' );
  12. print "toto\n";
  13. print $CGI->end_form(), $CGI->end_html();


 
 
 
Ensuite, ta question est un problème HTML et non PERL. Ton script HTML regorge d'erreurs, par exemple le formulaire non terminé, pas de titre à la page, pas de nom de formulaire, et l'en-tête ne me parait pas correct.
Dans n'importe quelle page HTML, je vois plutôt un en-tête du style :
 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

n°1121681
pospos
Posté le 16-06-2005 à 11:04:49  profilanswer
 

pospos a écrit :

il faut que tu indique le type de document que tu envoi.
en haut de ton scrip, le premier print doit etre:
print "Content-Type: text/html\n\n";
 
en fait IE a "deviné" qu'il s'agissait de HTML, mais normalement il aurait du faire comme firefox et l'afficher tel quel


 
putain mais je vais pas bien moi en ce moment...
javais pas vu que le print text/html y etait deja...
 
desolé (remarque c'est peut etre un prob de majuscules? faut capitaliser Content-Type)

n°1121712
suomi
Posté le 16-06-2005 à 11:21:04  profilanswer
 

pospos a écrit :

il faut que tu indique le type de document que tu envoi.
en haut de ton scrip, le premier print doit etre:
print "Content-Type: text/html\n\n";


 
J'ai donné ce renseignement.  :ange:  
 
 
 

Citation :

module CGI en PERL


Excuse moi Elmoricq, j'ai pas mit tout mon script perl car sinon ça aurait été trop big, mais j'utilise bien le module CGI, sans pour autant l'exploité comme toi.
Mon code html est effectivement très basic, mais c'etait juste pour un test. Par le biais de CGI Firefox et internet explorer fonctionne correctement.  
 
Merci  :jap:

n°1121717
Badze
Aime les frites
Posté le 16-06-2005 à 11:25:12  profilanswer
 

Tu est obliger de mettre des print a gogo dans ce cas la ?
Je ne connais pas perl, mais je trouve cela exessif pour un meme résultat.
 
print " code html " ;

n°1121736
Elmoricq
Modérateur
Posté le 16-06-2005 à 11:36:31  profilanswer
 

Badze a écrit :

Tu est obliger de mettre des print a gogo dans ce cas la ?
Je ne connais pas perl, mais je trouve cela exessif pour un meme résultat.
 
print " code html " ;


 
On peut même écrire ça de façon chouette de la manière suivante :
 

Code :
  1. print <<FIN_DE_BLOC
  2. ecrire
  3. ici
  4. absolument tout le
  5. html que
  6. l'on veut, le texte jusqu'à la ligne _COMMENCANT_ par FIN_DE_BLOC
  7. sera imprimé exactement tel quel
  8. FIN_DE_BLOC


 
:)

n°1121964
suomi
Posté le 16-06-2005 à 14:39:25  profilanswer
 

Merci pour ce rappel Elmoricq, c'est vrai que c'est bien utile comme ça  :)  
 
Autre question... peut on faire du php à la place du html?
 
Car en fait, j'ai une page html composé d'un formulaire et d'un champ permettant l'upload d'un fichier. Lorsque je valide mon formulaire, je lance mon script perl qui récupère les variables de mon formulaire. Après un traitement de mes variables, mon script a besoin ensuite du fichier que j'ai uploadé. Avant j'utilisé une page php pour traiter l'upload:
 

Code :
  1. <?php
  2. // En PHP < 4.1.0, $HTTP_POST_FILES doit être utilisé
  3. //    à la place de $_FILES.
  4. $uploaddir = 'C:\Program Files\EasyPHP1-8\www\public_html\upload\\';
  5. $uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
  6. echo '<pre>';
  7. if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  8.    echo "Le fichier est valide, et a été téléchargé
  9.            avec succès. Voici plus d'informations :\n";
  10. } else {
  11.    echo "Attaque potentielle par téléchargement de fichiers.
  12.          Voici plus d'informations :\n";
  13. }
  14. //echo 'Voici quelques informations de déboguage :';
  15. //print_r($_FILES);
  16. echo '</pre>';
  17. ?>


 
D'ou ma question, est ce que je peux mettre ce code dans mon script perl pour permettre l'upload de mon fichier lors de la validité de mon formulaire?

n°1121968
suomi
Posté le 16-06-2005 à 14:42:06  profilanswer
 

Oula suis fatigué, en fait je devrais plutot me tourner sur un moyen d'upload des fichier via perl... Une petit recherche s'impose....

n°1121971
Elmoricq
Modérateur
Posté le 16-06-2005 à 14:43:14  profilanswer
 

Pourquoi ne gères-tu pas l'upload directement dans ton script PERL ?
 
EDIT : alors pour gérer l'upload, il faut :
 
1. Déclarer le formulaire HTML en "multipart", avec la ligne suivante :
 

Code :
  1. print $CGI->start_multipart_form(-method=>"POST",
  2.                                       -action=>"ton_script.pl",
  3.                                       -name=>"id_du_formulaire" );


 
 
2. Déclarer un champ pour que l'utilisateur définisse le fichier à importer :

Code :
  1. print $CGI->filefield(-name=>'id_du_champ_fichier',-size=>50);


(il y a d'autres propriétés de disponible, je pense notament à un filtre d'extensions il me semble)
 
3. Récupérer le fichier si l'utilisateur a soumis le formulaire avec son fichier de défini :
 

Code :
  1. if ( defined $CGI->param('id_du_champ_fichier') )
  2. {
  3.    my $f_handler = $CGI->param('id_du_champ_fichier');
  4.    while ( <$f_handler> )
  5.    {
  6.       chomp;
  7.       # gerer les donnees lues
  8.    }
  9. }


 
 
 
Toute la documentation sur le module CGI est accessible sur le site de CPAN :
http://search.cpan.org/~jhi/perl-5.8.0/lib/CGI.pm


Message édité par Elmoricq le 16-06-2005 à 14:51:50
mood
Publicité
Posté le 16-06-2005 à 14:43:14  profilanswer
 

n°1122272
suomi
Posté le 16-06-2005 à 17:07:04  profilanswer
 

Merci Elmoricq pour ton aide mais se que tu me suggères ne correspond pas tout à fait à mes attentes.
Apres une petit recherche et quelques essais, voila ou j'en suis.
 
Mon formulaire de test:

Code :
  1. <HTML>
  2. <!-- Le  document est composé de plusieurs parties, donc
  3. (ENCTYPE="multipart/form-data" ) + ajout de 1 champs "file".
  4. -->
  5. <HEAD> <TITLE> Test CGI </TITLE> </HEAD>
  6. <BODY>
  7. <H1> Test CGI </H1><HR>
  8. <FORM action="/cgi-bin/tfic.pl"
  9.       ENCTYPE="multipart/form-data" method="post">
  10.   <INPUT TYPE="file" NAME="fic1" SIZE=50> <BR>
  11.   <INPUT TYPE="submit" VALUE="OK">
  12.   <INPUT TYPE="reset" VALUE="Annuler">
  13. </FORM> </BODY> </HTML>


 
 
Mon script .pl pour l'upload que je vais rajouter par la suite au reste de mon script perl:
 

Code :
  1. #!C:\Program Files\EasyPHP1-8\perl\bin\perl5.8.7.exe
  2. #
  3. #  Réception du  fichier.
  4. require "cgi-lib.pl";
  5.            #$client_fn,
  6. $client_fn = {};    # $client_ct, $serveur_fn
  7. $client_ct = {};    # sont des références sur
  8. $serveur_fn = {};   # des hashes vides.
  9. $cgi_lib::writefiles = "C:/Program Files/EasyPHP1-8/www/public_html/upload/";
  10. # Répertoire dans lequel les fichiers transmis seront déposés.
  11.              CgiDie;


Le script fonction sauf qu'au lieu de garder le nom du fichier, il change son nom du style:
cgi-lib.2016.1. Comment faire pour que le nom du fichier reste intact lors de l'upload?
Merci  :pt1cable:

n°1122302
Elmoricq
Modérateur
Posté le 16-06-2005 à 17:18:14  profilanswer
 

Code :
  1. require "cgi-lib.pl";


 
 [:le poney de mr pink]  
 
 
Ce module est dépassé et obsolète depuis... ouh la... trooooop longtemps !
 
Il faut utiliser CGI, et surtout pas cgi-lib, qui aurait dû se perdre dans les limbes de l'oubli voila quelques années.
 
Tiens, vu que CPAN a l'air de ne pas répondre aujourd'hui, j'ai trouvé la documentation en français, elle m'a l'air complète :
http://perl.enstimac.fr/ModulesFr/CGI.html


Message édité par Elmoricq le 16-06-2005 à 17:20:03
n°1122406
suomi
Posté le 16-06-2005 à 18:57:34  profilanswer
 

Bon il existe un module CGI::upload:
 

Code :
  1. use CGI::Upload;
  2.      my $upload = CGI::Upload->new;
  3.      my $file_name = $upload->file_name('field');
  4.      my $file_type = $upload->file_type('field');
  5.      $upload->mime_magic('/path/to/mime.types');
  6.      my $mime_type = $upload->mime_type('field');
  7.      my $file_handle = $upload->file_handle('field');


 
Maintenant comment l'utiliser avec un formulaire envoyé par html? ça je ne sais pas trop...


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

  CGI: probleme html (firefox) et upload

 

Sujets relatifs
Probleme option onclick internet explorer[Resolu] Validation HTML VS operateur de comparaison PHP
Problème de compilation avec la librairie wxWidgetProblème Mysql + PhpBB
[résolu] Pb d'impression : perte de la mise en page et des couleursprobleme de header!!!
css: firefox ajoute la taille de la scollbar à un divProbleme super etrange de tableaux superposés [resolu]
probleme appel date du jour dans BDDprobleme de dereferencement
Plus de sujets relatifs à : CGI: probleme html (firefox) et upload


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