Bonjour à tous.
Je n'y connais absolument rien en PHP. Je ne me débrouille qu'en HTML et en CSS, ce qui m'a toujours convenu pour la création de petits sites, auxquels, au besoin, j'ajoutais un formulaire dont l'envoi était traité par des scripts préconçus (par exemple "formail.pl" -- si je me souviens bien de l'extension, lorsque j'hébergais chez Free.fr).
Là, c'est différent. Je crée mon site Web professionnel (hébergé chez OVH) et me dépatouille pour tout ce qui est la création de mes pages non dynamiques, avec au besoin l'application d'un peu de Javascript que je vais chercher ici ou là.
Bref, j'aimerais toutefois que les champs du formulaire que j'ai créé soient transmis vers une page PHP qui vérifie certaines conditions pour, ensuite, envoyer les entrées de champs sur l'adresse courriel de mon choix.
Voici ce que j'ai pu mettre en place.
Voici le code source de mon formulaire :
Code :
- <?php
- $cryptinstall="./crypt/cryptographp.fct.php";
- include $cryptinstall;
- ?>
- (...)
- <form action="verifier.php" method="post">
- <span class="formuTxt">Veuillez introduire votre nom et courriel, en plus de l'objet de votre demande, afin que je puisse vous répondre en bonne et due forme.</span>
- <br /><br /><br />
- <span class="formuNId">Nom complet : </span>
- <input name="nom" class="formuBox" size="30" type="text" />
- <br />
- <span class="formuNId">Adresse e-mail : </span>
- <input name="email_from" class="formuBox" size="30" type="text" />
- <br />
- <span class="formuNReq">Sujet de votre requête : </span>
- <input name="sujetreq" class="formuBox" size="30" type="text" />
- <br />
- <span class="formuNReq">Votre requête :</span>
- <br />
- <textarea name="msgreq" class="formuBox" cols="55" rows="15"></textarea>
- <br /><br />
- <table cellpadding="0px" cellspacing="0px">
- <tr><td>
- <?php dsp_crypt(0,1); ?>
- </td><td>
- <input value="Recopiez le code" onclick="this.value=''"; type="text" name="code"></td></tr>
- </table>
- <br />
- <input type="submit" name="submit" value="Envoyer">
- </form>
|
Et voici le code encore très fragile de ma page de traitement, en l'occurrence VERIFIER.PHP :
Code :
- <?php
- $cryptinstall="./crypt/cryptographp.fct.php";
- include $cryptinstall;
- ?>
- (...)
- <?php
- $msg_erreur = "Afin que je puisse vous répondre, votre adresse courriel est nécessitée.";
- $msg_ok = "Votre requête a bien été transmise. J'y répondrai dans les plus brefs délais.";
- $message = $msg_erreur;
- define('MAIL_DESTINATAIRE','mon_adresse_courriel');
- define('MAIL_SUJET','Requête client');
- if (empty($_POST['email_from']))
- $message .= $msg_erreur;
- if (chk_crypt($_POST['code']))
- echo "Merci de votre confiance !<br/>";
- else echo "Erreur, le code recopié est incorrect<br/>" ;
- if (strlen($message) > strlen($msg_erreur)) {
- echo $message; die();
- }
- foreach($_POST as $index => $valeur) {
- $$index = stripslashes(trim($valeur));
- }
- $mail_entete = "MIME-Version: 1.0\r\n";
- $mail_entete .= "From: {$_POST['nom']} "
- ."<{$_POST['email']}>\r\n";
- $mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
- $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
- $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
- $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
- $mail_corps = "Message de : $nom\n";
- $mail_corps .= "Courriel : $email_from\n";
- $mail_corps .= "Sujet : $sujetreq\n";
- $mail_corps .= "Objet : $msgreq";
- if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
- echo $msg_ok;
- } else {
- echo "Une erreur est survenue lors de l'envoi du formulaire par email";
- }
- ?>
|
Le captcha (dont j'ai isolé le code y afférant par quelques sauts de lignes, à la fois pour la page du formulaire et pour la page de traitement, à défaut de pouvoir le mettre en couleur) fonctione très bien. Sauf que je ne parviens pas à l'intégrer au code PHP de ma page VERIFIER.PHP.
Comme réponse, si je remplis le champ e-mail, mais que je ne recopie pas le captcha, j'obtiens ceci : "Erreur, le code recopié est incorrect
Afin que je puisse vous répondre, votre adresse courriel est nécessitée.Afin que je puisse vous répondre, votre adresse courriel est nécessitée."
Il y a donc contradiction : le message ne devrait pas être envoyé puisque le code du captcha n'a pas bien été recopié par le visiteur (aussi, la deuxième phrase apparaît deux fois au lieu d'une).
Autrement dit, je ne sais pas comment intégrer le captcha, qui au demeurant fonctionne très bien (je l'ai testé indépendamment de tout code d'envoi), au reste du code de ma page de traitement des données.
Par manque de temps, je ne peux me consacrer à l'étude du PHP, laquelle me demanderait en outre un effort non négligeable parce que la programmation n'est absolument pas mon domaine.
Je ne peux non plus, d'un point de vue financier, me permettre pour l'instant de confier mon site à une boîte professionelle du Web. C'est aussi le seul lieu de mon site qui demande du PHP, le restant n'étant composé que de HTML, de CSS et d'un tout petit peu de Javascript.
Merci infiniment d'avance.
----------
ÉDITION :
----------
Oui, hourra ! Après des heures d'acharnement, restant sans réponse, j'ai fini, à l'instant, par trouver quelque chose qui a l'air de fonctionner à merveille !
Code :
- <?php
- $msg_erreur = "Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme ";
- $msg_ok = "Votre requête a bien été transmise. Merci de votre confiance. <br/> Je vous répondrai dans les plus brefs délais.";
- $message = $msg_erreur;
- define('MAIL_DESTINATAIRE','mon_adresse_courriel');
- define('MAIL_SUJET','Requête client');
- if (empty($_POST['email_from']) || (!chk_crypt($_POST['code'])))
- $message .= "afin que je puisse vous répondre.<br/>";
- if (strlen($message) > strlen($msg_erreur)) {
- echo $message; die();
- }
- foreach($_POST as $index => $valeur) {
- $$index = stripslashes(trim($valeur));
- }
- $mail_entete = "MIME-Version: 1.0\r\n";
- $mail_entete .= "From: {$_POST['nom']} "
- ."<{$_POST['email']}>\r\n";
- $mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
- $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
- $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
- $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
- $mail_corps = "Message de : $nom\n";
- $mail_corps .= "Courriel : $email_from\n";
- $mail_corps .= "Sujet : $sujetreq\n";
- $mail_corps .= "Objet : $msgreq";
- if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
- echo $msg_ok;
- } else {
- echo "Une erreur est survenue lors de l'envoi du formulaire par email";
- }
- ?>
|
Tous vos conseils ne sont pas seulement les bienvenus, ils sont également attendus !
J'aimerais par exemple que le message d'erreur ("Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme afin que je puisse vous répondre." ) apparaisse en rouge et non en vert. C'est ma seule balise "<p class=qqchose> PHP DE MA PAGE DE TRAITEMENT </p>" qui contrôle le CSS de cette page de traitement. Comment suis-je censé faire pour faire des distinctions ?
Aussi, comme il n'y a finalement qu'un seul message d'erreur possible, puisque j'ai assemblé les deux conditions de l'adresse courriel et du captcha, il y a sans doute moyen de faire plus simple pour écrire le code relatif à l'erreur.
Enfin, je me demande comment je pourrais perfectionner le tout, surtout d'un point de vue sécuritaire.
Message édité par fnisse le 26-05-2012 à 13:56:15