Confirmation email PHP

Fermé
latulipe - 29 mars 2009 à 16:04
 latulipe - 31 mars 2009 à 18:16
Bonjour,

Je débute en php/mySQL et j'utilise WAMP en localhost pour faire tous ces essais...

J'ai créé une ebauche d'espace membre pour mon site en php. Le visiteur remplit un formulaire qui stocke les données dans la BDD, hop une confirmation d'inscription et il a accès à toutes les rubriques du site.

J'ai 2 questions :

1/ La première est relative à ce petit script qui s'execute après inscription : (le probleme est qu'à chaque nouvelle inscription il "ajoute" les nouvelles données c.à.d qu'apparaissent aussi sur la page les données utilisateurs précédemment inscrits... c'est donc assez embêtant puisq'apparaissent tous les mots de passe et compagnie des autres users...)

<?php
$pseudo =$_POST["pseudo"];
$motdepasse=$_POST["motdepasse"];
$email =$_POST["email"];
mysql_connect("localhost", "root", "");
mysql_select_db("baseMEMBRES");
$inscription = mysql_query("INSERT INTO tbl_membre (id, pseudo, motdepasse, email) VALUES('', '$pseudo', '$motdepasse', '$email')") or die(mysql_error());
$reponse = mysql_query("SELECT * FROM tbl_membre") or die(mysql_error());
while ($donnees = mysql_fetch_array($reponse) )
{
?>


<li>

Félicitations
<?php echo $donnees['pseudo']; ?> ! Vous êtes maintenant inscrit comme membre de notre communauté et vous avez désormais accès à toutes les rubriques du site.

<br />

Veuillez prendre bien note de votre mot de passe :
<?php echo $donnees['motdepasse']; ?> qui vous sera demandé à chaque connexion.

</li>

<?php
}
mysql_close();
?>

Si vous pouvez m'aider sur ce script pour qu'il n'affiche SEULEMENT les dernières infos validés et donc relatives au dernier inscrit. Je vous remercie pour vos suggestions.

___________________


2/ (J'avais 2 question)

Ici j'aimerai faire une chose qui semble simple pourtant je bute... Via mon système d'inscription je n'ai aucune possibilité de vérifier la validité d'un mail...

Aussi j'aimerais après l'inscription d'un user (via un formulaire) lui envoyer un '"mail de confirmation" lequel contiendra un lien pour activer son compte. Une fois ce lien cliqué les données sont alors stockées dans la BDD et le client est redirigé sur le site.

Vraiment je débute alors si vous avez des explications (tres) détaillées ou mieux des suggestions de scripts / liens ce serait super !

Si vous voulez l'intégralité de mes scripts déjà crées demandez ! je n'ai pas tout mis pour surcharger le sujet !

Merci à ceux qui prendront le temps de répondre...
A voir également:

7 réponses

S'il vous plait ? Personne pour jeter un petit coup d'oeil à mon problème ?
0
Up ? Une dernière fois...
0
Euh pour la 1ere, il suffit de modifier la requête non?
Il faudrait pas préciser un WHERE pseudo = ?
Je lis le reste. C'est juste pour que tu files pas.
0
Bigfish72 Messages postés 79 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 11 avril 2009 4
30 mars 2009 à 00:21
Salut, pour ta question, c'est simple, ton script demande de parcourir toute ta table donc tu affiches tout.

Mets une clause WHERE dans ta requete

$reponse = mysql_query("SELECT * FROM tbl_membre where pseudo=\"$pseudo\" ") or die(mysql_error());
while ($donnees = mysql_fetch_array($reponse) )
{
}
Mais je ne vois pas l'intérêt de récupérer le mot de passe et pseudo dans la bdd puisque tu as déjà ces valeurs par les variables POST

Et un conseil, crypte tes mots de passe dans ta table, c'est une sécurité importante.

EDIT : on m'a devancé ;)

Pour la deuxième question, c'est simple : tu envois un lien avec un numéro d'activation préalablement enregistré dans ta base au moment de l'inscription. Et tu crées une page "activation.php" qui met une valeur de 1 au lieu de 0 dans un champ "activation". Quand l'utilisateur entre ses identifiants, tu vérifies si activation=0 ou 1
0
(Bah devancé ^^).

Pour la confirmation de l'email, rajoute un champs "date_inscripton" que tu mets à la date où ton utilisateur s'inscrit.
A l'inscription, tu mets ce champs à la date du jour ( https://www.php.net/manual/en/function.date.php ) .
Tu envoies un mail avec un lien par exemple http://monsite.fr/confirmation.php?user=73&key=759432421212 , que tu génères avec un algorithme quelconque par rapport au pseudo ou à l'id de l'inscrit.

Sur ta page confirmation.php,
Tu vérifies avec l'algorithme que "key" est bonne, et tu effaces la date d'inscription.

(J'ai mis ici la date d'inscription pour que tu puisses faire un script qui se lance toutes les X jours et qui nettoie les utilisateurs non-confirmés.)

Si tu veux moins te compliquer la vie, tu peux générer une clée aléatoire avec des chiffres et des lettres, et la mettre dans ta BDD. Et tu vérifies sur la page de confirmation si la clée est OK.

Pour ta page de connexion, il faudra ensuite que tu rajoute un WHERE cle is NULL; ou date_inscription is NULL;

(je sais pas si c'est clair)

Si tu as besoin de précisions, n'hésite pas.

(je parie que quelqu'un m'a encore devancé ^^)
0
Debilou > Debilou
30 mars 2009 à 00:34
(On m'a encore devancé é.è)
0
Désolé je n'avais pas vu vos réponses et merci bien !

Il est un peu tard maintenant alors je risque de voir ça demain... Je débute vraiment en php (vous l'aurez remarqué :D). Pour la première question c'est ok j'ai compris et tout d'un coup ma question semblait bien bête.

_______

Pour la 2ème je ne saisis pas tout (comme la génération d'un algorithme entre autre) . Pouvez vous me donner un exemple précis de script ? Je peux vous envoyer ceux que j'ai déjà si besoin est.

Et pour crypter le mot de passe ? Faut il juste spécifier pass_md5 comme entrée dans la BDD ou y'a t'il des codes php précis ?

Encore une fois je m'excuse mais je débute vraiment le php/mysql...

Et si vous avez un tuto clair sur la confirmation d'email je suis preneur car j'en ai suivi quelques uns trouvé sur internet sans succès
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Laisse tomber l'algorithme de vérification pour l'instant. C'est pas très important c'était juste pour que ta base de données ne soit pas surchargées de comptes non-validés inutiles qui prennent de la place.
Mais vu que tu débutes, c'est pas très important.

Je ferais un exemple de code de confirmation demain soir (cours la journée :/) si j'y pense (suis tête en l'air).
Et j'essairais de bien le commenter pour que ça soit clair.
(P-e que quelqu'un d'autre le fera avant moi).

Bonne nuit à toi,

(et il est pas tard, il est que minuit ! (hein on a changé d'heure !!!))
0
function generer_mdp($len)
{
//On initialise le mot de passe à vide
$r = '';
//On fait une boucle de $len tours pour avoir le bon nombre de caractères.
for($i=0; $i<$len; $i++)
{
//si i%2=0 (c'est à dire que le reste de la division de i par 2 est 0 (nombre pair quoi), on génere un nombre. Rand servant à obtenir un nombre aléatoire entre 0 et 9
if($i%2==0)
$r .= rand(0,9);
else
//si c'est impair, on génère une lettre (si tu veux mieux comprendre cherche "php chr" et "php ord" dans google.
$r .= chr(rand(0, 25) + ord('a'));
}
return $r;
}

<?php
$pseudo =$_POST["pseudo"];
$motdepasse=$_POST["motdepasse"];
$email =$_POST["email"];
mysql_connect("localhost", "root", "");
mysql_select_db("baseMEMBRES");

//On génère une clé avec la fonction précédente., et tu choisis la longueur de la clée que tu veux en paramêtre
$key = generer_mdp(12);
//Il te faut un champs clé dans ta table tbl_membre et tu insères la clé dans ta table
$inscription = mysql_query("INSERT INTO tbl_membre (id, pseudo, motdepasse, email, cle) VALUES('', '$pseudo', '$motdepasse', '$email',".$key.")") or die(mysql_error());
$reponse = mysql_query("SELECT * FROM tbl_membre") or die(mysql_error());

//Envoi du mail de confirmation (vérifie que ton hebergeur autorise l'envoi de mail)
//Note : la j'ai mis last inserted id qui retourne le dernier id inséré dans la base mais tu ferais mieux de faire une requête pour récuperer l'id plutot.
mail($email, 'Confirmation de votre inscription sur trucbidule.com', "Activez votre compte en cliquant sur le lien si dessous\nhttp://www.trucbidule.com/confirmation.php?id=".last_inserted_id()."&key=".$key."\n");

while ($donnees = mysql_fetch_array($reponse) )
{
?>








//confirmation.php
//On vérifie que les paramètres sont là
if(isset($_GET["id"])&&isset($_GET["key"]))
{
//Connexion à la BDD
mysql_connect("localhost", "root", "");
mysql_select_db("baseMEMBRES");

//On récupère la clé stockée dans la BDD qu'on a généré à l'inscription
$reponse = mysql_query("SELECT key FROM tbl_membre WHERE id=".$_GET["id"]);
while ($donnees = mysql_fetch_array($reponse) )
{
//Si la clé dans la base correspond à celle passée dans l'adresse
if(donnees["key"]==$_GET["key"])
{
//On met key a NULL dans la table
mysql_query("UPDATE tbl_membre SET key=NULL WHERE id=".$_GET["id"]);
echo "Votre compte a été activé";
}
}



Ensuite dans ton formulaire de connexion, au lieu de faire
SELECT id FROM tbl_membre WHERE login='toto' and motdepasse="zoubidou";
Tu fais :
SELECT id FROM tbl_membre WHERE login='toto' and motdepasse="zoubidou" AND key=null;


Voilà voilà,
Si c'est pas clair, suis là (ou dans le coin) pour tes questions.
(Euh, j'ai pas codé super bien par contre, avec les déspécialisations qu'il faut etc dicholé ^^).
0
Débilou > Débilou
30 mars 2009 à 20:50
Merde oublié la mise en forme --".
0
Bigfish72 Messages postés 79 Date d'inscription samedi 28 mars 2009 Statut Membre Dernière intervention 11 avril 2009 4
30 mars 2009 à 18:51
Salut,

pour crypter un mot de passe : $mot_de_passe_crypte=md5($mot_de_passe);

Et bien sûr il faut penser à le crypter dans ta page de connexion avant de comparer avec le mot de passe contenu dans la base de données.
0
Désolé je n'avais pas fait attention à vos réponses, je m'en rends compte à l'instant...

Déjà un grand merci pour votre aide, je regarde de plus près tout ça dans la soirée et je reviens si j'ai un soucis !

Encore merci :-)
0