Votre question

[PHP] Formulaires & Mail

Tags :
  • Input
  • Programmation
Dernière réponse : dans Programmation
Anonyme
23 Août 2006 00:31:42

Bonjour,
Me (re)voilà perdu dans la jungle du PHP.
Mon problème d'aujourd'hui est le suivant. J'aimerai que lorsque que quelqu'un rempli un de mes formulaires et qu'il clique sur Envoyer, les résultats de ce formulaire me soient envoyés par mail.

Pour l'instant j'ai réussis à faire quelque chose.
D'abord la page HTML avec le formulaire.

  1. <form action="go.php" method="post">
  2. <p>Prenom :
  3. <input type="text" name="prenom" /></p>
  4. <p>Nom :
  5. <input type="text" name="nom /></p>
  6. <p><input type="submit" value="envoyer le formulaire" /></p>
  7. </form>


Ensuite la page PHP avec le code.

  1. <?php
  2. $login = $_POST['prenom'];
  3. $pass = $_POST['nom'];
  4. mail('grand@schtroumpf.com','Retour formulaire','Prenom= echo $prenom NOM= echo $nom');
  5. ?>


Et le problème c'est que tout ça, ça ne marche qu'a moitié.
Ca m'envois mon mail tout bien, mais au lieu de me mettre le nom et le prénom du visiteur, j'ai à la place "$prenom" et "$nom".

Donc je demande votre aide. Merci d'avance.

Autres pages sur : php formulaires mail

23 Août 2006 00:52:44

1. <?php
2. $login = $_POST['prenom'];
3. $pass = $_POST['nom'];
4. mail('grand@schtroumpf.com','Retour formulaire','Prenom : '.$login.' NOM : '.$pass);
5. ?>
Anonyme
23 Août 2006 01:02:59

Doh! Merci Okinou.
Ca m'énerve je suis jamais loin ...
je devrais peut-être un jour lire des cours de PHP ...
Contenus similaires
23 Août 2006 01:03:27

htmlentities($_POST['nom']); si tu veux pas te retrouver avec des ptites surprises d'un ptit malin... genre du javacript dans le mail =)
Anonyme
23 Août 2006 01:06:02

Tu voudrais que je rajoute "htmlentities" devant $_POST['nom']; ?
23 Août 2006 12:12:24

Comme dit Aurel, tu peut faire :

$login = htmlentities($_POST['prenom']);
$pass = htmlentities($_POST['nom']);

Pour que ce soit plus facile, je te conseil de nommer les variables avec des nom facile afin de ne pas te perdre dans la relecture du code, et meme pour les autres.

Exemple concret, plutot que de mettre $login pour prenom et $pass pour nom, pourquoi ne met tu pas $prenom et $nom ?
Anonyme
24 Août 2006 09:59:05

Ok merci, je comprends.

Maintenant je me demandais si c'était possible que la page HTML avec le formulaire envois des infos à 2 pages en même temps. Donc que ça donne quelque chose comme ça:

  1. <form action="go.php && go2.php" method="post">
  2. <p>Prenom :
  3. <input type="text" name="prenom" /></p>
  4. <p>Nom :
  5. <input type="text" name="nom /></p>
  6. <p><input type="submit" value="envoyer le formulaire" /></p>
  7. </form>


Mais bien sûr cette technique-la, ne marche pas. Ainsi que si je mets une virgule.

Merci d'avance.
24 Août 2006 11:25:26

Oh misère....
1. Apprend le php et le html stp.
2. Qu'est-ce-qu'il y a de si important dans go2.php que tu ne puisse pas le mettre dans go.php ?
3. définit/utilise des fontions et/ou des classes php -> manuel php > fonctions/classes
Anonyme
24 Août 2006 13:17:23

Si c'est pour répondre comme ça, pas la peine de poster ... ¬¬
24 Août 2006 13:36:35

Excuse-moi, je reformule :
- tu n'as pas besoins normalement de rediriger ton formulaire si ton code php est bien agencé, et respect des règles simple de bonne pratique de la programmation.
- je te conseil de te renseigner sur le mot clé fonction en php. il peut surement t'aider.

ps :
en 1, je constatais juste que tu essayais la programmation par tatonnement et pas en te référent qu manuel php.
en 2, je te demandais ce qu'il y avait dans go2.php, ou le but de rediriger vers 2 pages.
en 3, je te conseiller de nettoyer ton code et d'utiliser des classes et des fonctions.

Amicalement
Les formules de politesses d'usages
tout ca tout ca...
24 Août 2006 15:46:36

tu peut envoyer vers go.php et dans go.php tu met :
  1. 1. <?php
  2. 2. $login = $_POST['prenom'];
  3. 3. $pass = $_POST['nom'];
  4. 4. mail('xxx@mail1.com','Retour formulaire','Prenom : '.$login.' NOM : '.$pass);
  5. 5. mail('yyy@mail2.com','Retour formulaire','Prenom : '.$login.' NOM : '.$pass);
  6. 6.?>


Ou aussi faire un while ou tu défini $mail1 et $mail2 dans deux variables mais pour jsute deux mails je pense que tu peut t'en passer :) 


Anonyme
24 Août 2006 20:53:02

Vinz42 a dit :
Excuse-moi, je reformule :
- tu n'as pas besoins normalement de rediriger ton formulaire si ton code php est bien agencé, et respect des règles simple de bonne pratique de la programmation.
- je te conseil de te renseigner sur le mot clé fonction en php. il peut surement t'aider.

ps :
en 1, je constatais juste que tu essayais la programmation par tatonnement et pas en te référent qu manuel php.
en 2, je te demandais ce qu'il y avait dans go2.php, ou le but de rediriger vers 2 pages.
en 3, je te conseiller de nettoyer ton code et d'utiliser des classes et des fonctions.

Amicalement
Les formules de politesses d'usages
tout ca tout ca...


Merci pour ta réponse et merci pour le fait que tu ai pris la peine de te reprendre.

Concernant mes méthodes de travaille, j'ai toujours tatonné et je n'ai jamais acheté ou lu de livre concernant la création Web. Et aujourd'hui j'arrive à faire des sites que l'on pourrai nommé de semi-professionnels. Mais là où tu as raison, c'est que aujourd'hui, où je franchis la porte du PHP j'aurai peut-être besoin d'apprendre les B-A-BAs.

Maintenant pour go & go2, je cherche à envoyé des informations à ces 2 pages mais ce qu'il faut comprendre c'est que ce ne sont pas les même informations. Je voudrais, par exemple, utiliser "prenom" sur go.php et "nom" sur go2.php.

Mais ce que je pense faire, c'est séparé ce formulaire en deux.
Sur ma page HTML du début mettre un formulaire avec le prénom qui envois cet info à go.php et sur ce même go.php: un deuxième formulaire avec le nom, qui envoi les info à go2.php

En tous cas, merci pour vous deux: Vinz42 & Daniel Costa.

Et pour finir, un autre problème, parce qu'une bonne nouvelle n'arrive jamais seule.

Serait-il possible que lorsque l'on clique sur "Submit" à la fin d'un formulairen on ne soit pas automatiquement redirectionné vers la page php ?

Maaarci d'avance. :jap: 
24 Août 2006 21:22:13

écoute tu peux faire comme çA

code pour -> formulaire .php
  1. <?php
  2. // on controle si il a remplis les deux champs
  3. if($_POST['prenom'] && $_POST['nom']){
  4. //recup' des POST
  5. $prenom = $_POST['prenom'];
  6. $nom = $_POST['nom'];
  7.  
  8. // infos du premier mail
  9. $mail1 = 'personn@nul-par.com';
  10. $titre1 = 'Envoye du nom';
  11. $contenu1 = 'Le nom entré '.$nom;
  12.  
  13. //infos du 2nd mail
  14. $mail2 = 'personn@nul-par.com';
  15. $titre2 = 'Envoye du nom';
  16. $contenu2 = 'Le prénom entré '.$prenom;
  17.  
  18. // envoye des mails:
  19. mail($mail1,$titre1,$contenu1);
  20. mail($mail2,$titre2,$contenu2);
  21.  
  22. //on affiche le message comme quoi c'est bien posté
  23. echo 'Formulaire bien envoyé<br /><br />';
  24. }
  25. echo '<form action="formulaire.php" method="post">
  26. <p>Prenom :
  27. <input type="text" name="prenom" /></p>
  28. <p>Nom :
  29. <input type="text" name="nom /></p>
  30. <p><input type="submit" value="envoyer le formulaire" /></p>
  31. </form>';
  32. ?>


voila mais faut maintenant protégé les post et autres mais pour un petit site ça doit suffire
25 Août 2006 10:14:14

Anonyme a dit :

Mais ce que je pense faire, c'est séparé ce formulaire en deux.
Sur ma page HTML du début mettre un formulaire avec le prénom qui envois cet info à go.php et sur ce même go.php: un deuxième formulaire avec le nom, qui envoi les info à go2.php
Pour faire ça, tu auras besoin de javascript du genre "form.submit" (recherche la syntaxe exacte sur google).
Mais ce n'est pas la solution optimale.
Je persiste en disant de faire de la facon suivante :
- Créer un fichier tools.php
- écris des fonctions génériques
- appel ces fonctions à partir du fichier go.php.
Anonyme a dit :

En tous cas, merci pour vous deux: Vinz42 & Daniel Costa.

De rien.
Anonyme a dit :

Et pour finir, un autre problème, parce qu'une bonne nouvelle n'arrive jamais seule.

Serait-il possible que lorsque l'on clique sur "Submit" à la fin d'un formulairen on ne soit pas automatiquement redirectionné vers la page php ?

Maaarci d'avance. :jap: 

Tu es redirigé vers la page en paramètre du formulaire :
dans ton formulaire, tu as un code du genre :
<form action="formulaire.php">

tu peux mettre la page que tu veux.
Anonyme
25 Août 2006 10:56:45

Nan, en faite ce que je voudrais c'est que je reste sur la même page après avoir cliqué sur Go!.
Et si j'ai bien compris ce que tu me propose c'est de changer le lien de la page php qui interpretra les données.

Et puis je n'utilise pas "<form action="go.php">"
J'utilise "<form name="data" method="post" action="go.php">"

Je ne sais pas si ça change quelque chose, mais je trouve ça plus joli !
25 Août 2006 11:09:11

1. Renseigne toi sur le net sur la balise form.
2. j'ai écourté la balise
3. Si tu met action="#", tu restes sur la même page.
25 Août 2006 23:29:32

Ou sinon, je sais pas si c'est très cool mais ça a le mérite de fonctionner...

Tu met <form method="post" action="tonformulaire.php">
<balise>etc etc...
<input type="submit" name="envoi" value="Enregistrer"/></form>

Et dans ce même formulaire, tu met tout en haut de ta page une tite balise PHP
<?php if(isset($_POST['envoi'])&&$_POST['envoi']=="Enregistrer"){
éxécution du reste du code de traitement des info du formulaire
}?>

Avantage: ça fait ce que tu veux
Inconvénient: Si tu laisse le code comme ça, les variable POST ne seront pas détruite immédiatement ce qui inclu la variable $_POST['envoi']...Ceci peut créer un problème si ton code gère une BDD (ou des mail) car si on appui sur F5 (Actualiser la page), $_POST['envoi'] sera encore défini donc le code sera rééxécuté :s...Pour parer a ça, tu met le traitement PHP tout en haut de la page (avant <head></head> et autre balise HTML) et avant la fin du PHP tu rajoute les lignes suivante :
unset($_POST['envoi']);//Détruit la variale $_POST['envoi']
header('location:tonformulaire.php');//Redirige instantanément vers le meme formulaire

Et vala :) 
26 Août 2006 14:23:53

euh il me semble qu'il y ait un probleme juste en relisant le dernier post, car il me semble avoir lu que la fonction header('') ne peut pas etre dans du code html sinon ça redirige pas
genre :
  1. <html>
  2. <head>
  3. <head>
  4. <body>
  5. <?php header('Location: index.php'); ?>
  6. </body>


mais bon rester a tester j'ai lui ça il me semble mais je suis pas 100% sur
26 Août 2006 14:27:16

une idée mais je sais pas si c'est orthodox :
  1. // juste avant la ligne qui expedi les emails ---
  2. $_SESSION['formulaire_email_oki'] == 1;
  3.  
  4. // quand tu controle si les donnée son rentrées tu rajoutes ---
  5. && $_SESSION == 0
26 Août 2006 15:48:55

Non...La fonction header comme la fonction de gestion des cookies doit etre placée avant toute balise HTML....Mais rien ne t'empeche de mettre du HTML après la fonction header....C'est aussi pour ça que je disais de déplacer le bloc de traitement PHP tout en haut de la page avant même les balise <head></head> et cie...Après ceci n'est valable QUE pour la fonction de redirection...Mais si on prend le header dans la génération d'une Image avec LibGD2 (par exemple), jusque là il m'a même été impossible de rajouter d'autre instruction PHP autre que celle qui gèrent l'image actuelle (par exemple des requete SQL pour dessiner a partir d'un contenu de données d'une base)
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS