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

Langage Perl Discussion :

Problème du stockage du choix d'une liste déroulante dans une variable perl


Sujet :

Langage Perl

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Problème du stockage du choix d'une liste déroulante dans une variable perl
    Bonjour,

    j'ai écris le code suivant permettant de créer une liste déroulante :
    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
    #affichage d'une liste déroulante
     
    #!usr/bin/perl -w
    use strict;
     
    open(FICHIER, ">liste_deroulante.html") or die("Erreur d'ouverture");
    print(FICHIER "<!DOCTYPE HTML PUBLIC \"-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN\">",
    "<html>",
    "<head>",
    "<title>Affichage d\'une liste déroulante</title>",
     
    "<SCRIPT>",
    "<!--",
    "var choice = \'\';",
    "function Recup() {",
    "i = document.Choix.Liste.selectedIndex;",
    "if (i == 0) return;",
    "choice = document.Choix.Liste.options.value;",
    "}",
    "\/\/ -->",
    "</SCRIPT>",
     
    "</head>",
     
    "<body>",
    "<p> </p>",
    "<p><strong><font size=\"+3\">Essai de liste déroulante</font></strong></p>",
     
     
    "<FORM NAME=\"Choix\">",
    "<SELECT NAME=\"Liste\" onChange=\"Recup()\">",
    "<OPTION VALUE=\"\">Choisir une option",
    "<OPTION VALUE=\"mail\">Mail",
    "<OPTION VALUE=\"lettre\">Lettre",
    "<OPTION VALUE=\"colis\">Colis",
    "</SELECT>",
    "</FORM>",
    "</body>",
    "</html>");
    close FICHIER;
    Je voudrais savoir comment faire pour que l'affichage de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "le choix que vous avez selectionne est : $choix\n";
    Remplace $choix par le nom du choix dans cette selection.
    Je ne sais pas comment transformer le en Merci

  2. #2
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    J'avoue que je ne comprends pas bien ce que tu cherches à faire (j'ai relu une demie-douzaine de fois ton post sans succès). Ton script écrit un fichier HTML contenant du Javascript. Bon. Tu cherches à récupérer une donnée provenant de ton fichier, c'est ça ? Ça te sers à quoi puisque tu viens d'écrire ce fichier ? Tout ce qu'il contient vient de ton script Perl.
    Non, vraiment, je ne vois pas ce que tu cherches à faire.

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Schmorgluck Voir le message
    J'avoue que je ne comprends pas bien ce que tu cherches à faire (j'ai relu une demie-douzaine de fois ton post sans succès). Ton script écrit un fichier HTML contenant du Javascript. Bon. Tu cherches à récupérer une donnée provenant de ton fichier, c'est ça ? Ça te sers à quoi puisque tu viens d'écrire ce fichier ? Tout ce qu'il contient vient de ton script Perl.
    Non, vraiment, je ne vois pas ce que tu cherches à faire.
    C'est vrai que ce n'était pas clair du tout.
    En faite, ce que je cherche à faire c'est transmettre le parametre qui contient le choix effectué dans la liste déroulante à la cgi.
    Actuellement le fichier que je dois modifiier contient des lignes de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    my ($mday, $mon, $year);
    my @date_of_day = localtime() ;
     
    $mday = $date_of_day[3];
    $mon  = $date_of_day[4];
    $year = $date_of_day[5];
     
    #[...]
     
    <center><img src="graph.cgi?year=$year&mon=$mon&mday=$mday"></center><br>
    Je souhaite transmettre le parametre du choix dans la cgi qui ressemblera à ça en me basant sur l'écriture précédente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <center><img src="graph.cgi?year=$year&mon=$mon&mday=$mday&choice=$choice"></center><br>
    Comment la variable $choice, s'obtiendrait-elle ?

    Merci

  4. #4
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    C'est possible en CGI, mais comme là tu ne fais pas de CGI mais tu te contentes d'écrire un fichier et de le sauvegarder sur un disque sans l'envoyer à un client, c'est totalement impossible, désolé.

  5. #5
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Schmorgluck Voir le message
    C'est possible en CGI, mais comme là tu ne fais pas de CGI mais tu te contentes d'écrire un fichier et de le sauvegarder sur un disque sans l'envoyer à un client, c'est totalement impossible, désolé.
    Est-ce que tu pourrais m'indiquer comment cela se fait en CGI ?

    Merci

  6. #6
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Alors, je débute totalement avec le module CGI, mais dans le principe c'est la même chose qu'avec PHP ou d'autres langages server-side : il faut que, lors de la validation du formulaire (ou, si tu préfères, lors de la modification du choix dans ta liste, comme tu le fais avec javascript), un script soit appelé pour produire le nouvel affichage, en lui envoyant les données du formulaire.
    Il existe deux commandes HTTP pour ça, GET et POST. GET fonctionne en ajoutant les données dans l'URL de l'appel au script (ce qui est à mon avis le plus pertinent pour ta liste de choix), POST en envoyant les données sur l'entrée standard du script (pertinent entre autres pour les grands champs de texte comme celui qui permet de poster sur ce forum, par exemple).
    Je ne suis pas encore assez calé sur les façons de procéder pour t'expliquer comment procéder, mais en farfouillant dans la FAQ, je suis tombé sur un renvoi vers une documentation qui m'a l'air pas mal du tout.

  7. #7
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    J'ai regardé ce qu'il y avait dans le lien que tu as mis et d'après ce que tu dis dans ton post, il faudrait donc que je m'y prenne comme ceci :
    (Je pars directement du fichier que j'aurai à modifier sans prendre des exemples de test.)
    Ce bout de code pour la création de lien affichant des stats pour une année :
    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
    print<<EOPart3;
    	</td>
            <td valign="top" width="200" rowspan="2"><font face="arial">
    	  Par mois sur une annee :<br>
              <br>
              <center>
               <table border="0"  bgcolor="#000000" cellpadding="1">
                  <tr><td bgcolor="#ffd281">
                    <table border="0" cellpadding="3" width="50">
                      <tr align="center"><td>
                        <a href="$cgi_name.cgi?year=103">2003</a>
                      </td></tr>
                      <tr align="center"><td>
                        <a href="$cgi_name.cgi?year=104">2004</a>
                      </td></tr>
                      <tr align="center"><td>
                        <a href="$cgi_name.cgi?year=105">2005</a>
                      </td></tr>
    		  <tr align="center"><td>
    		    <a href="$cgi_name.cgi?year=106">2006</a>
    		  </td></tr>
                    </table>
                  </td></tr>
                </table>
              </center>
    	</td></tr>
    sera remplacé par :
    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
    <script language="JavaScript">
    	<!--
    		var choice = '';
    		function Recup() {
    			i = document.Choix.Liste.selectedIndex;
    			if (i == 0) return;
    			choice = document.Choix.Liste.options[i].value;
    		}
    		function pageCall(year){
    			window.location = "$cgi_name.cgi?year="+year+"&choice=" + choice;
    		}
    	// -->
    </script>
     
    print<<EOPart3;
    	</td>
            <td valign="top" width="200" rowspan="2"><font face="arial">
    	  Par mois sur une annee :<br>
              <br>
              <center>
               <table border="0"  bgcolor="#000000" cellpadding="1">
                  <tr><td bgcolor="#ffd281">
                    <table border="0" cellpadding="3" width="50">
                      <tr align="center"><td>
                        <a href="javascript:pageCall(103)">2003</a>
                      </td></tr>
                      <tr align="center"><td>
                        <a href="javascript:pageCall(104)">2004</a>
                      </td></tr>
                      <tr align="center"><td>
                        <a href="javascript:pageCall(105)">2005</a>
                      </td></tr>
    		  <tr align="center"><td>
    		    <a href="javascript:pageCall(106)">2006</a>
    		  </td></tr>
                    </table>
                  </td></tr>
                </table>
              </center>
    	</td></tr>
    Ensuite, je récupère le choix dans une variable perl en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    my $choice = (length(param("choice"))) ? param("choice") : "";
     
    #cette partie était déjà présente.
    if (!length(param("mday")) && !length(param("mon")) && !length(param("year"))) {
      my @date_of_day = localtime() ;
     
      $mday = $date_of_day[3];
      $mon  = $date_of_day[4];
      $year = $date_of_day[5];
    } else {
      $mday = length(param("mday")) ? param("mday") : '';
      $mon  = length(param("mon"))  ? param("mon")  : '';
      $year = length(param("year")) ? param("year") : '';
    }
    puis, je transmet ce paramètre à la cgi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            <center><img src="graph.cgi?type=pie&year=$year&mon=$mon&mday=$mday&choice=$choice"></center><br>
    C'est bien comme cela qu'il faudrait faire ? (Je ne peux pas tester avant plusieurs jours ...)

    Mais pour ce qui est de la modification des liens pour des stats autres que les années, ça me semble problématique, je ne sait pas trop comment ça se ferait.
    Par exemple, pour cette fonction comment est-ce que je pourrais procéder pour ajouter le choix sachant qu'il y a des boucles ?
    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
    46
    47
    sub _print_calendar_month {
      my ($current_month, $current_year) = @_;
      my $printable_year = 1900 + $current_year;
     
      my $previous_year = $current_year - 1;
      my $next_year = $current_year + 1;
     
      print<<EOPart1;
           <center>
            - $printable_year -
            <table>
              <tr><td>
                <a href="$cgi_name.cgi?year=$previous_year&mon=$current_month">
                  <img src="../img/back.gif" border="0" width="10">
                </a>
              </td><td>
                <table border="0"  bgcolor="#000000" cellpadding="1">
                <tr><td bgcolor="#ffd281">
                  <table border="0"  bgcolor="#ffd281" cellpadding="3">
                    <tr align="middle">
    EOPart1
     
      for (my $i = 0; $i < 6; $i++) {
        print "<td>
                 <a href='$cgi_name.cgi?year=$current_year&mon=$i'>$MONTHS[$i]</a>
               </td>";
      }
      print "</tr><tr align='middle'>";
      for (my $i = 6; $i < 12; $i++) {
        print "<td>
                 <a href='$cgi_name.cgi?year=$current_year&mon=$i'>$MONTHS[$i]</a>
               </td>";
      }
     
      print<<EOPart2;
                      </TR>
                    </table>
                  </table>
                </td><td>
                  <a href="$cgi_name.cgi?year=$next_year&mon=$current_month'>
                    <img src="../img/next.gif" border="0" width="10">
                  </a>
                </td></tr>
              </table>
            </center>
    EOPart2
    }
    Merci

  8. #8
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Ben, déjà, si tu oublies de mettre un print pour envoyer le javascript au client, ça va pas marcher, hein.
    Pour le reste, je débute aussi, alors je ne saurais te dire, mais j'ai la vague impression que tu te compliques la vie exagérément. Une impression générale. Tu ne factorises pas assez ton code, je crois (et le module CGI offre de bons outils pour ça).

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/02/2012, 16h59
  2. Réponses: 1
    Dernier message: 12/12/2011, 10h07
  3. Réponses: 0
    Dernier message: 07/07/2010, 14h51
  4. Afficher la valeur choisie d'une liste déroulante dans une textbox
    Par bouchette63 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 20/06/2006, 14h26
  5. [VB6]Créer une liste déroulante dans une dataGrid
    Par mcay dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 11/05/2006, 09h32

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