| mercredi 28 mars 2001 - 23h52 bonsoir, tout d'abord je trouve dommage que vous vous fassiez rare sur le forum frederic, mais je pense qu'une surcharge de travail vous y empèche. Voila, je viens d'essayer de faire un cgi d'envoie de mail, avec l'aide de vos cours et des livres que j'ai pu trouver sur perl, mais j'obtient un erreur de mon serveur, voici ce que j'ai inscrit, si vous pouviez me dire ou est mon erreur. ----------------------------------------------- #!/usr/bin/perl -w ########################## # essai mail1 # # ########################## sub envoyer_mail { my ($vers , $depuis , $sujet , @corps)=@_; ################################### #serveur courrier ###################### my $sendmail="/usr/sbin/sendmail"; open (Mail, "|$sendmail") || die"impossible de lancer sendmail: $!"; print Mail <<FIN_DE_ENTETE; From: $depuis To: $vers Subject: $sujet FIN_DE_ENTETE foreach (@corps){ print Mail " $_\n"; } close (Mail); } ################## #envoye du mail ################## print header; my $retour=param("adr_retour"); if (! defined $retour or! $retour) { print "entrez votre e-mail<p>"; exit; } my $sujet=param("sujet"); if (! define $sujet or! $sujet) { print " indiquez un sujet<p>"; exit; } ######################## #envoyer au destinataire ######################## envoyer_mail ('moi@mon_site.com', param ($retour), param ($sujet), param ($corps)); print " message envoyé "; ####################### #end ####################### -------------------------------------------- Je voudrais que l'e-mail se configure dans la page html, comme formail-vf par exemple, que dois je remplacer pour faire cela? Merci de votre aide cordialement
| |
| jeudi 29 mars 2001 - 18h05 bonjour, une autre question concernant les scripts, j'ai remarqué qu'il y avait des espaces dans les cgi, entre la marge et le debut du code, à quoi sert cette marge et est elle importante merci
| |
| vendredi 30 mars 2001 - 00h24 Bonjour, Je n'ai pas testé, mais je vois bien votre erreur provenir du fait que vous n'envoyez pas d'entete avant de faire un print avec un print header(); par exemple. Pour pouvoir le paramétrer en indiquant l'email dans la page html il vous suffit de récupérer cette valeur a l'aide de param("nomduchamp") et de la mettre a la place de votre email. Les espaces dans les CGI servent simplement a les rendre plus lisible car un cgi comme celui qui se trouve ci dessus c'est pas super lisible. A part faire joli ca n'a aucune autre fonction :-)
| |
| vendredi 30 mars 2001 - 01h53 bonsoir frederic, je n'ai pas mis d'entete car j'ai lu qu'un print header donnait une fonction et evitait un print html\n'; par exemple. Je me demande si les livres de cgi et perl n'induisent pas en erreur parfois. cordialement
| |
| samedi 31 mars 2001 - 07h11 bonjour, dans la serie des questions qui peuvent paraitre idiote, je voudrais egalement savoir si l'espace entre les lettres sont important, est ce que ca: my $retour=param("adr_retour"); est egal à ca: my$retour = param ("adr_retour"); ou ...( " adr_retour " ) par exemple. Il est frustant d'avoir des idées de cgi et de ne pas pouvoir arriver à les mettres en place et les faire fonctionner, qu'il est difficile de débuter. Une idée qui pourrait etre bien, mais peut etre pas pour vous frederic, c'est la coorection des cgi ecrit avec l'aide de vos cours et de ce que nous avons pu trouver à droite et à gauche, des petit fichier zip que vous pourriez recevoir par mail, mais la je pense que je m'égard, je pense que votre emploi du temps ne vous permet pas ce genre de choses. cordialement
| |
| samedi 31 mars 2001 - 14h46 Bonjour, oops je n'avais pas vu que vous aviez mis un header. Le probleme vient donc d'ailleurs. Pour le trouver vous pouvez vérifier la syntaxe du script en l'exécutant en ligne de commande, en tapant perl nomduscript.pl. Si il y a une erreur il vous indiquera plus ou moins son emplacment. Dans le cas présent, j'ai recopié ce que vous aviez mis dans le forum et en l'exécutant il donne l'erreur : perl test.pl Can't find string terminator "FIN_DE_ENTETE" anywhere before EOF at test.pl line 17. Le probleme est qu'il y a un espace sur la ligne après FIN_DE_ENTETE Le probleme suivant viendra du fait que vous utilisez des fonctions (header, param) sans dire d'ou elles proviennent. Perl ne peux donc pas les utiliser. Pour qu'il puisse les utiliser il faut lui dire qu'elles viennent du module CGI.pm en indiquant comme 2 ou 3e ligne : use CGI qw/:standard/; Concernant la question suivante, certains espaces ont de l'importance alors que d'autres n'en ont absolument pas. $variable="toto"; est identique à $variable = "toto" ; ou à $variable ="toto"; Quand au fait d'avoir des idées c'est tres bien, mais je pense qu'il faut commencer par bien suivre les différents cours, réagir et poser des questions qui sont en rapport avec ces cours sur la mailing liste. Et si vous désirez vraiment vous y mettre (ce qui semble etre le cas), installez de quoi tester sur votre ordinateur, cela vous permettra de trouver tres facilement les erreurs. Pour cela il faut simplement installer un serveur web (apache par exemple) et le perl (d'activestate par exemple)
| |
| samedi 31 mars 2001 - 20h10 bonjour frederic, je vais suivre vos conseil pour installer apache et perl sur mon pc, mais quand je vais aux adresses que vous avez cité, il y a beaucoup de chose à telecharger, que me conseillez vous ? que je puisse installer facilement sous windows, sans trop à avoir à paramétré, cela m aidera à avancer je l'espere. Pour ce qui est des cours, je les ai lu, enfin pour etre franc, j ai regardé les grande lignes, pour comprendre le fonctionnement de perl, et j ai acheté 2 livres expliquant perl et cgi, avec des exemple de scripts, je trouve plus facile d'avoir le format papier pour apprendre. merci de votre aide, cordialement
| |
| samedi 31 mars 2001 - 21h04 Bonjour, Vu que l'installation est quelque chose que l'on me demande tres souvent, je pense qu'il va falloir que je pense a en faire une doc :-) Ce dont vous avez absolument besoin pour pouvoir tester en local c'est un serveur Web (de préférence Apache) et le Perl. Pour le serveur web, Microsoft fourni le sien avec Win 98, Me, Nt et 2000 mais je ne sais pas comment il faut le configurer. Pour le perl, je pense qu'Activestate propose toujours 2 versions une version 3xx (de +- 3,5 mo) et les versions 5xx de 6 ou 7 mo. Les 2 peuvent convenir, mais la version 5xx est plus complète et plus récente. ActivePerl et Apache sont livrés avec des programmes d'installations habituels pour windows, il n'y a qu'a répondre aux questions posées.
| |
| lundi 02 avril 2001 - 06h34 bonjour, j'ai suivi vos conseil et ai installé perl et apache par activestat, j'avais un cd fourni avec un de mes livres, il y avait aussi les modules de perl? a quoi servent ils? j'ai voulu tester un script qui fonctionne déja, dans l'entete j ai mis ceci #!\c:\perl\bin\perl et j ai essayé de l ouvrir avec internet explorer, mais la rien ne se passe, perl est sous c et apache lui est sous programmes files, le script est dans le rep cgi bin d'apache, je n ai pas de html accompagnant ce script. merci d'éclairer ma lanterne. cordialement
| |
| lundi 02 avril 2001 - 07h14 re.. je viens de tester mon script à nouveau, j ai insérer use cgi qw/:standard/; mais il dois y avoir un probleme dans la recup des données de formulaire, j ai utilisé la fonction param come il est indiqué dans les explications des cgi, mais j ai à chaque fois un message d'ereur indiqué e mail , message qui est dns l'entete du cgi,!! je ne comprend plus ce qui se passe! J ai choisi de commencer par un formulaire car sur le web, beaucoup d'application sont à partir de la! Dites moi, est il possible d'exécuter des chose simple comme ceci en perl ou cgi ################## le formulaire en html standard <form method="post" action="cgi"> <p> <input type="text" name="name"></p> <p> <input type="submit" name="Submit" value="Envoyer"> </p> </form> ################# # la récuperation avec le cgi ################# my $meta_name= param("name") print header; print "<meta name descriptions=$meta_name>"; ############### car j ai remarqué que certain scripts était très compliqué et pourtant la manipulation à l air logique, je pense peut etre me tromper car je découvre. merci pour vos précieux conseils cordialement
| |
| mardi 03 avril 2001 - 01h13 bonsoir, je viens de relire pour l 3eme fois le fonctionnement des cgi et perl, mais le meme probleme m'empeche de faire fonctionner un script, c'est la facon de le mettre en place, dans les exemple il ya bien sur le print "bonjour le monde"; mais dans la mise en place du script, comment définir les differente étape et par quoi commencer l'écriture. par exemple, j ai essayé de faire une vérification de mots de passe avec une page html le script de reception est comme cela: ###" #!/usr/bin/perl print header(); if( $password=param("pass")) { print "votre password est correct"; }else { print " password no corect "; } mais j ai une erreur serveur web, (car je ne suis pas arrivé a faire fonctionner perl en interne), j'ai essayé de faire un sub verfif_pass mais cela ne fonctionne pas non plus, j'ai tout d'abord pensé à faire la base du cgi et le diviser en sous programme, enfin c'est la structure qui me pose un gros probleme, comment pourrais-je m y prendre, les livres que je possede sur perl ne m ont pas permis de résoudre mon probleme. Dans la plupart des explication sur perl il manque aussi les ouverture de page html accompagnant les scripts, je vais continuer à lire mes livres en attendant votre reponse, cela m'avancera pour la suite. merci cordialement
| |
| mardi 03 avril 2001 - 09h16 Bonjour, Vous dites que vous avez essayé de l'ouvrir avec IE, comment avez vous fait cela ? en tapant http://127.0.0.1/cgi-bin/lescript.pl dans votre navigateur ou plutot avec une ULR du genre file://c:/program files/apache/cgi-bin/lescript.pl ? Si vous avez utilisé la 2e méthode il est normal que ca ne fonctionne pas et vous avez du voir le contenu du script. Si c'est avec la première méthode, avez vous eut un message d'erreur ? Concernant les modules perl, on peut les considérer comme des scripts qui permettent d'effectuer certaines taches bien particulières comme se connecter a une base de données mysql, récupérer les valeurs d'un formulaire, envoyer un mail, ... Concernant les erreurs que vous rencontrez, vous pouvez en savoir pplus sur l'erreur en exécutant le script en local dans une boite DOS. Pour cela ouvrez une boite dos, allez dans le répertoire contenant le script et tapez : perl lescript.pl il demandera d'introduire eventuellement les valeurs des paramètres en indiquant le nom suivi du caratère = et ensuite de la valeur. Donc pour simuler un formulaire contenant un champ email il faut lui donner : email=monadresse@chezmoi.com Si il y a d'autrs paramètres il suffit de les introduire de la meme facon, si c'est terminé il suffit de continuer en pressant simultanément CTRL + Z Si il n'y a pas d'erreur dans le script vous allez voir le code HTML généré par le script. Si il y a une erreur il indiquera un message permettant de localiser plus facilement le probleme.
| |
| mardi 03 avril 2001 - 10h18 bonjour frederic, pour l'ouvrir avec IE j ai seulement cliquez du droit sur le script qui est dans le rep cgi bin d'apache groupe. Je crois que je me perd dans la mise en forme des cgi, cela me demoralise un peu, je pensais qu'en me documentant j'arriverai à comprendre le fonctionnement, mais beaucoup de chose me pose probleme, et dire qu'il parait que perl est simple!! J'essaye de décortiquer tous les script que je trouve, en regardant un peu beaucoup commence par my ($...) sub mon_prog cela est peu etre la mise en place classique, je vais imprimer les cours pour arriver à mieux comprendre et à les comparer avec mes livres. Perl m indique parfois des erreurs bizarre, j ai recopié un petit script du style #!/usr/bin/perl -w use strict; use CGI qw(:standard); print header; print " le nom est ", param ('nom'); print " description : ", param('description'); avec le formulaire html qui va avec, parfois celui ci fonctionne d'autre fois j ai une erreur serveur quand je modifie un peu, du style un = après le nom est=", bizarre non! Je vais essayer de ne pas trop me décourager et de continuer à apprendre, mais je n ai jamais programmé de ma vie donc la logique de prog est un gros probleme pour moi. cordialement
| |
| mardi 03 avril 2001 - 12h13 re.. je lis et relis sans cesse la facon de faire en perl et cgi, je pense qu'il me manque des bases de je ne sais quoi!! A votre avis frederic, n ayant jamais programmé, est il possible de commencer par perl et cgi ou dois je apprendre une base de programmation standard, connaitre un minimu pour arriver a cela! je vous demande votre avis car je me décourage un peu devant la programmation, n'arrivant pas à mettre en forme et a comprendre le fonctionnement. J ai vu certain livre, campuss press par exemple, qui donnait des bases en prog et plus, devrais je commencer par la! Donner moi votre avis, cela me serait bien utile, car je pense qu'a force de chercher dans le vide je n arriverai à rien!! Etant donné que je suis autodidacte, j'ai apprit seul tous ce que je sais, cela n est pas une mince affaire mais bon question d'habitude. merci de m'éclairer sur ces points qui me laisse perplexe! cordialement e.m
| |
| mercredi 04 avril 2001 - 01h18 bonsoir frederic, je suis enfin arrivé à installer perl et le faire fonctionner en interne, j ai donc essayé aujourd ui les conditions if et else, j ai fait un peti script pour un mot de passe qui me parait bien long pour cette application, dans perl les données passe par <STDIN>, cette fonction n'est elle pas à remplacer par param("nom_du_champ") pour l'appliquer par une page html? Voici le script que je me suis amusé à faire pour tester un peu perl, mais comment faire pour le reduire, je pense que les débutant doivent etre confronté à ce genre de probleme! merci a vous cordialement. ############ #!\c:\perl\bin\perl -w ##################################### # essai 1er perl teste mot de passe ##################################### $pass="test"; $accept="oui"; ##################################### print "bonjour\n"; print "vous allez devoir entrez un mot de passe\n"; print "voulez vous continuer \n"; print " oui ou non\n"; $reponse=<STDIN>; chomp $reponse; if ($reponse ne $accept) { print "aurevoir et merci \n"; } else { print &verif_pass; } sub verif_pass { print "entrez votre pasword:?"; $Verif_pass=<STDIN>; chomp $Verif_pass; if ($Verif_pass ne $pass) { print &nopass; } else { print &ok; } } sub ok { print " bienvenue .\n"; print " password ok.\n"; } sub nopass { print "erreur de mots de passe \n"; print " essayer à nouveau oui ou non?\n"; $rerep=<STDIN>; chomp $rerep; if ($rerep ne $accept ) { print "aurevoir et merci \n"; } else { print &verif_pass; } }
| |
| mercredi 04 avril 2001 - 11h07 bonjour frederic, j'espere que le nombre de questions posé ne vous dérange pas ? J'ai essayé plusieurs chose en perl, cela fonctionne en local, sans erreur mais pas sur le web, j'ai suivi les étape comme on me l'a dit, par exemple, la récuperation de données d'un formulaire se fait donc par param("nom_du_champ") mais lors de l'essai sur le web cela ne fonctionne pas, je pensais avoir compris certaines explication de perl et cgi mais cela me renvoi à zero! j'ai refait un petit script en local, pour voir et j ai essayé de l'adpté au web avec param, j'ai fait un formulaire et cela ne fonctionne pas\; #!/usr/bin/perl -w $mot_de_passe="test"; $value=param('pass'); chomp $value; if($value eq $mot_de_passe) { print header; print "voir la page"; } else { print header; print "accès refusé, password no correct"; } quand je teste en local, sans print header ni param, je met mont mot de pass dans stdin cela fonctionne comme il faut! comment ce fait il que param ne récupere pas le champ et pourquoi est il impossible de faire une comparaison direct du style if (param("nom_du_champ) eq $mots_de_pass) { print header; print "ok"; }else{ print header; print "erreur"; } merci pour vos reponses, et je crois que je devrais essayer de poser moins de questions! cordialement
| |
| mercredi 04 avril 2001 - 20h43 Bonjour, Que ce soit en CGI ou en javascript, il s'agit de programmation, il est donc toujours souhaitable d'avoir des bases pour comprendre le fonctionnement et l'utilisation des boucles, des conditions, ... Oui c'est avec param que vous pouvez récupérer le contenu d'un champ, mais vous devez avoir déclaré que vous utilisiez CGI, sinon il ne connait pas la fonction param use CGI qw(:standard); Le script que vous donnez en exemple fonctionne tres bien a condition d'y ajouter la déclaration de CGI (voir ci dessus). Enfin pour que ca fonctionne il faut que votre champ d'input s'appelle bien 'pass' (attention aux majuscules, minuscules, espaces, ...) et que le script soit appelé via une requete HTTP et pas une requete file dans votre <form action= vous devez avoir quelques chose comme /cgi-bin/lescript.cgi et pas file://c:/repertoire/dossiers/scripts.cgi
| |
| jeudi 05 avril 2001 - 14h21 bonjour frederic, je vais donc me documenter sur la programmation, mais par quoi me conseillez vous de commencer pour apprendre et comprendre le fonctionnement de base, en effet il existe tellement de language, je pensais pouvoir apprendre cgi dans les livres, je suis un peu décu de savoir qu il va falloir que je recommence à zero, mais bon s il faut passer par la! En ce qui concerne mes scripts de test ci dessus, impossible de les faire fonctionner, et je ne comprend pas pourquoi, j'ai suivi vos conseil ainsi que tou ce que j ai pu trouver, mais il n'y a rien a faire, rien ne marche lorsque j essaye sur le net, j ai pourtant rajouté des chos en en tete comme cela, #!/usr/bin/perl use strict; use CGI qw(:standard); #et j ai fait une reprise de champ plus que basique comme if (param('champ') eq $pass) { print header; print"ok"; }else{ print header; print" erreur"; } il n y a pas plus simple mais ca ne marche pas! pour mon formulaire c'est <form method="POST" action="nom_script.cgi"> <input type="text" name="champ"> <input type="submit" name="Submit"value="Envoyer"> merci à vous cordialement
| |
| jeudi 05 avril 2001 - 15h37 Bonjour, vous dites que votre formulaire est exactement comme l'exemple indiqué dans votre message précédent ? Donc qu'il contient la ligne : <input type="text" name="champ"> Si c'est la cas c'est normal que ca ne fonctionne pas !!!!! Dans votre script CGI vous essayez de récupérer le contenu d'un champ de formulaire qui s'appelle 'pass' hors ce champ n'existe pas. Votre formulaire doit plutot ressembler à ceci : <form method="POST" action="nom_script.cgi"> <input type="text" name="pass"> <input type="submit" name="Submit"value="Envoyer"> J'ai acheté tout a l'heure un petit fascicule (80 pages) Cgi - Perl édité par Compétence Micro. Je ne sais pas ce que ca vaut, il faut d'abord que je regarde, mais a première vue ca a l'air clair et avec pas mal d'exemples (et en plus y a un 'lien' vers scripts-fr ;)
| |
| jeudi 05 avril 2001 - 17h09 bonjour frederic, Pour ce qui est des livres, j'en ai plusieurs, mais sans liens vers vous!(humour), j ai l'intro à perl 5 de campus press, perl par osman eyrolles, et j ai commandé programmation cgi par O'REILLY, je pensais qu'avec ca j'allais m'en sortir. Pour le petit script ci dessus pourquoi mettre pass en champ si j'ai $pass="mot_de_pass"; dans l'entete? que j ai omis de mettre dans le script, je vous donnerais l'url pour vérifier quand je l'aurais fait plus propre. Avec tous les language du net je galère, j'apprend tout en meme temps, PHP, cgi etc..., c'est pas simple, surtout que j ai pris internet en route j'ai compris 2 ou 3 chose en perl, les conditions basique avec eq est egal à, ne different if et else, j ai essayé une boucle while mais j ai bloqué dos! dur de débuté, heureusement que je me débrouille mieux en html et pao, et pour parametré les cripts deja fait, enfin il vaut mieux, je vend des sites ce serai dommage! a bientot et merci cordialement
| |
| dimanche 08 avril 2001 - 11h59 Bonjour, Je crois qu'on ne va pas en sortir, envoyez moi le script et le fichier HTML, je vais le corriger. Bon courage.
|