IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web Perl Discussion :

Utiliser le resultat d'une <FORM> avec CGI


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par défaut Utiliser le resultat d'une <FORM> avec CGI
    salut a tous,

    Je debute dans avec perl CGI.

    Voici le debut de mon script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    #!/usr/local/bin/perl5.6
     
    use CGI;
     
    $query = new CGI;
     
    $root = "/remote/";
    print <<"EOF";
    Content-type: text/html
     
    <html>
    <head>
    Congestion Map
    <head/>
    <body>
     
    <form action="/remote/test.cgi" method="post">
    Small: 
    <input type="radio" checked="checked"
    name="size" value="200">
    <br>
    Medium: 
    <input type="radio"
    name="size" value="400">
    <br>
    Large: 
    <input type="radio"
    name="size" value="600">
    </form>
    </body>
    </html>
    EOF
     
     
    $size=$query->param('size');
     
    print <<"EOF";
    <html>
    <body>
    <img src=$root/Congestion.png
    width="$size"
    height="200"
    alt="CONG MAP">
    </img>
    EOF
    Le but est donc de recuperer par le biais de bouton radio la taille d'affichage d'une image, et la passer en parametre a l'attribut width de cette image.
    Pour cela j'ai utilise $query = new CGI;
    Mais j'ai pas l'impression que ca marche, car la variable size definie ensuite par :
    $size=$query->param('size');
    ne donne rien.

    Ou se trouve mon erreur???

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Par défaut
    Tu es sûr que ton formulaire est bien posté, parce qu'il n'y a pas de bouton submit ?
    D'autre part, le body et html se terminent (balises fermantes) et ensuite sont réouverts, mais dans la même page: il y a un problème de construction.
    Normalement il y a deux temps, qui correspondent à deux exécutions différentes: celui de l'affichage du formulaire et celui de l'affichage de l'image après le post. Ca ne se reflète pas dans ton code.
    Tu peux savoir que le formulaire a été posté si $query->params() n'est pas vide.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 167
    Par défaut
    Bonjour,
    Personnellement, quand j'écris une "Form" qui appelle un script cgi par l'intermédiaire d'un bouton "submit", je place la Form dans un fichier et le script dans un autre fichier. Les mettre tous les deux dans le même fichiers est possible mais je ne sais pas faire (si quelqu'un peut m'indiquer un endroit où il y a une explication à ce sujet, merci d'avance).
    Voici deux scripts qui marchent chez moi (Windows XP et serveur Apache)
    Ils reprennent ton programme, mais pour faire plus simple j'ai enlevé l'image.
    C'est juste pour vérifier que le paramètre $size est bien transmis
    À partir de là, tu pourras rajouter des choses pour obtenir ce que tu cherches à faire.

    Premier script (lui donner l'extentson cgi):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #!/perl/bin/perl -wT
    print "Content-type: text/html\n\n";
    print <<EOF;
    <form action="remote/test.cgi" method="post">
    Small: 
    <input type="radio" checked="checked"
    name="size" value="200">
    <br>
    Medium: 
    <input type="radio"
    name="size" value="400">
    <br>
    Large: 
    <input type="radio"
    name="size" value="600">
    <input type="submit" value="envoyer">
    </form>
    </body>
    </html>
    EOF
    le placer dans un répertoire dans lequel on crée un sous-répertoire nommé :
    remote, dans ce sous-répertoire, placer le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/perl/bin/perl -wT
    use CGI;
     
    $query = new CGI;
    $size=$query->param('size');
    print "Content-type: text/html\n\n";
     
    print <<EOF;
    <html>
    <body>
    size=$size
    EOF
    Ce dernier script doit être le contenu d'un fichier nommé test.cgi
    Il faudra, pour faire tourner ça sur ton ordinateur faire attention aux chemins
    (première ligne)

    Il faut bien noter, qu'avant d'imprimer quoi que ce soit, il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "Content-type: text/html\n\n";
    Cordialement,
    Nibroc

  4. #4
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 167
    Par défaut
    Voici un script qui ressemble un peu plus à ce que tu veux faire (avec les mêmes simplifications) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    #!/perl/bin/perl -wT
    use CGI::Carp qw(warningsToBrowser fatalsToBrowser) ;
    use CGI;
     
    print "Content-type: text/html\n\n";
    print <<EOF;
    <form  method="post">
    Small: 
    <input type="radio" 
    name="size" value="200">
    <br>
    Medium: 
    <input type="radio"
    name="size" value="400">
    <br>
    Large: 
    <input type="radio"
    name="size" value="600">
    <input type="submit" value="envoyer">
    </form>
    EOF
    $query = new CGI;
    if ($query->param()) {
     $size=$query->param('size');
    }
    print <<EOF2;
    size=$size
    </body>
    </html>
    EOF2
    Je ne sais pas trop pourquoi ça marche, mais j'ai l'impression que chaque fois qu'on clique sur le bouton submit (ici appelé "envoyer") le script est entièrement re-exécuté par le serveur. Peut-être que quelqu'un pourra expliquer ça.
    Je me suis inspiré de l'exemple qui se trouve au début de ce qu'on trouve en tapant perldoc cgi.pm (sous la rubrique synopsis)
    Cordialement.
    nibroc.

Discussions similaires

  1. utiliser les resultat d'une requete comme colonnes de la dexieme
    Par Vega779 dans le forum Développement
    Réponses: 3
    Dernier message: 07/12/2007, 20h45
  2. Réponses: 3
    Dernier message: 07/12/2007, 20h45
  3. Utiliser le resultat d'une command pour generer un nom de fichier
    Par jfourment dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 20/08/2007, 17h53
  4. utilisation du resultat d'une requete dans un curseur
    Par pseudobidon57 dans le forum SQL
    Réponses: 9
    Dernier message: 23/05/2007, 17h52
  5. Réponses: 3
    Dernier message: 08/10/2006, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo