script formulaire + newsletter

script formulaire + newsletter - PHP - Programmation

Marsh Posté le 26-01-2009 à 11:38:16    

Bonjour à tous
 
Je cherche un script PHP qui permet de réaliser un formulaire de contact, mais avec base de données. Le but étant de récupérer les email pour l'envoi d'une newsletter.
 
J'en ai essayé plusieurs mais pour l'instant sans succès

Reply

Marsh Posté le 26-01-2009 à 11:38:16   

Reply

Marsh Posté le 27-01-2009 à 18:38:56    

Salut,
c'est pas forcément difficile à réaliser, il suffit juste à l'envoi du mail de faire un INSERT dans une table que t'auras au préalable créée.
 
Attention cependant à avertir les utilisateurs que leur email sera stocké dans une base, et à fournir un système de désinscription ...


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 28-01-2009 à 08:49:16    

Un truc comme ça : ?
INSERT INTO mail_tbl VALUES('mail')
 
mon formulaire actuel ne gere aucune BDD, comment la déclarer?

Reply

Marsh Posté le 29-01-2009 à 14:57:35    

Est ce que cela suffit pour inscrire le mail dans une table :  
 
$db = mysql_connect('localhost', 'login', 'password');
$sql = "INSERT INTO mail_tbl(email) VALUES('$email')";  
 
???

Reply

Marsh Posté le 29-01-2009 à 15:13:49    

Pour faire simple:

 

Il faut que tu crée une base de donnée (généralement c'est Mysql)
Tu fais ton formulaire en html
Tu fais une page de récupération en php qui va traiter ton formulaire et envoyer les données dans la base de données.

 

Je suppose que tu débute et que tout ca n'est pas clair pour toi.

 

Je donne souvent ce lien: http://www.siteduzero.com/tutoriel [...] c-php.html

 

Je pense que c'est parfaitement adapté pour toi ;)


Message édité par aspirateur le 29-01-2009 à 15:14:04
Reply

Marsh Posté le 29-01-2009 à 18:57:32    

Merci
 
J'ai une BDD
J'ai un formulaire en php
J'aimerai simplement y ajouter une connection à la base pour y mettre les email

Reply

Marsh Posté le 30-01-2009 à 08:21:34    

Le lien que je t'ai donné va t'expliquer comment faire.

Reply

Marsh Posté le 30-01-2009 à 08:44:23    

Merci aspirateur, c'est gentil de mexpliquer les bases du PHP par un lien internet mais ce n'est pas ma question. Je sais ce que c'est une fonction ou une variable.
 
Je voudrais juste savoir comment on ajoute une entrée sur une table

Reply

Marsh Posté le 30-01-2009 à 08:57:27    

Je te donne un lien qui va répondre à ta question. Si tu prends la peine d'aller voir, tu verra que tout ce que tu demande est sur ce site et en plus tu comprendra comment ca fonctionne (ce qui est quand même mieux).
 
Tiens voila le lien direct qui te dit comment enregistrer des données dans ta base: http://www.siteduzero.com/tutoriel [...] #ss_part_1
 
Maintenant si tu veux qu'on t'apporte de l'aide, y'a pas de soucis, affiche nous ton code et on te filera un coup de main. Mais essaye déjà d'avancer un peu avec les infos présentes dans le lien que je t'ai donné.

Reply

Marsh Posté le 30-01-2009 à 10:02:03    

Super ce lien ;)
 
J'ai donc un formulaire qui récupère l'email de cette facon :  
 

Code :
  1. <p>Votre adresse email:<input type="text" name="email" value=""></p>


 
et mon fichier php  
 

Code :
  1. <?php
  2. }
  3. if (isset($_POST['submit'])){
  4. $to = 'adresse@free.fr' ;
  5. $subject = 'Demande d\'info';
  6. $body = '<html>
  7.    <head>
  8.     <title>Recontacter cette personne</title>
  9.    </head>
  10.    <body>
  11.      <strong>texte :</strong><br>
  12.      <p>'.$_POST['comment'].'</p>
  13.      <p>Mon num&eacute;ro de t&eacute;l&eacute;phone : '.$_POST['tel'].'</p>
  14.    </body>
  15.   </html>';
  16.   .....


 
Si j'ai compris j'ajoute ça :  
 

Code :
  1. <?php
  2. mysql_connect("localhost", "login", "pwd" );
  3. mysql_select_db("mail" );
  4. "INSERT INTO mail_tbl(mail) VALUES('$mail')";
  5. mysql_close();
  6. ?>

Reply

Marsh Posté le 30-01-2009 à 10:02:03   

Reply

Marsh Posté le 30-01-2009 à 10:13:22    

Je vois pas la valeur de $_POST['mail'] C'est pas ca que tu veux ajouter à ta base?

 

Bon je suppose que ton formulaire envoi l'adresse mail, un commentaire et le tel.

 

Imaginons la table "mail" dans ta base de données. Elle contient les champs:"id", "email", "tel" et "commentaire".

 

Les champs de ton formulaire:

Code :
  1. <input type="text" name="email" value="">
  2. <input type="text" name="tel" value="">
  3. <input type="text" name="commentaire" value="">
 

Le traitement php du formulaire serait:

 
Code :
  1. <?php
  2. //code de récup du formulaire
  3.  
  4. //on enregistre les données du formulaire dans des variables c'est optionnel mais c'est plus clair
  5. $email = $_POST['email'];
  6. $tel = $_POST['tel'];
  7. $commentaire = $_POST['commentaire'];
  8.  
  9. //on se connecte à ta base
  10. mysql_connect("localhost", "login", "pwd" );
  11. mysql_select_db("mail" );
  12.  
  13. //on enregistre les données:
  14. mysql_query("INSERT INTO mail VALUES('', '$email', '$tel', '$commentaire')" );
  15.  
  16. // on se deconnecte de la base
 

Ca te semble clair?

Message cité 1 fois
Message édité par aspirateur le 30-01-2009 à 10:13:42
Reply

Marsh Posté le 30-01-2009 à 11:29:14    

super clair, je vais essayer cela
sauf que je veux juste stoquer les email, les commentaires et numtel sont juste envoyé dans le mail, pas besoin de les conserver.

Reply

Marsh Posté le 30-01-2009 à 11:45:17    

ben dans ce cas, ta table "mail" doit contenir deux champs: "id" et "email".
 
La requete d'ajout sera alors:
 
mysql_query("INSERT INTO mail VALUES('', '$email')" );

Reply

Marsh Posté le 30-01-2009 à 18:13:16    

a marche pô
Ya une erreur quelque part mais ou???
 
je met ici mon fichier complet :  
 
 

Code :
  1. <?php
  2. $cryptogramme = TRUE;
  3. $format = 'html'; 
  4. $foncmail = 'mail';
  5. $hostsmtp = '';
  6. $portsmtp = '25';
  7. $authsmtp = true;
  8. $usersmtp = '';
  9. $passmtp = '';
  10. session_start();
  11. $included_files = get_included_files();
  12. require(dirname(__FILE__).'/include/fonctions.php');
  13. if(VerifUrl($_SERVER['REQUEST_URI'], $included_files, dirname(__FILE__))){
  14. ?>
  15. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  16. <html>
  17. <head>
  18. <title>Formulaire de contact</title>
  19. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  20. <meta name="revisit-after" content="1">
  21. <meta name="description" content="EXmail 1.2">
  22. <meta name="keywords" content="exmail">
  23. <meta name="robots" content="ALL">
  24. <meta name="distribution" content="Global">
  25. <meta name="rating" content="General">
  26. <meta name="copyright" content="Steuf">
  27. <meta name="author" content="Steuf">
  28. <link rel="stylesheet" type="text/css" href="contact.css">
  29. </head>
  30. <body>
  31. <?php
  32. }
  33. if (isset($_POST['submit'])){
  34. $to = '000000@free.fr' ;
  35. $subject = 'Demande d\'info';
  36. $body = '<html>
  37.    <head>
  38.     <title>Recontacter cette personne</title>
  39.    </head>
  40.    <body>
  41.      <strong>texte :</strong><br>
  42.      <p>'.$_POST['comment'].'</p>
  43.      <p>Mon num&eacute;ro de t&eacute;l&eacute;phone : '.$_POST['tel'].'</p>
  44.    </body>
  45.   </html>';
  46. if(!CheckEmail($_POST['email'])){
  47.  $error[] = '<p class="erreur">Votre adresse Email n\'est pas valide !</p>';
  48. }
  49. if(empty($_POST['tel'])){
  50.  $error[] = '<p class="erreur">Vous n\'avez pas mis votre num&eacute;ro de t&eacute;l&eacute;phone !</p>';
  51. }
  52. if((empty($_POST['cryptogramme']) or $_POST['cryptogramme'] !== $_SESSION['captcha-control']) and $cryptogramme === TRUE){
  53.  $error[] = '<p class="erreur">Cryptogramme invalide !</p>';
  54. }
  55. if(isset( $_FILES['upload_localfile']['tmp_name']) and is_uploaded_file($_FILES['upload_localfile']['tmp_name'])){
  56.  $destination = dirname(__FILE__).'/upload/'.$_FILES['upload_localfile']['name'];
  57.  if(move_uploaded_file($_FILES['upload_localfile']['tmp_name'], $destination)){
  58.   $uploadinfo = '<p class="erreur">Upload R&eacute;ussi</p>';
  59.  }
  60. }
  61. else {
  62.  $uploadinfo = '<p class="erreur"><p>';
  63. }
  64. if(!isset($error) or empty ($error)) {
  65.  $reqclass = dirname(__FILE__).'/include/class.phpmailer.php';
  66.  require_once ( $reqclass );
  67.  $mail = new PHPmailer();
  68.  if($foncmail === 'mail'){
  69.   $mail->IsMail();
  70.  }
  71.  elseif($foncmail === 'smtp'){
  72.   $mail->IsSMTP();
  73.   $mail->Host = $hostsmtp;
  74.   $mail->Port = $portsmtp;
  75.   $mail->SMTPAuth = $authsmtp;
  76.   $mail->Username = $usersmtp;
  77.   $mail->Password = $passmtp;
  78.  }
  79.  if($format === 'html'){
  80.   $mail->IsHTML(true);
  81.  }
  82.  elseif($format === 'texte'){
  83.   $mail->IsHTML(false);
  84.  }
  85.  $mail->From = $_POST['email'];
  86.  $mail->FromName = $_POST['nom'];
  87.  $mail->AddAddress( $to );
  88.  $mail->Subject = $subject ;
  89.  $mail->Body = stripslashes( $body );
  90.  if(isset($destination)){
  91.   $mail->AddAttachment( $destination );
  92.  }
  93.  if(!$mail->Send()){
  94.   echo '<p class="erreur">Erreur fonction mail() :</p>';
  95.   echo $mail->ErrorInfo;
  96.  }
  97.  else{
  98.   echo $uploadinfo;
  99.   echo '<p class="erreur"></br></br>Formulaire envoy&eacute; !</br></br>Merci de votre message!</br></br>Vous allez recevoir une réponse très prochainement.</br></br><a href="http://www.site.com/"><img border="0" src="contact/bt_fermer.gif" width="57" height="15"></a></p>';
  100.  }
  101.  unset($mail);
  102. }
  103. else {
  104.  foreach($error as $errormsg){
  105.     echo $errormsg;
  106.  }
  107.  echo '<p class="erreur">Le Formulaire n\'a pas &eacute;t&eacute; envoy&eacute;</p>
  108.   <p class="erreur">Veuillez recommencer !</p>';
  109. }
  110. if (isset($destination)){
  111.  unlink($destination);
  112. }
  113. }
  114. if (((isset($error) or !empty ($error)) and isset($_POST['submit'])) or  !isset($_POST['submit'])){
  115. include(dirname(__FILE__).'/formulaire.php');
  116. }
  117. if(VerifUrl($_SERVER['REQUEST_URI'], $included_files, dirname(__FILE__))){
  118. ?>
  119. <?php
  120. //on enregistre les données du formulaire dans des variables
  121. $email = $_POST['email'];
  122. //on se connecte à ta base (serveur, nom, pwd)
  123. mysql_connect("db641.1and1.fr:/tmp/mysql5.sock", "dbo174296392", "*******" );
  124. //selction de la base
  125. mysql_select_db("db174296392" );
  126. //on enregistre les données dans la table
  127. mysql_query("INSERT INTO email VALUES('', '$email')" );
  128. // on se deconnecte de la base
  129. mysql_close();
  130. ?>
  131. </body>
  132. </html>
  133. <?php } ?>


 
Et l'imprim ecran de la base : http://www.weplug.com/images_1/f96 [...] 171820.jpg


Message édité par titi63 le 30-01-2009 à 18:21:31
Reply

Marsh Posté le 30-01-2009 à 18:50:43    

Tu peux mettre le message d'erreur?
Ton mysql_connect est bon? Ton adresse de serveur est un peu étrange

Reply

Marsh Posté le 30-01-2009 à 18:59:18    

pas de msg d'erreur
quand j'interroge ma bdd j'ai ca : MySQL n'a retourné aucun enregistrement. (traitement: 0.0592 sec.)  
pour l'adresse c'est pourtant ça qui est donné
J'ai essayé en supprimant : :/tmp/mysql5.sock
mais c'est pareil

Reply

Marsh Posté le 30-01-2009 à 20:27:29    

rajoute
or die(mysql_error())
 
à la fin de ta requete pour afficher le message d'erreur.

Reply

Marsh Posté le 31-01-2009 à 01:49:44    

aspirateur a écrit :

Je vois pas la valeur de $_POST['mail'] C'est pas ca que tu veux ajouter à ta base?
 
Bon je suppose que ton formulaire envoi l'adresse mail, un commentaire et le tel.
 
Imaginons la table "mail" dans ta base de données. Elle contient les champs:"id", "email", "tel" et "commentaire".
 
Les champs de ton formulaire:

Code :
  1. <input type="text" name="email" value="">
  2. <input type="text" name="tel" value="">
  3. <input type="text" name="commentaire" value="">


 
Le traitement php du formulaire serait:
 

Code :
  1. <?php
  2. //code de récup du formulaire
  3.  
  4. //on enregistre les données du formulaire dans des variables c'est optionnel mais c'est plus clair
  5. $email = $_POST['email'];
  6. $tel = $_POST['tel'];
  7. $commentaire = $_POST['commentaire'];
  8.  
  9. [...]


 
Ca te semble clair?


 
Parce que ce n'est qu'un exemple simple, je suppose que tu n'as pas pris le temps/la peine d'être plus précis, mais on ne récupère pas seulement avec un $_POST : oui $_POST['name_du_champ_de_formulaire'] contient ce qu'on cherche, mais à l'origine c'est envoyé par le navigateur, donc le visiteur derrière. Et il faut sécuriser tout ça...
voir du côté de htmlentities si besoin d'afficher, ou de addslashes si besoin, ou mieux, mysql_real_escape_strings.


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 31-01-2009 à 11:51:46    

Oui et teste l'existence des variables avant de lancer l'enregistrement.

Reply

Marsh Posté le 03-02-2009 à 08:07:53    

bon en fait le scipt ne fonctionne pas si je le met entre  
<?php et ?>
 
mais fonctionne si j'inclue les ligne dans le script d'envoie de l'email
 

Code :
  1. <?php
  2. $cryptogramme = TRUE;
  3. $format = 'html'; 
  4. $foncmail = 'mail';
  5. $hostsmtp = '';
  6. $portsmtp = '25';
  7. $authsmtp = true;
  8. $usersmtp = '';
  9. $passmtp = '';
  10. session_start();
  11. $included_files = get_included_files();
  12. require(dirname(__FILE__).'/include/fonctions.php');
  13. if(VerifUrl($_SERVER['REQUEST_URI'], $included_files, dirname(__FILE__))){
  14. ?>
  15. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  16. <html>
  17. <head>
  18. <title>Formulaire de contact</title>
  19. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  20. <meta name="revisit-after" content="1">
  21. <meta name="description" content="EXmail 1.2">
  22. <meta name="keywords" content="exmail">
  23. <meta name="robots" content="ALL">
  24. <meta name="distribution" content="Global">
  25. <meta name="rating" content="General">
  26. <meta name="copyright" content="Steuf">
  27. <meta name="author" content="Steuf">
  28. <link rel="stylesheet" type="text/css" href="contact.css">
  29. </head>
  30. <body>
  31. <?php
  32. }
  33. if (isset($_POST['submit'])){
  34. $to = '***@free.fr' ;
  35. $subject = 'Demande d\'info *';
  36. $body = '<html>
  37.    <head>
  38.     <title>Recontacter cette personne</title>
  39.    </head>
  40.    <body>
  41.      <strong>texte :</strong><br>
  42.      <p>'.$_POST['comment'].'</p>
  43.      <p>Mon num&eacute;ro de t&eacute;l&eacute;phone : '.$_POST['tel'].'</p>
  44.    </body>
  45.   </html>';
  46. if(!CheckEmail($_POST['email'])){
  47.  $error[] = '<p class="erreur">Votre adresse Email n\'est pas valide !</p>';
  48. }
  49. if(empty($_POST['tel'])){
  50.  $error[] = '<p class="erreur">Vous n\'avez pas mis votre num&eacute;ro de t&eacute;l&eacute;phone !</p>';
  51. }
  52. if((empty($_POST['cryptogramme']) or $_POST['cryptogramme'] !== $_SESSION['captcha-control']) and $cryptogramme === TRUE){
  53.  $error[] = '<p class="erreur">Cryptogramme invalide !</p>';
  54. }
  55. if(isset( $_FILES['upload_localfile']['tmp_name']) and is_uploaded_file($_FILES['upload_localfile']['tmp_name'])){
  56.  $destination = dirname(__FILE__).'/upload/'.$_FILES['upload_localfile']['name'];
  57.  if(move_uploaded_file($_FILES['upload_localfile']['tmp_name'], $destination)){
  58.   $uploadinfo = '<p class="erreur">Upload R&eacute;ussi</p>';
  59.  }
  60. }
  61. else {
  62.  $uploadinfo = '<p class="erreur"><p>';
  63. }
  64. if(!isset($error) or empty ($error)) {
  65.  $reqclass = dirname(__FILE__).'/include/class.phpmailer.php';
  66.  require_once ( $reqclass );
  67.  $mail = new PHPmailer();
  68.  if($foncmail === 'mail'){
  69.   $mail->IsMail();
  70.  }
  71.  elseif($foncmail === 'smtp'){
  72.   $mail->IsSMTP();
  73.   $mail->Host = $hostsmtp;
  74.   $mail->Port = $portsmtp;
  75.   $mail->SMTPAuth = $authsmtp;
  76.   $mail->Username = $usersmtp;
  77.   $mail->Password = $passmtp;
  78.  }
  79.  if($format === 'html'){
  80.   $mail->IsHTML(true);
  81.  }
  82.  elseif($format === 'texte'){
  83.   $mail->IsHTML(false);
  84.  }
  85.  $mail->From = $_POST['email'];
  86.  $mail->FromName = $_POST['nom'];
  87.  $mail->AddAddress( $to );
  88.  $mail->Subject = $subject ;
  89.  $mail->Body = stripslashes( $body );
  90. //on se connecte à ta base (serveur, nom, pwd)
  91. mysql_connect("db641.1and1.fr", "dbo174296392", "qMX6tZFr" );
  92. //selction de la base
  93. mysql_select_db("db174296392" )or die("Ouverture base impossible" );
  94. //on enregistre les données dans la table
  95. mysql_query("INSERT INTO email VALUES('', '$email')" )or die(mysql_error());
  96. // on se deconnecte de la base
  97. mysql_close();
  98.  if(isset($destination)){
  99.   $mail->AddAttachment( $destination );
  100.  }
  101.  if(!$mail->Send()){
  102.   echo '<p class="erreur">Erreur fonction mail() :</p>';
  103.   echo $mail->ErrorInfo;
  104.  }
  105.  else{
  106.   echo $uploadinfo;
  107.   echo '<p class="erreur"></br></br>Formulaire envoy&eacute; !</br></br>Merci de votre message!</br></br>Vous allez recevoir une réponse très prochainement.</br></br><a href="http://www.creasite-auvergne.com/"><img border="0" src="contact/bt_fermer.gif" width="57" height="15"></a></p>';
  108.  }
  109.  unset($mail);
  110. }
  111. else {
  112.  foreach($error as $errormsg){
  113.     echo $errormsg;
  114.  }
  115.  echo '<p class="erreur">Le Formulaire n\'a pas &eacute;t&eacute; envoy&eacute;</p>
  116.   <p class="erreur">Veuillez recommencer !</p>';
  117. }
  118. if (isset($destination)){
  119.  unlink($destination);
  120. }
  121. }
  122. if (((isset($error) or !empty ($error)) and isset($_POST['submit'])) or  !isset($_POST['submit'])){
  123. include(dirname(__FILE__).'/formulaire.php');
  124. }
  125. if(VerifUrl($_SERVER['REQUEST_URI'], $included_files, dirname(__FILE__))){
  126. ?>
  127. </body>
  128. </html>
  129. <?php } ?>

Reply

Marsh Posté le 03-02-2009 à 08:09:39    

maintenant si j'envoie 2 demandes avec le même mail, il s'inscrit deux fois (le même) dans la BDD
 
peut être une condition a rajouter pour éviter une duplication dans la base?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed