OVH Cloud OVH Cloud

probleme exemple cook book chapitre 19.14

2 réponses
Avatar
john.swilting
j ai repris l exemple du cook book perl
chapitre 19.14
et il ne marche pas bien
j ai une erreur
pas d 'ecran pour carte ligne 24

je ne suis pas tres fort en perl
pouvez vous m aider
help help help
je vous remercie par avance

#!/usr/bin/perl -w

use strict;
use CGI qw(:standard escapeHTML);
use CGI::Carp qw(fatalsToBrowser);

my %Etats;

my $Ecran_actuel;

## hachage des documents et des fonctions

%Etats = (
'Défaut' =>\&document_de_garde,
'Chemises' =>\&chemise,
'Chaussures' =>\&chaussures,
'Passage à la caisse' =>\&passage_a_la_caisse,
'Carte' =>\&carte_de_credit,
'Commande' =>\&commande,
'Annnulation' =>\&document_de_garde,
);

$Ecran_actuel = param(".Etat") || "Défaut";
die "Pas d'écran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};

## engendre le document courant

en_tete_standard();

while ( my ($nom_ecran,$fonction) = each %Etats){
$fonction->($nom_ecran eq $Ecran_actuel);
}

pied_de_page_standard();
exit;

########################################################################
## fonctions d'en-tete, de pied de page, de menu #######################
########################################################################

sub en_tete_standard {
print header(),
start_html(-Title => "Chemises", -BGCOLOR=>"White");
print start_form(); ##start_multipart_form()
##s'il faut exporter des fichiers sur le reseau
}

sub pied_de_page_standard { print end_form(), end_html() }

sub menu_boutique {
print p(defaults("Vider mon caddie"),
vers_doc("Chemises"),
vers_doc("Chaussures"),
vers_doc("Passage à la caisse"));
}

#######################################################################
## sous-programmes pour chaque écran ##################################
#######################################################################


## le document par defaut

sub document_de_garde {
my $actif = shift;
return unless $actif;

print "<H1>salut!</H1>\n";
print "bienvenue dans notre magasin d'habillement!\n",
print "faites votre choix dans le menu ci-dessous.\n";

menu_boutique();
}

## document à partir duquel commander une chemise

sub chemise {
my $actif = shift;
my @tailles = qw(XL L M S);
my @couleurs = qw(Noire Blanche);

my ($taille, $couleur, $compte) =
(param("taille_chemise"), param("couleur_chemise"),
param("nom_chemises"));

##verification des donnees reçus
if ($compte) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep {$_ eq $taille } @tailles;
param("couleur_chemise" , $couleur);
param("taille_chemise" , $taille);
}

unless ( $actif ) {
print hidden("taille_chemise") if $taille;
print hidden("couleur_chemise") if $couleur;
print hidden("nombre_chemises") if $compte;
return;
}

print h1("chemises");
print p("quelle chemise! cette petite merveille est\n","livree avec
toutes les options.doublure de luxe,\n",
"finitions avec toutes les options. doublure de luxe\n","finitions en
coton, et un col à en avoir les\n",
"Prix unitaire: 33.00\&nbsp;euros.");

print h2("options");
print p("nombre ?",textfield("nombre_chemises"));
print p("taille ?",popup_menu("taille_chemise",\@tailles ),
"couleur ?", popup_menu("couleur_chemise",\@couleurs ));

menu_boutique();

}


## document à partir duquel commander des chaussures

sub chaussures {
my $actif = shift;
my @tailles = qw(35 36 37 38 39 40 41 42 43 44 45 46 47 48);
my @couleurs = qw(Ivoire Noisette Ebene);

my ( $taille, $couleur, $compte) =
(param("taille_chaussure"), param("couleur_chaussures"),
param("nombre_chaussures"));

##verification des donnees reçus
if ( $compte ) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep { $_ eq $taille } @tailles;
param("couleur_chaussures",$couleur);
param("taille_chaussures", $taille);
}


unless ( $actif ) {
print hidden("taille_chaussures") if $taille;
print hidden("couleur_chaussures") if $couleur;
print hidden("nombre_chaussures") if $compte;
return;
}

print h1("chaussures");
print p("vous ne serez jamais aussi elegant que chausse de
ces\n", "souliers magnifiques\n",
"prix unitaires: 49.99\&nbsp;euros.");

print h2("options");
print p("nombre de paires?", textfield("nombre_chaussures"));
print p("pointure?", popup_menu("taille_chaussures",\@tailles));
print p("teinte?",popup_menu("couleur_chaussures",\@couleurs));

menu_boutique();

}

## document qui affiche la commande actuelle en attente de comfirmation

sub passage_a_la_caisse {
my $actif = shift;

return unless $actif;

print h1("confirmation de la commande");
print p("vous avez commande&nbsp;:");
print texte_commande();
print p("est-ce correct?\nn",
"choissisez «Carte» pour regler ces\n",
"objets, ou «chemises» ou\n",
"«chaussures» pour continuer vos courses.");
print p(vers_doc("carte"),
vers_doc("chemises"),
vers_doc("chaussures"));

}

## document pour ollecter les informations relatives à la carte de credit

sub carte_de_credit {
my $actif = shift;
my @gadgets = qw(Nom Adresse1 Adresse2 Ville Code_postal Pats Telephone
Carte Expire_en);

unless ( $actif ) {
print map { hidden($_) } @gadgets;
return;
}

print pre ( p ("Nom: ",textfield("Nom")),
p ("Adresse: ",textfield("Adresse1")),
p (" ",textfield("Adresse2")),
p ("Ville: ",textfield("Ville")),
p ("Code Postal: ",textfield("Code_postal")),
p ("Pays: ",textfield("Pays")),
p ("Telephone: ",textfield("Teléphone")),
p ("Carte numéro: ",textfield("Carte")),
p ("Expire en: ",textfield("Expire_en")));

print p ( "Selectionner «Commande» pour commander\n",
"ces objets. selectionner «Annulation»\n");

print p ( vers_doc("Commande"), vers_doc("Annulation"));
}

## document pour terminer une commande

sub commande {
my $actif = shift;

unless ( $actif) {
return;
}

## ici on verifie les valeurs donnees pour la carte de credit

print h1("Commandé\&nbsp;!");
print p("vous avez commandé ce qui suit:");
print texte_commande();

print p (defaults ("Retour au debut"));
}

## renvoie de l ' HTML pour la commande actuelle("vous avez ommande")

sub texte_commande {
my $html = '';

if ( param ("nombre_chemises")) {
$html .= p("vous avez commandé" , param("nombre_chemises"),
"chemises de taille", param("taille_chemise"),
" et de couleur " , param("couleur_chemise"),",");
}
if ( param ("nombre_chaussures")) {
$html .= p("vous avez comandé",param("nombre_chaussures"),
"paires de chaussures de pointures" ,
param("taille_chaussures"),
" et de teinte ", param ("couleur_chaussures"),".");
}
$html = p("Rien!") unless $html;
$html .= p("pour un prix total de ",calcule_prix());
return $html;
}

sub calcule_prix {
my $chemises = param("nombre_chemises") || 0 ;
my $chaussures = param("nombre_chaussures") || 0;
return sprintf("%.2f euros", $chemises * 33 + $chaussures * 49.99);
}

sub vers_doc { submit (-NAME => ".Etat", -VALUE => shift) }

2 réponses

Avatar
john.swilting
john.swilting wrote:

j ai repris l exemple du cook book perl
chapitre 19.14
et il ne marche pas bien
j ai une erreur
pas d 'ecran pour carte ligne 24

je ne suis pas tres fort en perl
pouvez vous m aider
help help help
je vous remercie par avance

#!/usr/bin/perl -w

use strict;
use CGI qw(:standard escapeHTML);
use CGI::Carp qw(fatalsToBrowser);

my %Etats;

my $Ecran_actuel;

## hachage des documents et des fonctions

%Etats = (
'Défaut' =>&document_de_garde,
'Chemises' =>&chemise,
'Chaussures' =>&chaussures,
'Passage à la caisse' =>&passage_a_la_caisse,
'Carte' =>&carte_de_credit,
'Commande' =>&commande,
'Annnulation' =>&document_de_garde,
);

$Ecran_actuel = param(".Etat") || "Défaut";
die "Pas d'écran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};

## engendre le document courant

en_tete_standard();

while ( my ($nom_ecran,$fonction) = each %Etats){
$fonction->($nom_ecran eq $Ecran_actuel);
}

pied_de_page_standard();
exit;

########################################################################
## fonctions d'en-tete, de pied de page, de menu #######################
########################################################################

sub en_tete_standard {
print header(),
start_html(-Title => "Chemises", -BGCOLOR=>"White");
print start_form(); ##start_multipart_form()
##s'il faut exporter des fichiers sur le reseau
}

sub pied_de_page_standard { print end_form(), end_html() }

sub menu_boutique {
print p(defaults("Vider mon caddie"),
vers_doc("Chemises"),
vers_doc("Chaussures"),
vers_doc("Passage à la caisse"));
}

#######################################################################
## sous-programmes pour chaque écran ##################################
#######################################################################


## le document par defaut

sub document_de_garde {
my $actif = shift;
return unless $actif;

print "<H1>salut!</H1>n";
print "bienvenue dans notre magasin d'habillement!n",
print "faites votre choix dans le menu ci-dessous.n";

menu_boutique();
}

## document à partir duquel commander une chemise

sub chemise {
my $actif = shift;
my @tailles = qw(XL L M S);
my @couleurs = qw(Noire Blanche);

my ($taille, $couleur, $compte) > (param("taille_chemise"), param("couleur_chemise"),
param("nom_chemises"));

##verification des donnees reçus
if ($compte) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep {$_ eq $taille } @tailles;
param("couleur_chemise" , $couleur);
param("taille_chemise" , $taille);
}

unless ( $actif ) {
print hidden("taille_chemise") if $taille;
print hidden("couleur_chemise") if $couleur;
print hidden("nombre_chemises") if $compte;
return;
}

print h1("chemises");
print p("quelle chemise! cette petite merveille estn","livree avec
toutes les options.doublure de luxe,n",
"finitions avec toutes les options. doublure de
luxen","finitions en
coton, et un col à en avoir lesn",
"Prix unitaire: 33.00&nbsp;euros.");

print h2("options");
print p("nombre ?",textfield("nombre_chemises"));
print p("taille ?",popup_menu("taille_chemise",@tailles ),
"couleur ?", popup_menu("couleur_chemise",@couleurs ));

menu_boutique();

}


## document à partir duquel commander des chaussures

sub chaussures {
my $actif = shift;
my @tailles = qw(35 36 37 38 39 40 41 42 43 44 45 46 47 48);
my @couleurs = qw(Ivoire Noisette Ebene);

my ( $taille, $couleur, $compte) > (param("taille_chaussure"), param("couleur_chaussures"),
param("nombre_chaussures"));

##verification des donnees reçus
if ( $compte ) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep { $_ eq $taille } @tailles;
param("couleur_chaussures",$couleur);
param("taille_chaussures", $taille);
}


unless ( $actif ) {
print hidden("taille_chaussures") if $taille;
print hidden("couleur_chaussures") if $couleur;
print hidden("nombre_chaussures") if $compte;
return;
}

print h1("chaussures");
print p("vous ne serez jamais aussi elegant que chausse de
cesn", "souliers magnifiquesn",
"prix unitaires: 49.99&nbsp;euros.");

print h2("options");
print p("nombre de paires?", textfield("nombre_chaussures"));
print p("pointure?", popup_menu("taille_chaussures",@tailles));
print p("teinte?",popup_menu("couleur_chaussures",@couleurs));

menu_boutique();

}

## document qui affiche la commande actuelle en attente de comfirmation

sub passage_a_la_caisse {
my $actif = shift;

return unless $actif;

print h1("confirmation de la commande");
print p("vous avez commande&nbsp;:");
print texte_commande();
print p("est-ce correct?nn",
"choissisez «Carte» pour regler cesn",
"objets, ou «chemises» oun",
"«chaussures» pour continuer vos courses.");
print p(vers_doc("carte"),
vers_doc("chemises"),
vers_doc("chaussures"));

}

## document pour ollecter les informations relatives à la carte de credit

sub carte_de_credit {
my $actif = shift;
my @gadgets = qw(Nom Adresse1 Adresse2 Ville Code_postal Pats
Telephone
Carte Expire_en);

unless ( $actif ) {
print map { hidden($_) } @gadgets;
return;
}

print pre ( p ("Nom: ",textfield("Nom")),
p ("Adresse: ",textfield("Adresse1")),
p (" ",textfield("Adresse2")),
p ("Ville: ",textfield("Ville")),
p ("Code Postal: ",textfield("Code_postal")),
p ("Pays: ",textfield("Pays")),
p ("Telephone: ",textfield("Teléphone")),
p ("Carte numéro: ",textfield("Carte")),
p ("Expire en: ",textfield("Expire_en")));

print p ( "Selectionner «Commande» pour commandern",
"ces objets. selectionner «Annulation»n");

print p ( vers_doc("Commande"), vers_doc("Annulation"));
}

## document pour terminer une commande

sub commande {
my $actif = shift;

unless ( $actif) {
return;
}

## ici on verifie les valeurs donnees pour la carte de credit

print h1("Commandé&nbsp;!");
print p("vous avez commandé ce qui suit:");
print texte_commande();

print p (defaults ("Retour au debut"));
}

## renvoie de l ' HTML pour la commande actuelle("vous avez ommande")

sub texte_commande {
my $html = '';

if ( param ("nombre_chemises")) {
$html .= p("vous avez commandé" , param("nombre_chemises"),
"chemises de taille", param("taille_chemise"),
" et de couleur " , param("couleur_chemise"),",");
}
if ( param ("nombre_chaussures")) {
$html .= p("vous avez comandé",param("nombre_chaussures"),
"paires de chaussures de pointures" ,
param("taille_chaussures"),
" et de teinte ", param ("couleur_chaussures"),".");
}
$html = p("Rien!") unless $html;
$html .= p("pour un prix total de ",calcule_prix());
return $html;
}

sub calcule_prix {
my $chemises = param("nombre_chemises") || 0 ;
my $chaussures = param("nombre_chaussures") || 0;
return sprintf("%.2f euros", $chemises * 33 + $chaussures * 49.99);
}

sub vers_doc { submit (-NAME => ".Etat", -VALUE => shift) }


john.swilting wrote:

RedGrittyBrick wrote:

john.swilting wrote:
I started again the  example of cook book perl
chapter 19.14
He(It) does not walk(work) correctly can you m help to find the error
The error which appears it is Not of ecran for card


You have used google to translate your error message from French into
English. You shouldn't do this. See below.

at /var/www/cgi-bin/vente.cgi line 24

help help help
i am french
i am beginner of perl
help help help

#!/usr/bin/perl -w

use strict;
use CGI qw(:standard escapeHTML);
use CGI::Carp qw(fatalsToBrowser);

my %Etats;

my $Ecran_actuel;

## hachage des documents et des fonctions

%Etats = (
        'Défaut' =>&document_de_garde,
        'Chemises' =>&chemise,
        'Chaussures' =>&chaussures,
        'Passage à la caisse' =>&passage_a_la_caisse,
        'Carte' =>&carte_de_credit,
        'Commande' =>&commande,
        'Annnulation' =>&document_de_garde,
);

$Ecran_actuel = param(".Etat") || "Défaut";
die "Pas d'écran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};


^^^^^^
That line is printing your error message - some French equivalent of
"Not of ecran for card" which suggests that the user entered some
variation of 'Carte.' or 'carte' or ' Carte'.

I'd change that line to
   die "Pas d'écran pour '$Ecran_actuel'" unless $Etats{$Ecran_actuel};
so that you can clearly see leading spaces and other punctuation.

<rest of program snipped>


I have correct the problemes of syntax
But after the form card(map) he indicates me 0 euro of command(order)
I do not understand


help help

#!/usr/bin/perl -w

use strict;
use CGI qw(:standard escapeHTML);
use CGI::Carp qw(fatalsToBrowser);

my %Etats;

my $Ecran_actuel;

## hachage des documents et des fonctions

%Etats = (
        'Défaut' =>&document_de_garde,
        'Chemises' =>&chemise,
        'Chaussures' =>&chaussures,
        'Passage à la caisse' =>&passage_a_la_caisse,
        'Carte' =>&carte_de_credit,
        'Commande' =>&commande,
        'Annnulation' =>&document_de_garde,
);

$Ecran_actuel = param(".Etat") || "Défaut";
die "Pas d'écran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};

## engendre le document courant

en_tete_standard();

while ( my ($nom_ecran,$fonction) = each %Etats){
        $fonction->($nom_ecran eq $Ecran_actuel);
}

pied_de_page_standard();
exit;

########################################################################
## fonctions d'en-tete, de pied de page, de menu #######################
########################################################################

sub en_tete_standard {
    print header(),
      start_html(-Title => "Chemises", -BGCOLOR=>"White");
    print start_form(); ##start_multipart_form()
                        ##s'il faut exporter des fichiers sur le reseau
    }

sub pied_de_page_standard { print end_form(), end_html() }

sub menu_boutique {
    print p(defaults("Vider mon caddie"),
            vers_doc("Chemises"),
            vers_doc("Chaussures"),
            vers_doc("Passage à la caisse"));
    }

#######################################################################
## sous-programmes pour chaque écran ##################################
#######################################################################


## le document par defaut

sub document_de_garde {
    my $actif = shift;
    return unless $actif;
   
    print "<H1>salut!</H1>n";
    print "bienvenue dans notre magasin d'habillement&nbsp;!n",
    print "faites votre choix dans le menu ci-dessous.n";

    menu_boutique();
}

## document à partir duquel commander une chemise

sub chemise {
    my $actif = shift;
    my @tailles = qw(XL L M S);
    my @couleurs = qw(Noire Blanche);
   
    my ($taille, $couleur, $compte) >       (param("taille_chemise"), param("couleur_chemise"),
       param("nom_chemises"));
   
   ##verification des donnees reçus
    if ($compte) {
        $couleur = $couleurs[0]
          unless grep { $_ eq $couleur } @couleurs;
        $taille = $tailles[0]
          unless grep {$_ eq $taille } @tailles;
        param("couleur_chemise" , $couleur);
        param("taille_chemise" , $taille);
        }
   
    unless ( $actif ) {
        print hidden("taille_chemise") if $taille;
        print hidden("couleur_chemise") if $couleur;
        print hidden("nombre_chemises") if $compte;
        return;
        }
   
    print h1("chemises");
    print p("quelle chemise! cette petite merveille estn","livree avec
toutes les options.doublure de luxe,n",
            "finitions avec toutes les options. doublure de
            luxen","finitions en
coton, et un col à en avoir lesn",
            "Prix unitaire: 33.00 euros.");

    print h2("options");
    print p("nombre ?",textfield("nombre_chemises"));
    print p("taille ?",popup_menu("taille_chemise",@tailles ),
            "couleur ?", popup_menu("couleur_chemise",@couleurs ));
   
    menu_boutique();
   
    }


## document à partir duquel commander des chaussures

sub chaussures {
    my $actif = shift;
    my @tailles = qw(35 36 37 38 39 40 41 42 43 44 45 46 47 48);
    my @couleurs = qw(Ivoire Noisette Ebene);
   
    my ( $taille, $couleur, $compte) >       (param("taille_chaussure"), param("couleur_chaussures"),
       param("nombre_chaussures"));
   
    ##verification des donnees reçus
    if ( $compte ) {
        $couleur = $couleurs[0]
          unless grep { $_ eq $couleur } @couleurs;
        $taille = $tailles[0]
          unless grep { $_ eq $taille } @tailles;
        param("couleur_chaussures",$couleur);
        param("taille_chaussures", $taille);
        }
   
   
unless ( $actif ) {
    print hidden("taille_chaussures") if $taille;
    print hidden("couleur_chaussures") if $couleur;
    print hidden("nombre_chaussures") if $compte;
    return;
    }
   
    print h1("chaussures");
    print p("vous ne serez jamais aussi elegant que chausse de
cesn", "souliers magnifiquesn",
            "prix unitaires: 49.99 euros.");
   
    print h2("options");
    print p("nombre de paires?", textfield("nombre_chaussures"));
    print p("pointure?", popup_menu("taille_chaussures",@tailles));
    print p("teinte?",popup_menu("couleur_chaussures",@couleurs));
   
    menu_boutique();
   
    }

## document qui affiche la commande actuelle en attente de comfirmation

sub passage_a_la_caisse {
    my $actif = shift;
   
    return unless $actif;
   
    print h1("confirmation de la commande");
    print p("vous avez commande:");
    print texte_commande();
    print p("est-ce correct?nn",
            "choissisez «Carte» pour regler cesn",
            "objets, ou «chemises» oun",
            "«chaussures» pour continuer vos courses.");
    print p(vers_doc("Carte"),
            vers_doc("Chemises"),
            vers_doc("Chaussures"));
   
    }

## document pour ollecter les informations relatives à la carte de credit

sub carte_de_credit {
    my $actif = shift;
    my @gadgets = qw(Nom Adresse1 Adresse2 Ville Code_postal Pats
    Telephone
Carte Expire_en);
   
    unless ( $actif ) {
        print map { hidden($_) } @gadgets;
        return;
        }
   
    print pre ( p ("Nom&nbsp;:              ",textfield("Nom")),
                p ("Adresse&nbsp;:          ",textfield("Adresse1")),
                p ("                         ",textfield("Adresse2")),
                p ("Ville&nbsp;:            ",textfield("Ville")),
                p ("Code Postal&nbsp;:      ",textfield("Code_postal")),
                p ("Pays&nbsp;:             ",textfield("Pays")),
                p ("Telephone&nbsp;:        ",textfield("Teléphone")),
                p ("Carte numéro&nbsp;:     ",textfield("Carte")),
                p ("Expire en&nbsp;:        ",textfield("Expire_en")));
   
    print p ( "Selectionner «Commande» pour commandern",
              "ces objets. selectionner «Annulation»n");
   
    print p ( vers_doc("Commande"), vers_doc("Annulation"));
    }

## document pour terminer une commande

sub commande {
    my $actif = shift;
   
    unless ( $actif) {
        return;
        }
   
    ## ici on verifie les valeurs donnees pour la carte de credit
   
    print h1("Commandé&nbsp;!");
    print p("vous avez commandé ce qui suit:");
    print texte_commande();
   
    print p (defaults ("Retour au debut"));
    }

## renvoie de l ' HTML pour la commande actuelle("vous avez ommande")

sub texte_commande {
    my $html = '';
   
    if ( param ("nombre_chemises")) {
        $html .= p("vous avez commandé" , param("nombre_chemises"),
                   "chemises de taille", param("taille_chemise"),
                   " et de couleur " , param("couleur_chemise"),",");
        }
    if ( param ("nombre_chaussures")) {
        $html .= p("vous avez comandé",param("nombre_chaussures"),
                   "paires de chaussures de pointures" ,
param("taille_chaussures"),
                   " et de teinte ", param ("couleur_chaussures"),".");
        }
    $html = p("Rien!") unless $html;
    $html .= p("pour un prix total de ",calcule_prix());
    return $html;
    }

sub calcule_prix {
    my $chemises = param("nombre_chemises") || 0 ;
    my $chaussures = param("nombre_chaussures") || 0;
    return sprintf("%.2f&nbsp;euros", $chemises * 33 + $chaussures *
49.99);
    }

sub vers_doc { submit (-NAME => ".Etat", -VALUE => shift) }



A friend ask me to do him a website of paintings.
I try to make this program work and will modify it for paintings.

je poste aussi sur comp.lang.perl.misc

et apres le formulaire de carte bleu
il indique 0 euros de commande
je ne comprends pas

aidez moi
je vous remercie par avance



Avatar
john.swilting
john.swilting wrote:

john.swilting wrote:

j ai repris l exemple du cook book perl
chapitre 19.14
et il ne marche pas bien
j ai une erreur
pas d 'ecran pour carte ligne 24

je ne suis pas tres fort en perl
pouvez vous m aider
help help help
je vous remercie par avance

#!/usr/bin/perl -w

use strict;
use CGI qw(:standard escapeHTML);
use CGI::Carp qw(fatalsToBrowser);

my %Etats;

my $Ecran_actuel;

## hachage des documents et des fonctions

%Etats = (
'Défaut' =>&document_de_garde,
'Chemises' =>&chemise,
'Chaussures' =>&chaussures,
'Passage à la caisse' =>&passage_a_la_caisse,
'Carte' =>&carte_de_credit,
'Commande' =>&commande,
'Annnulation' =>&document_de_garde,
);

$Ecran_actuel = param(".Etat") || "Défaut";
die "Pas d'écran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};

## engendre le document courant

en_tete_standard();

while ( my ($nom_ecran,$fonction) = each %Etats){
$fonction->($nom_ecran eq $Ecran_actuel);
}

pied_de_page_standard();
exit;

########################################################################
## fonctions d'en-tete, de pied de page, de menu #######################
########################################################################

sub en_tete_standard {
print header(),
start_html(-Title => "Chemises", -BGCOLOR=>"White");
print start_form(); ##start_multipart_form()
##s'il faut exporter des fichiers sur le reseau
}

sub pied_de_page_standard { print end_form(), end_html() }

sub menu_boutique {
print p(defaults("Vider mon caddie"),
vers_doc("Chemises"),
vers_doc("Chaussures"),
vers_doc("Passage à la caisse"));
}

#######################################################################
## sous-programmes pour chaque écran ##################################
#######################################################################


## le document par defaut

sub document_de_garde {
my $actif = shift;
return unless $actif;

print "<H1>salut!</H1>n";
print "bienvenue dans notre magasin d'habillement!n",
print "faites votre choix dans le menu ci-dessous.n";

menu_boutique();
}

## document à partir duquel commander une chemise

sub chemise {
my $actif = shift;
my @tailles = qw(XL L M S);
my @couleurs = qw(Noire Blanche);

my ($taille, $couleur, $compte) >> (param("taille_chemise"), param("couleur_chemise"),
param("nom_chemises"));

##verification des donnees reçus
if ($compte) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep {$_ eq $taille } @tailles;
param("couleur_chemise" , $couleur);
param("taille_chemise" , $taille);
}

unless ( $actif ) {
print hidden("taille_chemise") if $taille;
print hidden("couleur_chemise") if $couleur;
print hidden("nombre_chemises") if $compte;
return;
}

print h1("chemises");
print p("quelle chemise! cette petite merveille estn","livree avec
toutes les options.doublure de luxe,n",
"finitions avec toutes les options. doublure de
luxen","finitions en
coton, et un col à en avoir lesn",
"Prix unitaire: 33.00&nbsp;euros.");

print h2("options");
print p("nombre ?",textfield("nombre_chemises"));
print p("taille ?",popup_menu("taille_chemise",@tailles ),
"couleur ?", popup_menu("couleur_chemise",@couleurs ));

menu_boutique();

}


## document à partir duquel commander des chaussures

sub chaussures {
my $actif = shift;
my @tailles = qw(35 36 37 38 39 40 41 42 43 44 45 46 47 48);
my @couleurs = qw(Ivoire Noisette Ebene);

my ( $taille, $couleur, $compte) >> (param("taille_chaussure"), param("couleur_chaussures"),
param("nombre_chaussures"));

##verification des donnees reçus
if ( $compte ) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep { $_ eq $taille } @tailles;
param("couleur_chaussures",$couleur);
param("taille_chaussures", $taille);
}


unless ( $actif ) {
print hidden("taille_chaussures") if $taille;
print hidden("couleur_chaussures") if $couleur;
print hidden("nombre_chaussures") if $compte;
return;
}

print h1("chaussures");
print p("vous ne serez jamais aussi elegant que chausse de
cesn", "souliers magnifiquesn",
"prix unitaires: 49.99&nbsp;euros.");

print h2("options");
print p("nombre de paires?", textfield("nombre_chaussures"));
print p("pointure?", popup_menu("taille_chaussures",@tailles));
print p("teinte?",popup_menu("couleur_chaussures",@couleurs));

menu_boutique();

}

## document qui affiche la commande actuelle en attente de comfirmation

sub passage_a_la_caisse {
my $actif = shift;

return unless $actif;

print h1("confirmation de la commande");
print p("vous avez commande&nbsp;:");
print texte_commande();
print p("est-ce correct?nn",
"choissisez «Carte» pour regler cesn",
"objets, ou «chemises» oun",
"«chaussures» pour continuer vos courses.");
print p(vers_doc("carte"),
vers_doc("chemises"),
vers_doc("chaussures"));

}

## document pour ollecter les informations relatives à la carte de credit

sub carte_de_credit {
my $actif = shift;
my @gadgets = qw(Nom Adresse1 Adresse2 Ville Code_postal Pats
Telephone
Carte Expire_en);

unless ( $actif ) {
print map { hidden($_) } @gadgets;
return;
}

print pre ( p ("Nom: ",textfield("Nom")),
p ("Adresse: ",textfield("Adresse1")),
p (" ",textfield("Adresse2")),
p ("Ville: ",textfield("Ville")),
p ("Code Postal: ",textfield("Code_postal")),
p ("Pays: ",textfield("Pays")),
p ("Telephone: ",textfield("Teléphone")),
p ("Carte numéro: ",textfield("Carte")),
p ("Expire en: ",textfield("Expire_en")));

print p ( "Selectionner «Commande» pour commandern",
"ces objets. selectionner «Annulation»n");

print p ( vers_doc("Commande"), vers_doc("Annulation"));
}

## document pour terminer une commande

sub commande {
my $actif = shift;

unless ( $actif) {
return;
}

## ici on verifie les valeurs donnees pour la carte de credit

print h1("Commandé&nbsp;!");
print p("vous avez commandé ce qui suit:");
print texte_commande();

print p (defaults ("Retour au debut"));
}

## renvoie de l ' HTML pour la commande actuelle("vous avez ommande")

sub texte_commande {
my $html = '';

if ( param ("nombre_chemises")) {
$html .= p("vous avez commandé" , param("nombre_chemises"),
"chemises de taille", param("taille_chemise"),
" et de couleur " , param("couleur_chemise"),",");
}
if ( param ("nombre_chaussures")) {
$html .= p("vous avez comandé",param("nombre_chaussures"),
"paires de chaussures de pointures" ,
param("taille_chaussures"),
" et de teinte ", param ("couleur_chaussures"),".");
}
$html = p("Rien!") unless $html;
$html .= p("pour un prix total de ",calcule_prix());
return $html;
}

sub calcule_prix {
my $chemises = param("nombre_chemises") || 0 ;
my $chaussures = param("nombre_chaussures") || 0;
return sprintf("%.2f euros", $chemises * 33 + $chaussures * 49.99);
}

sub vers_doc { submit (-NAME => ".Etat", -VALUE => shift) }


john.swilting wrote:

RedGrittyBrick wrote:

john.swilting wrote:
I started again the  example of cook book perl
chapter 19.14
He(It) does not walk(work) correctly can you m help to find the error
The error which appears it is Not of ecran for card


You have used google to translate your error message from French into
English. You shouldn't do this. See below.

at /var/www/cgi-bin/vente.cgi line 24

help help help
i am french
i am beginner of perl
help help help

#!/usr/bin/perl -w

use strict;
use CGI qw(:standard escapeHTML);
use CGI::Carp qw(fatalsToBrowser);

my %Etats;

my $Ecran_actuel;

## hachage des documents et des fonctions

%Etats = (
'Défaut' =>&document_de_garde,
'Chemises' =>&chemise,
'Chaussures' =>&chaussures,
'Passage à la caisse' =>&passage_a_la_caisse,
'Carte' =>&carte_de_credit,
'Commande' =>&commande,
'Annnulation' =>&document_de_garde,
);

$Ecran_actuel = param(".Etat") || "Défaut";
die "Pas d'écran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};


^^^^^^
That line is printing your error message - some French equivalent of
"Not of ecran for card" which suggests that the user entered some
variation of 'Carte.' or 'carte' or ' Carte'.

I'd change that line to
die "Pas d'écran pour '$Ecran_actuel'" unless $Etats{$Ecran_actuel};
so that you can clearly see leading spaces and other punctuation.

<rest of program snipped>


I have correct the problemes of syntax
But after the form card(map) he indicates me 0 euro of command(order)
I do not understand


help help

#!/usr/bin/perl -w

use strict;
use CGI qw(:standard escapeHTML);
use CGI::Carp qw(fatalsToBrowser);

my %Etats;

my $Ecran_actuel;

## hachage des documents et des fonctions

%Etats = (
'Défaut' =>&document_de_garde,
'Chemises' =>&chemise,
'Chaussures' =>&chaussures,
'Passage à la caisse' =>&passage_a_la_caisse,
'Carte' =>&carte_de_credit,
'Commande' =>&commande,
'Annnulation' =>&document_de_garde,
);

$Ecran_actuel = param(".Etat") || "Défaut";
die "Pas d'écran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};

## engendre le document courant

en_tete_standard();

while ( my ($nom_ecran,$fonction) = each %Etats){
$fonction->($nom_ecran eq $Ecran_actuel);
}

pied_de_page_standard();
exit;

########################################################################
## fonctions d'en-tete, de pied de page, de menu #######################
########################################################################

sub en_tete_standard {
print header(),
start_html(-Title => "Chemises", -BGCOLOR=>"White");
print start_form(); ##start_multipart_form()
##s'il faut exporter des fichiers sur le reseau
}

sub pied_de_page_standard { print end_form(), end_html() }

sub menu_boutique {
print p(defaults("Vider mon caddie"),
vers_doc("Chemises"),
vers_doc("Chaussures"),
vers_doc("Passage à la caisse"));
}

#######################################################################
## sous-programmes pour chaque écran ##################################
#######################################################################


## le document par defaut

sub document_de_garde {
my $actif = shift;
return unless $actif;

print "<H1>salut!</H1>n";
print "bienvenue dans notre magasin d'habillement&nbsp;!n",
print "faites votre choix dans le menu ci-dessous.n";

menu_boutique();
}

## document à partir duquel commander une chemise

sub chemise {
my $actif = shift;
my @tailles = qw(XL L M S);
my @couleurs = qw(Noire Blanche);

my ($taille, $couleur, $compte) >> (param("taille_chemise"), param("couleur_chemise"),
param("nom_chemises"));

##verification des donnees reçus
if ($compte) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep {$_ eq $taille } @tailles;
param("couleur_chemise" , $couleur);
param("taille_chemise" , $taille);
}

unless ( $actif ) {
print hidden("taille_chemise") if $taille;
print hidden("couleur_chemise") if $couleur;
print hidden("nombre_chemises") if $compte;
return;
}

print h1("chemises");
print p("quelle chemise! cette petite merveille estn","livree avec
toutes les options.doublure de luxe,n",
"finitions avec toutes les options. doublure de
luxen","finitions en
coton, et un col à en avoir lesn",
"Prix unitaire: 33.00 euros.");

print h2("options");
print p("nombre ?",textfield("nombre_chemises"));
print p("taille ?",popup_menu("taille_chemise",@tailles ),
"couleur ?", popup_menu("couleur_chemise",@couleurs ));

menu_boutique();

}


## document à partir duquel commander des chaussures

sub chaussures {
my $actif = shift;
my @tailles = qw(35 36 37 38 39 40 41 42 43 44 45 46 47 48);
my @couleurs = qw(Ivoire Noisette Ebene);

my ( $taille, $couleur, $compte) >> (param("taille_chaussure"), param("couleur_chaussures"),
param("nombre_chaussures"));

##verification des donnees reçus
if ( $compte ) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep { $_ eq $taille } @tailles;
param("couleur_chaussures",$couleur);
param("taille_chaussures", $taille);
}


unless ( $actif ) {
print hidden("taille_chaussures") if $taille;
print hidden("couleur_chaussures") if $couleur;
print hidden("nombre_chaussures") if $compte;
return;
}

print h1("chaussures");
print p("vous ne serez jamais aussi elegant que chausse de
cesn", "souliers magnifiquesn",
"prix unitaires: 49.99 euros.");

print h2("options");
print p("nombre de paires?", textfield("nombre_chaussures"));
print p("pointure?", popup_menu("taille_chaussures",@tailles));
print p("teinte?",popup_menu("couleur_chaussures",@couleurs));

menu_boutique();

}

## document qui affiche la commande actuelle en attente de comfirmation

sub passage_a_la_caisse {
my $actif = shift;

return unless $actif;

print h1("confirmation de la commande");
print p("vous avez commande:");
print texte_commande();
print p("est-ce correct?nn",
"choissisez «Carte» pour regler cesn",
"objets, ou «chemises» oun",
"«chaussures» pour continuer vos courses.");
print p(vers_doc("Carte"),
vers_doc("Chemises"),
vers_doc("Chaussures"));

}

## document pour ollecter les informations relatives à la carte de credit

sub carte_de_credit {
my $actif = shift;
my @gadgets = qw(Nom Adresse1 Adresse2 Ville Code_postal Pats
Telephone
Carte Expire_en);

unless ( $actif ) {
print map { hidden($_) } @gadgets;
return;
}

print pre ( p ("Nom&nbsp;:              ",textfield("Nom")),
p ("Adresse&nbsp;:          ",textfield("Adresse1")),
p ("                         ",textfield("Adresse2")),
p ("Ville&nbsp;:            ",textfield("Ville")),
p ("Code Postal&nbsp;:      ",textfield("Code_postal")),
p ("Pays&nbsp;:             ",textfield("Pays")),
p ("Telephone&nbsp;:        ",textfield("Teléphone")),
p ("Carte numéro&nbsp;:     ",textfield("Carte")),
p ("Expire en&nbsp;:        ",textfield("Expire_en")));

print p ( "Selectionner «Commande» pour commandern",
"ces objets. selectionner «Annulation»n");

print p ( vers_doc("Commande"), vers_doc("Annulation"));
}

## document pour terminer une commande

sub commande {
my $actif = shift;

unless ( $actif) {
return;
}

## ici on verifie les valeurs donnees pour la carte de credit

print h1("Commandé&nbsp;!");
print p("vous avez commandé ce qui suit:");
print texte_commande();

print p (defaults ("Retour au debut"));
}

## renvoie de l ' HTML pour la commande actuelle("vous avez ommande")

sub texte_commande {
my $html = '';

if ( param ("nombre_chemises")) {
$html .= p("vous avez commandé" , param("nombre_chemises"),
"chemises de taille", param("taille_chemise"),
" et de couleur " , param("couleur_chemise"),",");
}
if ( param ("nombre_chaussures")) {
$html .= p("vous avez comandé",param("nombre_chaussures"),
"paires de chaussures de pointures" ,
param("taille_chaussures"),
" et de teinte ", param ("couleur_chaussures"),".");
}
$html = p("Rien!") unless $html;
$html .= p("pour un prix total de ",calcule_prix());
return $html;
}

sub calcule_prix {
my $chemises = param("nombre_chemises") || 0 ;
my $chaussures = param("nombre_chaussures") || 0;
return sprintf("%.2f&nbsp;euros", $chemises * 33 + $chaussures *
49.99);
}

sub vers_doc { submit (-NAME => ".Etat", -VALUE => shift) }



A friend ask me to do him a website of paintings.
I try to make this program work and will modify it for paintings.

je poste aussi sur comp.lang.perl.misc

et apres le formulaire de carte bleu
il indique 0 euros de commande
je ne comprends pas

aidez moi
je vous remercie par avance
c ok maintenant


perl est un language tres permissif
c bien est mal