La communauté ALL HTML c'est 60442 membres à ce jour dont 0 inscrits aujourd'hui et 5 depuis une semaine.

Envoyer un formulaire en php

Photo de telnes Article publié le vendredi 06 octobre 2006 par telnes.
Cet article est classé dans les catégories « Internet et Intranet, PHP »

Ce tutorial va permetre de comprendre comment envoyer les champs d'un formulaire avec la fonction mail() de PHP.



Exemple de formulaire



si vous n'êtes pas famillié jeté un oeil à la publication http://www.allhtml.com/articles/detail/606

nous appellerons cette page formulaire.html

<form method="POST" action="inscription.php" name="monform"> Nom : <input type="text" name="nom"><br /> Prenom : <input type="text" name="prenom"><br /> Mail : <input type="text" name="mail"><br /> <textarea name="commentaire">Entrer ici votre message</textarea> <input type="submit" value="Envoyer"> </form>

On a donc un formulaire composé de 4 champs : nom,prenom,mail et commentaire.
La balise form contient l'attribut method qui permet de stipuler la méthode d'envoi des informations, il y a GET (en paramètre URL) ou POST (en paramètre dans le header de la page).
Nous choisissons POST car il y a aucun interrêt à faire passer les variables via l'url !
L'attribut action permet de stipuler l'action à réaliser, ici nous envoyons le formulaire à la page inscription.php

Il est tout à fait possible de valider une première fois les champs en JavaScript mais c'est pas le sujet ici!

La page PHP qui traite le formulaire



La page PHP va récupérer les variables qui lui ont été envoyé (par la méthode POST) donc pour les récupérer il faut passer par la variable $_POST[''], une fois qu'on a compris ca on a fait 80 % du chemin :)
<?php // récupération des variables // donné un autre nom au variable pour évité les problèmes avec Register Global à ON $formMail = $_POST['mail']; $formNom = $_POST['nom']; $formPrenom = $_POST['prenom']; $formCommentaire = $_POST['commentaire']; // pour éviter des erreurs de Notice dans le cas ou le champs est resté vide, on aurait pu mettre ! // $formMail = (!isset($_POST['mail']))?$_POST['mail']:'none'; // Dans le cas ou les variables sont destiné à allimenter un base de donné il faut toujours valider les valeurs pour éviter les problèmes d'injection ! cf Google //En règle général on traite les variables avec les fonctions htmlentities, mysql_escape_string(),addslash() ... // Dans l'exemple on va juste vérifier que le nom, le prenom et le mail soit pas vide. if(!empty($formMail) && !empty($formPrenom) && !empty($formNom) ){ //ok pas vide //on convertie les caractètres HTML du commentaire $formCommentaire = htmlentities($formCommentaire); //mise en forme du mail $message = "$formNom $formPrenom vous contact via votre formulaire.\n \n message : \n $formCommentaire"; // on envois le mail [url=http://fr.php.net/manual/fr/ref.mail.php]http://fr.php.net/manual/fr/ref.mail.php[/url] // bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] ) // ATTENTION en général vous n'avez pas de serveur de mail sur votre machine ! // à tester sur le net directment en cas de problème avec la fonction mail if( mail('monadresse@mail.com','sujet','$message') ){ echo 'les informations on bien été envoyé!'; } else{ echo 'une erreur est survenu lors de l\'envoi du message'; } } else{ //il y a des champs vide echo 'merci de remplir les champs nom, prenom et mail'; } ?>


Les trucs en plus



Conserver les variables des utilisateurs pour ne pas les perdre en cas de retour en arrière dans le formulaire. Pour cela vous pouvez utiliser les sessions (http://fr.php.net/manual/fr/ref.session.php) pour stocker les variables à leurs receptions. Ensuite on utiliser l'attribut value dans les input du formulaire (dans une page php !).
exemple: <input type="text" value="<?php $_SESION['mavar'] ?>" name="mavar">


Pour rediriger une fois le mail envoyé vous pouvez utiliser la fonction header() (http://fr.php.net/manual/fr/function.header.php). On peut tres bien ajouter des paramètre dans l'url de redirection !

Plus d'informations :


VOS COMMENTAIRES ...

Commenter cette publication

Photo de Evane Commentaire publié le jeudi 12 octobre 2006 à 11 h 37 par Evane
lorsque j'ai trouve cet ecran, je me suis dit je vais enfin comprendre mettre l'exemple en fonction et regarder....
cela ne fonctionne pas.
Photo de telnes Commentaire publié le lundi 16 octobre 2006 à 09 h 55 par telnes
salut

un pm à été envoyé à un admin pour corriger le bug

dans la fonction mail il faut supprimer les simple quotes (') autour de $message.

+
Photo de Evane Commentaire publié le mardi 17 octobre 2006 à 11 h 37 par Evane
Merci bcp je vais reessayer

Je suis toujours en phase d'integration de la fonction "mail", je fais des essais avec le code suivant, tout à l'air pourtant correct et pourtant les messages "variables indefinies" sont là en erreur et le mail ne part pas quand il est sur un serveur non fictif ...
Peux-tu stp m'expliquer pourquoi tout en sachant que j'essaie de comprendre et que je suis la plus novice des novices sur ce point ....
j'ai juste le merite de vouloir comprendre
merci
Mon code :
<?php
//destinataire deux separés par une virgule
$destinataires="xxx@xxx.fr,yyy@yyy.fr";
//objet
$objet="demande de reservation";
//message
$message .="";
$message .="Martine, Sophie,\r \n";
$message .="Nous vous etc etc \r \n";
//entetes supplementaires
$entêtes .="";
$entêtes .="From \"réservation xxx\" <zzz@zzz.fr> \r\n";
//envoi
$ok=mail($destinataire,$objet,$message,$entêtes);
?>

Merci bcp a l'avance.
Photo de Evane Commentaire publié le mardi 17 octobre 2006 à 11 h 57 par Evane
cela marche merci.... la moitié du chemin est faite. Maintenant, je dois parvenir a integrer dans le message et dans les entetes des données de ma base de données....
Par contre, si tu pouvais me dire où est le binz dans la code ci dessus....
merci a l'avance.
Photo de davidmj Commentaire publié le dimanche 19 novembre 2006 à 13 h 58 par davidmj
Bonjour,

je suis un grand débutant, il y a encore trois mois je ne connaissais pas grand chose au html encore moins au php.
Je pense avoir compris le script, mais je bloque sur cette partie: // on envois le mail http://fr.php.net/manual/fr/ref.mail.php // bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] ).

je suis allé sur le site indiqué pour comprendre, mais cela me passe légèrement au dessus. Est-il possible d'avoir une petite explication plus pratique de cette partie avec un ou plusieurs exemples?

Je vous remercie d'avance pour l'aide que vous allez m'apporter.
Photo de zestreme Commentaire publié le samedi 20 octobre 2007 à 16 h 09 par zestreme
Photo de zestreme Commentaire publié le samedi 20 octobre 2007 à 16 h 13 par zestreme
Bonjour,

Pouvez m'expliquer pourquoi cette config ne fonctionne pas? j'essaye egalement de rediriger vers ma page d'accueil mais... il me manque un peu de pratique..
Merci d'avance de votre aide et explication



<?php
$formMail = $_POST['mail'];
$formNom = $_POST['nom'];
$formPrenom = $_POST['prenom'];
$formCommentaire = $_POST['commentaire'];

if(!empty($formMail) && !empty($formPrenom) && !empty($formNom) ){

$formCommentaire = htmlentities($formCommentaire);


$message = "$formNom $formPrenom vous contact via votre formulaire.\n \n message : \n $formCommentaire";

if( mail('info@cqfd.com','sujet','$message') ){
echo 'les informations on bien été envoyé!';
}
else{
echo 'une erreur est survenu lors de l\'envoi du message';
}
}
else{

echo 'merci de remplir les champs nom, prenom et mail';
}

?>// ActionScript Document
Photo de telnes Commentaire publié le dimanche 21 octobre 2007 à 21 h 48 par telnes
tu test en local ?
tu a quoi comme erreur ?

++
Photo de xoommoox Commentaire publié le jeudi 29 novembre 2007 à 11 h 43 par xoommoox
Bonjour à tous!!!
j'ai essayer ces codes, ils marchent bien dans l'ensemble.Le prénom le nom et le message ne pose aucun probleme, mais pour ce qui est du mail, je recois à chaque essai un mail ayant comme expéditeur anomymous@leserveurdelhebergeur.com ??
est ce une erreur dans mon code? ou à un probleme de serveur( il est au maroc)?
merci pour toutes réponses.
xoom
Photo de MoovAnce Commentaire publié le dimanche 16 décembre 2007 à 17 h 31 par MoovAnce
Bonjour,

J'aurai besoin d'un éclaircissement pour d'autres types de champs dans un formulaire à savoir les boutons radio et les cases à cocher. J'ai un formulaire qui en comporte et lorsque je le teste, je ne retrouve aucune trace des réponses sélectionnées dans le corps de l'email généré.
Quelque chose doit m'échapper mais je ne trouve pas où !!

Le formulaire est visible ici http://www.creacomdesign.com/clients/teresina/contact.html

Et voici les champs du doc php qui ne fonctionnent pas :

ini_set("sendmail_from", "sender@teresina.co.uk");
if (isset($_POST['first_name']) && isset($_POST['message']) && isset($_POST['email'])) {
$gender = $_POST['gender'];
$contact_by = stripslashes($_POST['contact_by']);
(...)
$headers = 'Content-type: text/html' . "\r\n";
$headers .= "From: Teresina Website <PHP>\n";

(...)

$message = '<br /><strong>'.$gender.'</strong><br />';
$message .= 'Contact Preference : <strong>'.$contact_by.'</strong><br /><br />';
(...)

Merci par avance pour toute lumière que vous pourriez m'apporter sur le sujet.

Christèle
Photo de telnes Commentaire publié le lundi 17 décembre 2007 à 08 h 55 par telnes
les autres type de champs

http://www.allhtml.com/articles/detail/606

++
Photo de MoovAnce Commentaire publié le mardi 18 décembre 2007 à 20 h 40 par MoovAnce
Merci mais malheureusement cela ne fonctionne pas complètement avec mon formulaire et surtout les boutons radio.

Tant pis je vais continuer à chercher une autre solution !

++
Photo de cwdev Commentaire publié le samedi 13 septembre 2008 à 13 h 34 par cwdev
Bonjour,

Je ne vois aucun htmlspecialchars, ce qui fait que si l'utilisateur tape <h1>Mon texte</h1> vous aurez un beau titre en plein milieu de votre texte.

Pour ce qui est de la note avant l'insertion dans la base de données, mysql_escape_string suffit, utiliser un htmlentites, etc... ne sert qu'à l'affichage
Photo de renatoweb Commentaire publié le vendredi 12 mars 2010 à 08 h 36 par renatoweb
Bonjour, l'exemple du code fourni + haut, fonctionne à moitié.
En fait dans le navigateur j'ai une erreur 404 mais dans mon logiciel de messagerie je reçois bien les données du formulaire.
Questions :
- comment régler cette erreur 404
- et au niveau de la réception j'ai l'adresse de l'internaute qui s'affiche dans le champ "DE". Comment faire pour que ce soit le nom de la personne qui s'affiche et non son adresse mail ?

Merci.
Photo de gregoirevandera Commentaire publié le samedi 03 juillet 2010 à 15 h 07 par gregoirevandera
Bonjour, je débute dans le html et je voudrais savoir ou est ce qu'il faut insérer son adresse email dans le code pour que le formulaire nous soit envoyé...

Commenter cette publication

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

Forums de discussions associés

Discutez et échangez sur ce thème dans notre forum PHP - SQL.

Liens sponsorisés

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.