Un script complet permettant de revenir sur de nombreux points de la programmation PHP, notamment l'utilisation de tableaux associatifs.
(14
novembre 2003)
Nous
allons ici prendre le temps de réaliser une "application"
complète d'envoi de mail, ou plus modestement, un script complet
autour d'un formulaire de contact. Cela nous permettra de voir de
nombreux points de la programmation PHP. Ce script ne cherche pas
à présenter un ensemble de "best practices"
en vogue, mais de revoir et expliquer certaines méthodes et
principes dans PHP.
Présentation
Voici la forme de base que prendra notre formulaire :
Envoyer ce mail à
Nos objectifs sont les suivants:
- pouvoir envoyer au choix à un destinataire, où à
tous les destinataires,
- faire tenir l'ensemble du script dans un seul fichier,
- modulariser le script - utiliser plusieurs petites fonctions plutôt
qu'une grosse,
- possibilité d'ajouter/retirer un utilisateur sans devoir
retoucher tout le script.
Approche du
code
Lorsque l'on veut qu'un script fonctionne sur un seul fichier, il
faut prévoir à l'avance que le fichier lui-même
pourrait changer dans le futur (de nom, d'emplacement). De fait,
l'exemple de formulaire suivant n'est pas correct :
...car il force à la fois le
nom et l'emplacement de notre script. Pour bien faire, PHP nous
offre une variable très utile, qui contient l'URL de la page
en cours. La bonne manière de remplir l'attribut action
dans notre optique est la suivante:
De même, rester dans un seul
fichier implique que l'affichage n'est pas le même avant et
après avoir cliqué sur le bouton Envoyer - par exemple,
le formulaire pourrait être remplacé par un message
de confirmation. Nous devons donc partir d'une fonction qui teste
l'état du formulaire, et envoi un affichage en conséquence.
Pour tester cet état, nous ajoutons
à notre formulaire un champ caché, dont nous testerons
l'existence :
<input type="hidden"
name="envoi" value="ok">
Ce tests se déroule dans une
fonction affichage(). Ainsi, le
corps de notre page HTML ne contient plus que l'appel à cette
fonction :
<html>
<body>
<?=affichage();?>
</body>
</html>
Notre formulaire,
lui, prendra cette forme :
<form method="post"
action="<?=$_SERVER['PHP_SELF'];?>">
<input type="hidden" name="envoi" value="ok">
<textarea name="champTexte" cols="75"
rows="10">
(n'oubliez pas de signer votre
message!)
</textarea>
<br>
Envoyer ce mail à
<select name="choixMail">
<option value="0" selected>Choisissez
un destinataire...</option>
<option value="1">Michal</option>
<option value="2">Houssine</option>
<option value="3">Patxi</option>
<option value="4">Xavier</option>
<option value="5">Tout le
monde</option>
</select>
<input type="submit" name="Submit" value="Envoyer">
</form>
Après
avoir cliqué sur "Envoyer", nous savons donc que
nous aurons à disposition les variables suivantes :
- le champ caché : $_POST['envoi']
== "ok"
- le texte du message : $_POST['champTexte']
== le message
- le choix du destinataire : $_POST['choixMail']
== un entier entre 0 et 5
Profitons-en pour définir les
fonction dont nous aurons besoin pour notre script:
- gérer l'état du formulaire, donc l'affichage global
: affichage()
- afficher le formulaire vierge : afficheFormulaire()
- définir à quelle(s) adresse(s) envoyer le mail :
definitionAdresse()
- envoyer le mail : envoiMail()
Enfin, nous définissons notre
liste de destinataires au début du script, dans un tableau
: