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

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Suivante
Auteur Sujet :

[perl] formulaire

n°1742025
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 15:43:20  profilanswer
 

Reprise du message précédent :

Citation :

les $$ d'apres les cours, déréférence.. et non référence...

Oui, mais quand on dereference quelque chose, encore faudrait il l'avoir defini comme une reference.
La, sans le code de variables_formulaire sous les yeux, personne ne peut savoir que tu as rempli $warningValue et $criticalValue par des references, surtout que dans ce contexte, ça ne s'impose pas.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
mood
Publicité
Posté le 05-06-2008 à 15:43:20  profilanswer
 

n°1742031
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 15:47:16  profilanswer
 

anapajari a écrit :

Mais vire moi ces @ devant tes $_[.] !!!  
A chaque itération du foreach, ton $_ est un pointeur sur un tableau .
Pour le déréférencer, il vaut mieux utiliser $ ( comme tu le dit toi même ) et non @.
Par ailleurs, je t'ai dit de nommer tes variables ça serait quand même plus clair!

Code :
  1. foreach my $v(@data){
  2.  print $$v[0], ..., $$v[6];
  3.  # autre écriture pour bien voir la référence:
  4.  print  $v->[0], ... , $v->[6];
  5. }



Je lui avais laissé le choix entre trois ecritures

Code :
  1. #trois manieres equivalentes d'acceder aux données, utiliser celle qui te convient le mieux
  2. foreach (@data) {
  3.     foreach (@$_) {
  4.         print $_, "  ";
  5.     }
  6.     print "\n";
  7. }
  8. foreach (@data) {
  9.     print $_->[0],"  ",$_->[1],"  ",$_->[2],"  ",$_->[3],"  ",$_->[4],"  ",$_->[5],"  ",$_->[6],"\n";
  10. }
  11. foreach (@data) {
  12.     print @$_[0],"  ",@$_[1],"  ",@$_[2],"  ",@$_[3],"  ",@$_[4],"  ",@$_[5],"  ",@$_[6],"\n";
  13. }

Bon, la premiere methode n'est pas equivalente, elle est nettement plus generique, mais moins lisible au néophyte, et moins utile ici, pour acceder a un champ precis.
Mais de toute façon, vu que la elle est sortie de la boucle apparement...
A+,


Message édité par gilou le 05-06-2008 à 15:49:30

---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742032
yuxi
Posté le 05-06-2008 à 15:47:33  profilanswer
 


ma page avec l'envoie de mail qui ne fonctionne pas...
 

Code :
  1. sub envoyer_mail_si_besoin(@) {
  2. my $ServeurSMTP = "smtp.wanadoo.fr";
  3. my $mailfrom = 'camaya@wanadoo.fr';
  4. my $mailto = 'candy.sc@wanadoo.fr';
  5. my $readit = 0;
  6. my $endtable = 0;
  7. my $index = 0;
  8. my $vector = ["", "", "", "", "", "", ""]; #$vector est une reference a un array anonyme
  9. my $startvector = 0;
  10. my @data;
  11. my @fichierLicence = @_;
  12. foreach (@fichierLicence) {
  13.         if (/\<!-- dynamic table --\>/) {
  14.         $readit = 1;
  15.     }
  16.     if ($readit) {
  17.         if (/\<\/table\>/) {
  18.             $endtable++;
  19.             if ($endtable == 2) {
  20.                 $readit = 0;
  21.                 next;
  22.             }
  23.         }
  24.         #si on arrive ici, on est dans la zone des données.
  25.         if (/\<tr class=/) {
  26.          $vector = ["", "", "", "", "", "", ""];
  27.          $startvector = 1;
  28.          $index = 0;
  29.          next;
  30.         }
  31.         if (/\<td\>([^<]*)\<\/td\>/) {
  32.             $vector->[$index] = $1;
  33.             $index++;
  34.             next;
  35.         }
  36.         if (/\<td align='right'\>([^<]*)\<\/td\>/) {
  37.             $vector->[$index] = $1;
  38.             $index++;
  39.             next;
  40.         }
  41.         if (/\<\/tr>/ and $startvector and not $endtable) {
  42.             push @data, $vector;
  43.             $startvector = 0;
  44.         }
  45.     }
  46. }
  47. my $var4 = @$_[6];
  48. foreach (@data) {
  49.    
  50.  print @$_[0],"  ",@$_[1],"  ",@$_[2],"  ",@$_[3],"  ",@$_[4],"  ",@$_[5],"  ",@$_[6],"\n";
  51.  }
  52. print "\n\n";
  53. my ($warningValue, $criticalValue) = variables_formulaire(); 
  54.  
  55. print $$warningValue.' '.$$criticalValue."\n";
  56. print "\n\n";
  57. my $var2 = $$criticalValue;
  58. my $var = $$warningValue ;
  59. my $var3 = "80";
  60. if ($var < $var3) {
  61.  print "le niveau critique $var est inferieur a $var3 ! \n\n"}
  62. else {
  63.  print "le niveau critique $var2 est superieur a $var3 ! \n\n"}
  64. if ($var > $var4) {
  65.  MIME::Lite->send("smtp", $ServeurSMTP, Timeout=>60);
  66.  my $msg = new MIME::Lite (
  67.             From    =>$mailfrom,
  68.             To      =>$mailto,         
  69.             Subject =>'ATTENTION',
  70.             Type    =>'TEXTE', 
  71.             Data    =>"petit test... realise par No Future ! Attention vous avez atteint le niveau d'alerte actuellement de 0%! Votre pourcentage de licence utilise est de : @$_[6] %"
  72.   );
  73.  $msg -> send;
  74.  print "message ien envoye ! \n\n";
  75.  }


 
voilà sub variables_formulaire :

Code :
  1. ....
  2. print "\n\n";
  3. my $browser = new LWP::UserAgent(keep_alive=>1);
  4. $browser->credentials($adipport, '', $domainelogin, $pass);
  5. $browser ->cookie_jar({});
  6. $| = 1; #autoflush
  7. my $request = new HTTP::Request( GET => $url ); #un seul http://
  8. my $response = $browser->request($request);
  9. if ($response->is_success) {
  10.   my $headers = $response->headers();
  11. } else {
  12.   print "Erreur:".$response->status_line."\n";
  13. }
  14. my $warningValue;
  15. my $criticalValue;
  16. $_ = $response->content;
  17. m/<input.*?name="thresholdLicenseUsageWarning".*?value="(.*?)"/si;
  18. $warningValue = $1;
  19. m/<input.*?name="thresholdLicenseUsageCritical".*?value="(.*?)"/si;
  20. $criticalValue = $1;
  21. print "le niveau d'alerte est a : ".$warningValue." %\n";
  22. print "le niveau critique est fixe a : ".$criticalValue." %\n";
  23. print "\n\n";
  24.  
  25.   return (\$warningValue, \$criticalValue);
  26. }

n°1742036
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 15:52:11  profilanswer
 

Bon déja la:

Code :
  1. print "le niveau d'alerte est a : ".$warningValue." %\n";
  2. print "le niveau critique est fixe a : ".$criticalValue." %\n";
  3. print "\n\n";
  4.   return (\$warningValue, \$criticalValue);

Tu fais
  return ($warningValue, $criticalValue);
Et dans l'appelante, tu remplace les $$ par des $ ca evitera de se trainer des references inutiles.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742041
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 15:54:36  profilanswer
 

d'autre part, tu n'as toujours pas remplace les expressions regulieres par des expressions regulieres valables:

m/\<input.*?name=\"thresholdLicenseUsageWarning\".*?value=\"(.*?)\"/si;


Si celles que tu as marchent, c'est pour de mauvaises raisons.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742044
yuxi
Posté le 05-06-2008 à 15:56:32  profilanswer
 

j'avais testé avec data, et il me mettait un message d'erreur.

n°1742048
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 16:00:11  profilanswer
 

Enfin, la ligne 54  

my $var4 = @$_[6];


est completement fausse, puisqu'on est sorti de la boucle du foreach.
Donc c'est pas surprenant que ca rale au niveau de la ligne qui va vouloir evaluer $var4
c'est a dire la ligne 77, ou tu as le probleme, je crois.

if ($var > $var4) {


A+,
 


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742050
yuxi
Posté le 05-06-2008 à 16:00:37  profilanswer
 

j'ai modifie, comme tu m'as dit, mon foreach en lui mettant un nom :
 

Code :
  1. foreach my $citrix(@data) {
  2.    
  3.  print $citrix->[0],"  ",$citrix->[1],"  ",$citrix->[2],"  ",$citrix->[3],"  ",$citrix->[4],"  ",$citrix->[5],"  ",$citrix->[6],"\n";
  4.  }


 
mais lorsque j'utilise la variable dans mon if :
 

Code :
  1. if ($var > $citrix->[6])
  2. #j'ai teste $$citrix[6].. et d'autres...


 
mais voilà il me demande un package name, donc normalement si j'ai bien compris un my... ;
 

Code :
  1. Global symbol "$citrix" requires explicit package name at tab.pl line 88.
  2. Compilation failed in require at connexweb.pl line 10.

n°1742053
yuxi
Posté le 05-06-2008 à 16:01:35  profilanswer
 

j'ai ecris trop vite alors
 
il faudrait que je l'inclus dans le foreach ?  

n°1742059
yuxi
Posté le 05-06-2008 à 16:05:16  profilanswer
 

tiens j'ai fait ça :
 

Code :
  1. if ($var > $$citrix->[6]) {


 
et il me répond :
 

Code :
  1. Not a SCALAR reference at tab.pl line 87.


 
tu crois que les valeur du tableau $citrix (@data) sont restes de type chaine ?

mood
Publicité
Posté le 05-06-2008 à 16:05:16  profilanswer
 

n°1742063
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 16:09:55  profilanswer
 

Non, ce n'est pas a ce niveau la.
 
Déja, il n'est pas clair que tu parses ligne a ligne le fichier de license.
Tu passes quoi comme donnée a envoyer_mail_si_besoin?
 
Ensuite, quand tu as parse un fichier de license, donc une fois la fin du foreach atteinte
tu recuperes tes valeurs seuil:

Code :
  1. my ($warningValue, $criticalValue) = variables_formulaire();
  2. print $warningValue.' '.$criticalValue."\n";
  3. print "\n\n";

et la, tu fais un  

Code :
  1. foreach (@data) {
  2. if ($warningValue< 80) {
  3. print "le niveau critique $warningValue est inferieur a 80! \n\n"}
  4. else {
  5. print "le niveau critique $criticalValue est superieur a 80 ! \n\n"}
  6. if ($warningValue > @$_[6]) {
  7. MIME::Lite->send("smtp", $ServeurSMTP, Timeout=>60);
  8. my $msg = new MIME::Lite (
  9.             From    =>$mailfrom,
  10.             To      =>$mailto,       
  11.             Subject =>'ATTENTION',
  12.             Type    =>'TEXTE',
  13.             Data    =>"petit test... realise par No Future ! Attention vous avez atteint le niveau d'alerte actuellement de 0%! Votre pourcentage de licence utilise est de : @$_[6] %"
  14.   );
  15. $msg -> send;
  16. print "message ien envoye ! \n\n";
  17. }
  18. }


dans lequel tu fais tes tests, et envoies le mail le cas echeant.Si toutes les données ont été mises dans @data, c'est pour s'en servir.Bon, la j'ai juste inséré et coupé-collé ton code en modifiant les $vars, donc ca marche probablement pas completement, mais tu vois l'idée.
A+,


Message édité par gilou le 05-06-2008 à 16:16:35

---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742067
yuxi
Posté le 05-06-2008 à 16:11:37  profilanswer
 

j'ai dit une grosse betise, c'est la syntaxe qui n'est pas bonne
 
desole..

n°1742073
yuxi
Posté le 05-06-2008 à 16:15:26  profilanswer
 

euh, j'aurais deux fois foreach data ?
 
dans mon premier je dois avoir 7 colonnes, mais il n'y a que la dernière qui m'intéresse, c'est pour cela, que je cherche a utiliser le $citrix->[6]..
 
car je vais devoir la comparé avec les deux seuils : $warningValue et $criticalValue
 
si elle est supérieure a 75 j'envoie un mail... et si elle est supérieure à 90 envoie un autre mail... enfin bref...

n°1742075
yuxi
Posté le 05-06-2008 à 16:19:04  profilanswer
 

[cpp]
use warnings;
use strict;
use strict "vars";
use MIME::Lite;
use Encode;
 
require "subform.pl";
 
sub envoyer_mail_si_besoin(@) {
 
 
my $ServeurSMTP = "smtp.wanadoo.fr";
my $mailfrom = 'cam@wanadoo.fr';
my $mailto = 'moi@wanadoo.fr';
 
my $readit = 0;
my $endtable = 0;
my $index = 0;
my $vector = ["", "", "", "", "", "", ""]; #$vector est une reference a un array anonyme
my $startvector = 0;
my @data;
my @fichierLicence = @_;
 
foreach (@fichierLicence) {
 
        if (/\<!-- dynamic table --\>/) {
        $readit = 1;
    }
    if ($readit) {
        if (/\<\/table\>/) {
            $endtable++;
            if ($endtable == 2) {
                $readit = 0;
                next;
            }
        }
        #si on arrive ici, on est dans la zone des données.
        if (/\<tr class=/) {
         $vector = ["", "", "", "", "", "", ""];
         $startvector = 1;
         $index = 0;
         next;
        }
        if (/\<td\>([^<]*)\<\/td\>/) {
            $vector->[$index] = $1;
            $index++;
            next;
        }
        if (/\<td align='right'\>([^<]*)\<\/td\>/) {
            $vector->[$index] = $1;
            $index++;
   
 
            next;
        }
        if (/\<\/tr>/ and $startvector and not $endtable) {
            push @data, $vector;
            $startvector = 0;
        }
    }
}
 
foreach my $citrix(@data) {
     
  print $citrix->[0],"  ",$citrix->[1],"  ",$citrix->[2],"  ",$citrix->[3],"  ",$citrix->[4],"  ",$citrix->[5],"  ",$citrix->[6],"\n";
  }
 
print "\n\n";
 
my ($warningValue, $criticalValue) = variables_formulaire();  
   
print $$warningValue.' '.$$criticalValue."\n";
print "\n\n";
 
foreach (@data) {
my $var2 = $$criticalValue;
my $var = $$warningValue ;
my $var3 = "80";
my $cit = @$_[6];
if ($var < $var3) {
   
  print "le niveau critique $var est inferieur a $var3 ! \n\n"}
else {  
  print "le niveau critique $var2 est superieur a $var3 ! \n\n"}
 
if ($var > $cit) {
  MIME::Lite->send("smtp", $ServeurSMTP, Timeout=>60);
  my $msg = new MIME::Lite (
            From    =>$mailfrom,  
            To      =>$mailto,            
            Subject =>'ATTENTION',
            Type    =>'TEXTE',    
            Data    =>"petit test... realise par No Future ! Attention vous avez atteint le niveau d'alerte actuellement de 0%! Votre pourcentage de licence utilise est de : @$_[6] %"
   );
  $msg -> send;
  print "Le message a été bien envoye ! \n\n";
  }  
}  
}
 
Mon code a marche mais a envoyé un mail par ligne... en fait c'est logique... car les licences sont differentes... mais ça fait beaucoup nan ?

n°1742076
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 16:19:44  profilanswer
 

yuxi a écrit :

euh, j'aurais deux fois foreach data ?
 
dans mon premier je dois avoir 7 colonnes, mais il n'y a que la dernière qui m'intéresse, c'est pour cela, que je cherche a utiliser le $citrix->[6]..
 
car je vais devoir la comparé avec les deux seuils : $warningValue et $criticalValue
 
si elle est supérieure a 75 j'envoie un mail... et si elle est supérieure à 90 envoie un autre mail... enfin bref...

Si je comprend bien, ce serait pas plutot:
la valeur courante est $citrix->[6]
Si elle est supérieure a $warningvalue, envoi d'un mail
Si elle est supérieure a $criticalvalue, envoi d'un autre mail
Ca semblerait logique.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742078
yuxi
Posté le 05-06-2008 à 16:21:59  profilanswer
 

oui c'est ça, mais je n'ai pas fait la syntaxe manque de données valables pour tester... toutes mes données sont a zero..

n°1742080
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 16:24:52  profilanswer
 

Citation :

Mon code a marche mais a envoyé un mail par ligne... en fait c'est logique... car les licences sont differentes... mais ça fait beaucoup nan ?


En bien alors, tu fais comme suit:
Tu crées un message warning vide et un message critique vide
tu crees un flag d'envoi de mail warning
tu crees un flag de d'envoi de mail critique.
dans la boucle foreach(@data) tu ajoutes les messages necessaires au message warning et au message critique.
Apres la fin de la boucle, tu regarde les flags, et selon leur valeur, tu vas envoyer 0 mail, un mail warning contenant toute la liste des seuils warnings dépassés, et/ou un mail warning contenant toute la liste des seuils critiques depasses.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742081
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 16:26:50  profilanswer
 

yuxi a écrit :

oui c'est ça, mais je n'ai pas fait la syntaxe manque de données valables pour tester... toutes mes données sont a zero..

Citation :

Déja, il n'est pas clair que tu parses ligne a ligne le fichier de license.  
Tu passes quoi comme donnée a envoyer_mail_si_besoin?


Et si tes données sont a 0, les seuils ne sont pas dépassés, et donc il ne devrait pas y avoir envoi de mail, donc tes tests de seuils ne sont peut etre pas tous bons :whistle:  
A+,
 


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742083
gilou
Modérateur
Modosaurus Rex
Posté le 05-06-2008 à 16:30:29  profilanswer
 

Bon, sur ce je vais tondre mon gazon.
A+,


---------------
There's more than what can be linked! --  Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- Il ne faut plus dire Sarkozy, mais Sarkozon -- (╯°□°)╯︵ ┻━┻
n°1742088
yuxi
Posté le 05-06-2008 à 16:33:11  profilanswer
 

oui je sais, mais le système fonctionne, il compare ligne par ligne, donc si jamais y'en a un qui est valable, il ne me l'affichera pas...
 
donc, voilà merci, ce sera tout pour moi, mon projet est terminé, enfin je l'espere.
 
@+

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Suivante

Aller à :
Ajouter une réponse
 

Sujets relatifs
[PHP/MYSQL] Formulaire auto-updaté-Résolu- Formulaire en fin de page...qui ne s'affiche pas
Menu déroulant sous forme de formulaire pour firefoxpb formulaire html recuperer données avc perl/cgi ou c++
Formulaire Perl/CGI générant du XMLproblème avec mon formulaire perl/cgi (debutant)
[PERL] [CGI] Recherche a partir de données d'un formulaireRecup. de données avec un formulaire puis traitement avec Perl
[Perl] Probleme de formulaire en post[CGI / Perl / ??] Récupérer l'IP dans un formulaire Perl
Plus de sujets relatifs à : [perl] formulaire


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)