Oui, merci alphega pour cette superbe amélioration. J'ai eu un sale ralentissement php chez mon fournisseur dans la journée, mais ce soir ça roule et ton script fait des merveilles
J'ai aussi fait des petites améliorations et je vais faire un peu de didactique pour les newbees qui passeraient par là (étant donné la position sur Google, doit y avoir du monde).
Donc... A partir du scrypt de base de alphega que l'on trouve en page 1 de cette série de posts, pour ajouter des champs de formulaire il suffit de répliquer le morceau de script suivant dans la page html autant de fois que de champs nécessaires et voulus. Le morceau en question :
<label for="nom">Item :</label></td>
<td ><input type="text" size="60" name="item" id="item" value="<?php
if (!empty($_POST["item"])) {
// le item de l'expéditeur a été saisi : le réafficher
echo htmlspecialchars($_POST["item"],ENT_QUOTES);
}
?>" />
Vous remplacez "item" par ce dont vous avez besoin pour votre formulaire (nom, prenom, telephone, e-mail, etc.). ça c'est pour des champs text. Maintenant pour un textarea multiligne :
<label for="message">Message* :</label></td>
<td ><textarea name="message" id="message" cols="45" rows="5"><?php
if (isset($_POST["message"])) {
// le message a été saisi: le réafficher
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?></textarea>
Là j'ai laissé le nom de l'item "message", car généralement un champ textarea sert pour la partie "message" d'un formulaire. Mais vous pouvez y mettre ce que vous voulez bien entendu.
Ensuite, on passe aux contrôles de sécurité et validation. Dans la partie "haute" du script de alphega, celle qui se trouve au-dessus du code HTML (au dessus de "<!DOCTYPE html PUBLIC ..."), pour chaque champ de votre formulaire vous devez ajouter ceci :
if (isset($_POST["item"])) {
$_POST["item"]=trim(stripslashes($_POST["item"])
);
}
Je ne connais pas grand chose à PHP, mais je suppose (c'est "trim", qui me rappelle VBasic qui m'y fait penser), je suppose que ça enlève les slashes, voire les antislashes du contenu du champ, afin d'éviter le passage de codes malicieux par là. Enfin, alphega l'a mis, faut le mettre

Là encore, remplacer "item" par l'identité du champ en question (nom, prenom, telephone, etc.). Donc faire ça pour chaque champ de formulaire.
Ensuite, pour chaque champ
obligatoire ajouter ceci :
if (empty($_POST["item"])) {
// le item est vide
$erreur="Saisissez votre item...";
}
Là, fastoche à comprendre, c'est pour obliger à remplir un champ avant d'envoyer le formulaire. Donc à n'utliser
que pour les champs qui doivent être obligatoirement remplis (par exemple, l'adresse e-mail de l'expéditeur, qu'on puisse lui répondre).
A noter que pour les deux morceaux de scripts ci-dessus, il vaut mieux les mettre dans le même ordre que l'ordre des champs de formulaire dans la page.
A présent, retour en bas de page HTML, vers le code formulaire. La petite amélioration que j'ai ajoutée concerne le titre du message. En effet, un message de formulaire n'étant pas un e-mail à proprement parler, l'utilisateur se fout de mettre un titre. Par contre, le webmaster qui va recevoir le message voudrait bien recevoir des titres standardisés, qui lui disent aussitôt de quel formulaire de son site vient le message (par exemple, "Formulaire d'inscription", "Formulaire de commande", etc.). C'est pour cela que la variable titre n'est plus nourrie par un champ de formulaire, mais par une variable cachée (hidden) à laquelle l'utilisateur ne touche pas et qui est propre au formulaire. La voici, à placer juste sous la balise "<form method="post"..." :
<input type="hidden" id="titre" name="titre" value="Formulaire de contact">
Voilà, à la place de "Formulaire de contact" vous mettez ce que vous voulez et ça s'affichera dans le titre du mail que vous recevrez.
On arrive à la fin, dans la partie, tout en bas, du script pour envoyer le formulaire, je donne un exemple complet correspondant à un formulaire de contact avec nom, prénom, fonction, téléphone et message. En fait, on ajoute (ou retranche ou change) autant d'items que l'on veut.
$entete = "From : ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n";
$entete .= "MIME-Version: 1.0";
$message="Provenance : ". $_SERVER['HTTP_REFERER'] . "\n";
$message.="Adresse IP : ". $_SERVER['REMOTE_ADDR'] . "\n";
$message.="Navigateur : ". $_SERVER['HTTP_USER_AGENT'] . "\n";
$message.="Nom : ". $_POST["nom"] . "\n";
$message.="Prénom : ". $_POST["prenom"] . "\n";
$message.="Fonction : ". $_POST["fonction"] . "\n";
$message.="Téléphone : ". $_POST["telephone"] . "\n\n";
$message.="Message : ";
if (@mail($email_webmaster,$_POST["titre"],$message.$_POST[
"message"],$entete)){
Quelques explications pour ceux qui connaissent pas. Les "\n" sont des retours à la ligne qui s'effectueront dans le message mail que vous recevrez. "Nom : ", etc. sont des intitulés des informations transmises (par exemple, dans votre message vous verrez "Nom : Dupont"). A ce propos, j'ai ajouté en dernier "Message : ", ce qui donne un intitulé à la partie "message" du mail. Que c'est pas beau de fignoler comme ça
Voilà, je reviendrais certainement lorsque je testerai les cases à cocher et les listes de sélection... A bientôt et merci à tous.