[php] envoi de mail de confirmation, suppression si > 24h

envoi de mail de confirmation, suppression si > 24h [php] - PHP - Programmation

Marsh Posté le 15-02-2007 à 23:32:13    

salut à tous,
 
je suis en train de réaliser un site mais je galere un peut sur l'envoi de confirmation de mail après saisi d'un formulaire, j'obtien une page blanche aprés click sur le bouton envoi du formulaire. Voici donc mon code php :
 

Code :
  1. <?php
  2. include('include/connexion_bdd.php');
  3. $mail= "".htmlentities($_POST['mail'])."";
  4. $titre= "".htmlentities($_POST['titre'])."";
  5. $nom= "".htmlentities($_POST['nom'])."";
  6. $prenom= "".htmlentities($_POST['prenom'])."";
  7. $adresse= "".htmlentities($_POST['adresse'])."";
  8. $cp= "".htmlentities($_POST['cp'])."";
  9. $ville= "".htmlentities($_POST['ville'])."";
  10. $pays= "".htmlentities($_POST['pays'])."";
  11. $telephone= "".htmlentities($_POST['telephone'])."";
  12. $jj= "".htmlentities($_POST['jj'])."";
  13. $mm= "".htmlentities($_POST['mm'])."";
  14. $aa= "".htmlentities($_POST['aa'])."";
  15. $mois=$mm+1;
  16. $datenaiss = $jj."-".$mois."-".$aa;
  17. //verification des entrées dans la bdd pour détécter un utilisateur déja enregistré
  18. //$requete2=mysql_query("select * from utilisateurs where login = '$val'" );
  19. $requete3=mysql_query("select * from utilisateurs where mail = $mail" );
  20. //stock le résultat de la requete dans une variable
  21. //$sql=mysql_fetch_array($requete2);
  22. $sql2=mysql_fetch_array($requete3);
  23. //si la requete ne renvoi rien (pas d'existance de pseudo ni de mot de passe), on enregistre dans la bdd
  24. if($sql2 == null)
  25. {
  26. $requete=mysql_query("INSERT INTO utilisateurs (id_user,login,pass,nom,prenom,mail,titre,adresse,cp,ville,pays,tel,datenaiss,date_crea)
  27. VALUES('','','','$nom','$prenom','$mail','$titre','$adresse','$cp','$ville','$pays','$tel','$datenaiss',NOW())" );
  28. echo "<br><br><center>La création de votre compte à réussi</center><br><br>";
  29.     $Corps = "Bonjour,";
  30.     $Corps .= "<BR>";
  31.     $Corps .= "Pour valider votre inscription dans la base de données, ";
  32.     $Corps .= "<a href='http://localhost/site/confirmation.php?conf=1'>";   
  33.     $Corps .= "veuillez cliquer sur ce lien";
  34.     $Corps .= "</a> s'il vous plait";
  35.     mail(toto@neuf.fr,"Confirmation dinscription" , $Corps , "Content-type: text/html" );
  36. echo " Merci de votre inscription. Pour la valider, relevez vos E-Mails : un nouveau message vient de vous être envoyé avec les instructions nécessaires.";
  37. }
  38. else
  39. {
  40. echo '<br><br><br><center><img src="images/warning.gif" ><br><br><br><b><FONT COLOR="red" >Cet identifiant ou adresse e-mail existe déja ! Merci de recommencer</b></font></center><br><br>';
  41. echo '<FORM> <center><INPUT TYPE="button" VALUE="Retourner au formulaire d\'inscription" onClick="history.back()"></center> </FORM>';
  42. }
  43. //ceci referme la connexion à la base
  44. mysql_close();
  45. ?>
  46. <html>
  47. <head>
  48. <title>Enregistrement</title>
  49. <link rel="stylesheet" media="screen" type="text/css" title="css" href="style/style.css" />
  50. </head>
  51. <body>
  52. <center><a href="index.html"class="lien2">Retourner à la page d'accueil</a> </center>
  53. </body>
  54. </html>


 
En fait sans le code d'envoi du mail, j'ai bien un enregistrement dans la bdd. Ce que je voudrai faire c'est que lorsque l'on reçoi le mail, en cliquant sur le lien on ajoute un 1 dans le champ confirm, mais faudrai deja que l'envoi du mail fonctionne...
 
Et je voudrai aussi savoir comment faire pour que l'activation soit faite sous 24h, sinon la pré inscription (champ conf à null donc) s'efface de la bdd.
voici mon fichier pour la confirmation :
 

Code :
  1. <?php
  2. include('include/connexion_bdd.php');
  3. $requete=mysql_query("INSERT INTO utilisateurs (conf) VALUES('$conf')" );
  4. mysql_close();
  5. ?>


 
merci d'avance pour votre aide.

Reply

Marsh Posté le 15-02-2007 à 23:32:13   

Reply

Marsh Posté le 16-02-2007 à 08:54:32    

A. Il faudrait mieux que tu créés une chaine de caractères pour la confirmation:

Code :
  1. $chaine = "abcdefghijklmnopqrstuvwxyz0123456789";
  2.  $confirm = str_shuffle($chaine);


puis tu inserts la variable $confirm dans un champs conf de ta table.

 

ensuite, l'utilisateur reçoit un lien par mail qui l'amene sur cette page : (ou alors le lien l'amene directement sur le case4)

Code :
  1. echo ' <strong style="font-family:\'Century Gothic\'; font-size:19px; color:#808080">Inscription 3/4</strong><p></p>';
  2.  echo '<font size="+1">Bravo '.$login.' !</font><br>
  3.  Vous êtes maintenant inscrit sur Mxtrem.<p></p>';
  4.  echo 'Avant de pouvoir bénéficier de tous les avantages liés à la création de votre compte, vous devez confirmer votre
  5.  inscription par le biais d\'un email qui vous a été envoyé à <b>'.$mail.'.<p></p>';
  6.  echo '<form action="signup.php?go=4&login='.$login.'" method="Post">';
  7.  echo '<center>';
  8.  echo '<table cellspacing="1px" cellpadding="0" bgcolor="#000000" width="500px"><tr><td>';
  9.  echo '<table cellspacing="0px" cellpadding="0" bgcolor="#F1F1F1" width="100%"><tr><td align="left">';
  10.  echo '<b>Collez ci-dessous le code d\'activation que vous avez reçu par email:';
  11.  echo '<p></p>';
  12.  echo '<center><input type="text" name="confirm" style="width:400px" value=""></center><br>';
  13.  echo '<div align="right"><input type="submit" value="Activer mon compte"></div>';
  14.  echo '</td></tr></table></td></tr></table></form>';
 

et

 
Code :
  1. case 4:
  2.  echo ' <strong style="font-family:\'Century Gothic\'; font-size:19px; color:#808080">Inscription 4/4</strong><p></p>';
  3.   if(empty($confirm))
  4.   {
  5.   echo("<b>Erreur</b><br>" );
  6.   exit("Certains champs ne sont pas remplis." );
  7.   }
  8.  $db = mysql_connect("localhost","root","" ) or die("Connection impossible. Veuillez réessayer d'ici quelques minutes" );
  9.  mysql_select_db("myxtrem",$db) or die ('Erreur :'.mysql_error());
  10.  $search = 'SELECT COUNT(*) as nb FROM members WHERE login = "'.addslashes($_GET['login']).'" AND confirm = "'.addslashes($_POST['confirm']).'"';
  11.  $req = mysql_query($search) or die(mysql_error());
  12.  $data = mysql_fetch_array($req);
  13.  if($data['nb'] == 1)
  14.  {
  15.  $login = @$_GET['login'];
  16.  mysql_query("UPDATE members SET `confirm`='' WHERE `login` ='$login'" ) or die('erreur : '.mysql_error());
  17.  if(file_exists($login)){die("Problème" );}
 


Il faut donc ici que conf soit vide pour que le membre soit inscrit (il s'agit d'une partie de mon lourd script d'inscription, dsl si cay pas evident ;)


Message édité par Mxtrem le 16-02-2007 à 08:55:37
Reply

Marsh Posté le 16-02-2007 à 08:59:13    

ah, et pour la suppression, il faut un cron qui execute toutes les 24h un fichier php recherchant les inscrits > 24H qui ont le la chaine $confirm encore présente dans le conf de la table membre et qui delete les champs qui y sont relatifs ;)
 
(enfin 24H cay un peu juste quand même)

Reply

Marsh Posté le 16-02-2007 à 11:22:15    

désolé les gars mais je début en php la, je suis largué...
 
En fait comme je vous ai dit avant de pouvoir écrire la syntaxe du mail, il me faudrai le code pour ENVOYER le mail, donc si quelqu'un pouvais m'aider à partir de de : if($sql2 == null). Merci pour votre aide
 

Reply

Marsh Posté le 16-02-2007 à 11:52:04    

alors :
 
mail(toto@neuf.fr,"Confirmation dinscription" , $Corps , "Content-type: text/html" );
 
=
 
mail($mail,"Confirmation dinscription" , $Corps , "Content-type: text/html" );
 
 
puis (niveau sécurité cay pas tip/top)
[cpp]
<?php  
$conf = $_GET['conf'];
$nom = $_GET['nom'];
$telephone = $_GET['telephone'];
 
include('include/connexion_bdd.php');  
$requete=mysql_query("UPDATE ta_table SET conf=`$conf`WHERE utilisateurs=`$nom` AND telephone=`$telephone` AND ville=`$ville`);
 
mysql_close();  
?>
 
Le lien envoyé par email doit alors se présenter tel que celui ci dessous dans le module envoyé par email :
http://localhost/site/confirmation [...] telephone.
 
 
attention, par mesure de sécurité je te conseil que lorsque l'utilisateur s'inscrit, une variable est générée en sha1 (non visible) puis incrémentée dans la bdd par sha1(rand()) puis lorsque l'utilisateur confirme le lien la variable sha1rand est récupérée en get et est vérifiée en correlation avec le pseudo ;)
 
voilou

Reply

Sujets relatifs:

Leave a Replay

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