TUTORIELS 
Un formulaire de contact multi-destinataires en PHP

Page 1 | 2 | 3

Un script complet permettant de revenir sur de nombreux points de la programmation PHP, notamment l'utilisation de tableaux associatifs.
 (14 novembre 2003)
 
définitionAdresse()
C'est là que nous déterminons si le mail est envoyé à un destinataire en particulier, ou à tous les destinataires...

function definitionAdresse()
  {
  global $listeDesMails;
  $i=0;

  foreach ($listeDesMails as $prenom => $adresseMail)
    {
    ++$i;
    if ($_POST['choixMail'] == $i)
      {
      envoiMail($prenom, $adresseMail);
      }
    }

  if ($_POST['choixMail'] == count($listeDesMails)+1)
    {
    envoiMail("tout le monde", join(', ',$listeDesMails));
    }
  }

Nous utilisons à nouveau les variables $listeDesMails et $i dans cette fonction.

Celle-ci est en deux parties : l'une gère le mail individuel, l'autre le collectif. La tâche est à peine rendue plus difficile par la fait que notre tableau est associatif...

Pour le mail individuel, nous réutilisons la même boucle foreach() que dans la fonction optionChoixMail(), mais cette fois la variable $i ne nous sert pas à inscrire un numéro d'options, mais à tester que l'option correspond au numéro en cours. En effet, tel que nous l'avons écrit, la boucle aura en même temps le prénom et l'adresse du 1er destinataire, et l'entier 1, puis le 2nd et "2", et ainsi de suite.
Lancer la fonction envoiMail() n'est donc plus qu'une question de repérage : $_POST['choixMail'] est-il égal à $i ? Autrement dit, l'entier choisi par l'utilisateur (et donc le destinataire) correspond-il à l'entier associé au destinataire en cours ? Si c'est le cas, on donne à la fonction envoiMail() les arguments $prenom et $adresseMail de cet entier. Si ce n'est pas le cas... on ne fait rien.

Il faut aussi gérer le cas de la dernière option : "tout le monde". Celle-ci est la dernière de notre liste : son entier n'est pas pris en compte par la boucle foreach(). Nous lui offrons un if() spécifique.
Celui-ci ne fera que vérifier que l'entier choisi par l'utilisateur est égal au dernier entier de notre liste d'options. Nous avons ici quatre mails dans notre tableau, l'entier suivant correspondra donc à "tout le monde". Nous obtenons cet entier via la fonction count(), qui donne le nombre d'éléments contenus dans un tableau, auquel nous ajoutons 1.
Il nous faut enfin extraire l'ensemble des mails de notre liste, sans les prénoms ni les associations : c'est la fonction join() qui vient à notre rescousse, elle permet de rassembler les éléments d'un tableau en une chaîne, en les séparant par une chaîne donnée. Etant donné que pour utiliser plusieurs mails, il faut les séparer par une virgule, nous choisissons cette option.

Chacun renvoi vers la fonction finale envoiMail(), avec comme arguments la dénomination du destinataire, et une chaîne contenant la ou les adresses.

envoiMail()
Nous avons tout ce dont nous avons besoin pour utiliser la fonction interne mail() : un ou des destinataires, et un corps de message.

function envoiMail($nomContact, $adresse)
  {
  if (@mail($adresse, "Mail depuis le formulaire de contact", $_POST['champTexte']))
    {
    ?>
    Votre mail a bien été envoyé à <?=$nomContact;?> (<?=$adresse;?>).
    <?
    }
  else
    {
    ?>Suite à une erreur, votre mail n'a pu être envoyé. Veuillez recommencer.<?
    }
  ?><br>Voici le contenu du mail: <br><?=$_POST['champTexte'];?><?
  }

Nous profitons du fait que la fonction mail() renvoi true ou false selon la réussite de l'envoi, pour informer l'utilisateur du résultat. Pour autant, nous utilisons l'opérateur @ pour éviter d'afficher un message d'erreur trop violent...

Discutez en sur les forums

C'est ensuite mail() (et sa configuration dans le fichier php.ini) qui prend le relais, à partir du moment où nous lui fournissons destinataire(s), sujet et corps du mail. Notre fonction ne fait ensuite qu'afficher un message de confirmation, et les données envoyées.

Page 1 | 2 | 3

 
[ Xavier BorderieJDNet]
 
Accueil | Haut de page