$_SESSION
Résolu
maxime_B
Messages postés
788
Date d'inscription
Statut
Membre
Dernière intervention
-
maxime_B Messages postés 788 Date d'inscription Statut Membre Dernière intervention -
maxime_B Messages postés 788 Date d'inscription Statut Membre Dernière intervention -
bonsoir.
je sais comment utiliser(enfin je crois) les variables $_SESSION.
Ma seule question est comment créer la page qui demande nom d'utilisateur et mot de passe(+ pas encore inscrit??inscrivez-vous ici).
Si quelqu'un s'y connais bien et voudrais bien me dire un peu comment ça fonctionne(je veux dire mail de confirmation d'inscription, comment faire pour autoriser plusieurs personnes après l'inscription, etc...).
J'en demande peut-être beaucoup à la fois, mais svp aidez-moi
merci
je sais comment utiliser(enfin je crois) les variables $_SESSION.
Ma seule question est comment créer la page qui demande nom d'utilisateur et mot de passe(+ pas encore inscrit??inscrivez-vous ici).
Si quelqu'un s'y connais bien et voudrais bien me dire un peu comment ça fonctionne(je veux dire mail de confirmation d'inscription, comment faire pour autoriser plusieurs personnes après l'inscription, etc...).
J'en demande peut-être beaucoup à la fois, mais svp aidez-moi
merci
22 réponses
Salut,
Ca fonctionne en plusieurs étapes.
1) Un formulaire en Html:
http://www.commentcamarche.net/html/htmlform.php3
2)Récupération des données en Php
http://www.commentcamarche.net/php/phpform.php3
3)Stockage du compte créé dans la base de données en lui donnant un statut inactif. Donc pour ça créer une table avec quatres champs : (pseudonyme, password, statut, confirmation).
Tu "hashe" le password grâce à une fonction de hashage:
http://www.commentcamarche.net/crypto/signature.php3 (je te conseille http://fr2.php.net/manual/fr/function.sha1.php )
Puis tu mets le statut à 0 (pour dire qu'il est désactivé).
Je t'explique après en quoi consiste le champs confirmation.
4)Génération d'une chaine de caractère aléatoire assez longue (mettons 32 caractères). Il faut que cette chaine ne corresponde à aucune autre chaine contenue dans le champs confirmation de la table dont j'ai parlé précédemment. Puis tu mets cette chaine dans la ligne de la base de données qui corresponds à l'utilisateur qui vient de s'enregistrer.
5) Envoi d'un email de confirmation avec un lien d'activaton du compte vers http://tonsite/confirmation.php?confirmation=kjhdfkhfgjklhfglhjfgjhgfldfh
Dans ta page confirmation.php, tu récupères la valeur qu'on t'envoie (la valeur que j'ai mise: kjhdfkhfgjklhfglhjfgjhgfldfh c'est juste un exemple, cette chaine doit correspondre à la chaine que tu as générée avant).
Et tu vérifies dans la base de données (la table utilisateurs) si une ligne correspond à cette chaine dans le champs confirmation. Si c'est le cas tu mets le statut à 1 (pour dire qu'il est activé).
Voilà en gros ce que ça donne....
Ca fonctionne en plusieurs étapes.
1) Un formulaire en Html:
http://www.commentcamarche.net/html/htmlform.php3
2)Récupération des données en Php
http://www.commentcamarche.net/php/phpform.php3
3)Stockage du compte créé dans la base de données en lui donnant un statut inactif. Donc pour ça créer une table avec quatres champs : (pseudonyme, password, statut, confirmation).
Tu "hashe" le password grâce à une fonction de hashage:
http://www.commentcamarche.net/crypto/signature.php3 (je te conseille http://fr2.php.net/manual/fr/function.sha1.php )
Puis tu mets le statut à 0 (pour dire qu'il est désactivé).
Je t'explique après en quoi consiste le champs confirmation.
4)Génération d'une chaine de caractère aléatoire assez longue (mettons 32 caractères). Il faut que cette chaine ne corresponde à aucune autre chaine contenue dans le champs confirmation de la table dont j'ai parlé précédemment. Puis tu mets cette chaine dans la ligne de la base de données qui corresponds à l'utilisateur qui vient de s'enregistrer.
5) Envoi d'un email de confirmation avec un lien d'activaton du compte vers http://tonsite/confirmation.php?confirmation=kjhdfkhfgjklhfglhjfgjhgfldfh
Dans ta page confirmation.php, tu récupères la valeur qu'on t'envoie (la valeur que j'ai mise: kjhdfkhfgjklhfglhjfgjhgfldfh c'est juste un exemple, cette chaine doit correspondre à la chaine que tu as générée avant).
Et tu vérifies dans la base de données (la table utilisateurs) si une ligne correspond à cette chaine dans le champs confirmation. Si c'est le cas tu mets le statut à 1 (pour dire qu'il est activé).
Voilà en gros ce que ça donne....
bonjour
alors point 1 et 2 j'y arrive, mais sans vouloir te vexer je ne pige pas grand chose au reste (j'ai essayé pourtant)....
(je ne vois pas trop ce que ça vient faire la dedans au juste, mais tes explications sont pourtant claires et nettes....)
alors point 1 et 2 j'y arrive, mais sans vouloir te vexer je ne pige pas grand chose au reste (j'ai essayé pourtant)....
(je ne vois pas trop ce que ça vient faire la dedans au juste, mais tes explications sont pourtant claires et nettes....)
C'est parce que comme c'est tout un boulot, j'ai beaucoup résumé.
Tu t'es déjà servi d'une base de données en Php?
Tu t'es déjà servi d'une base de données en Php?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je ne vois pas trop ce que c'est le statut 1 et 0.
Plutot ce que j'ai compris: j'ai le formulaire d'inscription, je sais qu'il faut une page login, deconnection en plus.
Je ne sais pas trop quoi mettre dans la BDD mais ce que je comprends le moins, c'est la methode de "hachage".je ne vois pas trop ce que c'est.C'est pour pouvoir mettre un statut 1 ou 0 si j'ai bien comprit, mais alors je ne sais pas comment ça s'utilise ni ce que je dois faire avec.
J'ai peut-être l'air bête en disant tout ça mais...
Plutot ce que j'ai compris: j'ai le formulaire d'inscription, je sais qu'il faut une page login, deconnection en plus.
Je ne sais pas trop quoi mettre dans la BDD mais ce que je comprends le moins, c'est la methode de "hachage".je ne vois pas trop ce que c'est.C'est pour pouvoir mettre un statut 1 ou 0 si j'ai bien comprit, mais alors je ne sais pas comment ça s'utilise ni ce que je dois faire avec.
J'ai peut-être l'air bête en disant tout ça mais...
Ok.
Donc imagine dans ta base tu crée une table comme ceci:
Quand un utilisateur se connecte sur ton site, tu vérifies si le pseudo et le password correspondent à une ligne que tu as enregistrée dans la base de données.
Si c'est bon, dans cette ligne tu vérifie le statut. Si la valeur est à 0, alors l'utilisateur a un statut considéré comme inactif (pour toi, le programeur, sinon l'absolu c'est juste uen valeur), donc si statut =0 tu lui mets "Votre compte est inactif, veuillez cliquer sur votre mail de conformation".
Si statut=1 alors tu considère qu'il est actif.
Alors le hashage, ça n'a finalement rien à voir avec le reste. C'est juste une mesure de sécurité. Mais on peut laisser ça en dehors pour l'instant....
Donc imagine dans ta base tu crée une table comme ceci:
Table utilisateur: pseudo | password | statut | confirmation
Quand un utilisateur se connecte sur ton site, tu vérifies si le pseudo et le password correspondent à une ligne que tu as enregistrée dans la base de données.
Si c'est bon, dans cette ligne tu vérifie le statut. Si la valeur est à 0, alors l'utilisateur a un statut considéré comme inactif (pour toi, le programeur, sinon l'absolu c'est juste uen valeur), donc si statut =0 tu lui mets "Votre compte est inactif, veuillez cliquer sur votre mail de conformation".
Si statut=1 alors tu considère qu'il est actif.
Alors le hashage, ça n'a finalement rien à voir avec le reste. C'est juste une mesure de sécurité. Mais on peut laisser ça en dehors pour l'instant....
euh je ne sais plus trop ce que c'est qu'un booléen ( je sais, je suis un cas désespéré.lol)
et je ne sais pas troppourquoi mais mon formulaie ne s'envoie pas dans la BDD ( y a certainement une erreur, mais les pages que j'ai créees, y en a 4 je crois donc je vais pas "pourrir" le forum avec n'importe quoi)
et je ne sais pas troppourquoi mais mon formulaie ne s'envoie pas dans la BDD ( y a certainement une erreur, mais les pages que j'ai créees, y en a 4 je crois donc je vais pas "pourrir" le forum avec n'importe quoi)
je me sens bête...
mais bon pour déjà essayer de simplifier voici la table:
mais bon pour déjà essayer de simplifier voici la table:
CREATE TABLE tbl_user ( id int(11) NOT NULL auto_increment, pseudo varchar(63) NOT NULL, login varchar(8) NOT NULL, pwd varchar(8) NOT NULL, PRIMARY KEY (id), KEY ID_2 (id) );
Booléen c'est un type comme entier, caractère etc....
Une variable booleènne ne peut prendre que deux valeur: Vrai ou Faux.
Faut pas se sentir con pour si peu, on a tous commencé un jour :-)
Affiche tes erreurs ici si tu n'arrives pas à résoudre.
Une variable booleènne ne peut prendre que deux valeur: Vrai ou Faux.
Faut pas se sentir con pour si peu, on a tous commencé un jour :-)
Affiche tes erreurs ici si tu n'arrives pas à résoudre.
bon si tu veux
alors voilà mes pages, mais je ne sais pas toi mais mon avis, il me manque quelque chose
page login.html:
page login.php :
page verif.php :
et enfin enregistrement.php:
eh bien en gros il y a un problème d'envoi dans la BDD. ça n'envoie pas et donc pas moyen de voir si la suite du code est correct. Si il y a encore d'autre erreurs dis-le hein.lol
j'espère que je ne te dérange pas trop...
alors voilà mes pages, mais je ne sais pas toi mais mon avis, il me manque quelque chose
page login.html:
<html> <head> <title>Login</title> </head> <body> <form action="login.php" method='post'> <table align="center" border="0"> <tr> <td>Login :</td> <td><input type="text" name="login" maxlength="25"></td> </tr> <tr> <td>Password</td> <td><input type="password" name="motdepasse" maxlength="10"></td> </tr> <tr> <td colspan="2" align="center"><input type="submit" value="ok"></td> </tr> </table> </form> <center><a href="enregistrement.php">S'enregistrer</a></center> </body> </html>
page login.php :
<? mysql_connect("localhost", "root", ""); mysql_select_db("test"); if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['motdepasse'])) { extract($_POST); $sql = "select pwd from tbl_user where login='".$login."'"; $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); $data = mysql_fetch_assoc($req); if($data['pwd'] != $motdepasse) { echo '<p>Mauvais login / password. Merci de recommencer</p>'; include('login.html'); exit; } else { session_start(); $_SESSION['login'] = $login; echo 'Vous etes bien logué'; } } else { echo '<p>Vous avez oublié de remplir un champ.</p>'; include('login.html'); exit; } ?>
page verif.php :
<? session_start(); if(!isset($_SESSION['login'])) { echo 'Vous n\'êtes pas autorisé à acceder à cette zone'; include('login.html'); exit; } ?>
et enfin enregistrement.php:
<form method="post" action="login.html"> Pseudo : <input type="text" name="pseudo" size="12"><br> Login : <input type="text" name="login" size="12"><br> Mot de passe : <input type="text" name="pwd" size="20"> <input type="submit" value="OK"> </form> <p class="pages"> <?php mysql_connect("localhost", "root", ""); mysql_select_db("test"); if (isset($_POST['pseudo']) AND isset($_POST['login']) AND isset($_POST['motdepasse'])) { $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); $login = htmlentities($_POST['login'], ENT_QUOTES); $pwd = htmlentities($_POST['motdepasse'], ENT_QUOTES); mysql_query("INSERT INTO tbl_user VALUES('', '" . $pseudo . "', '" . $login . "', '" . $pwd . "')"); } mysql_close(); ?>
eh bien en gros il y a un problème d'envoi dans la BDD. ça n'envoie pas et donc pas moyen de voir si la suite du code est correct. Si il y a encore d'autre erreurs dis-le hein.lol
j'espère que je ne te dérange pas trop...
Je crois qu'il y a déjà un soucis ici:
Déjà pour faire plus simple tu peux faire:
Et là ou est l'erreur c'est que le premier champs id est un int auto_increment et en plus clé primaire.
En gros il ne faut pas toucher à cet endroit.
auto_increment => il augmentera tout seul sans que tu ne fasse rien.
clé primaire => il ne doit jamais prendre deux fois la même valeur.
Il ne faut pas toucher à ce champs.
Donc fait plutôt:
mysql_query("INSERT INTO tbl_user VALUES('', '" . $pseudo . "', '" . $login . "', '" . $pwd . "')");
Déjà pour faire plus simple tu peux faire:
mysql_query("INSERT INTO tbl_user VALUES('', '$pseudo','$login','$pwd')");
Et là ou est l'erreur c'est que le premier champs id est un int auto_increment et en plus clé primaire.
En gros il ne faut pas toucher à cet endroit.
auto_increment => il augmentera tout seul sans que tu ne fasse rien.
clé primaire => il ne doit jamais prendre deux fois la même valeur.
Il ne faut pas toucher à ce champs.
Donc fait plutôt:
mysql_query("INSERT INTO tbl_user(pseudo, login, pwd) VALUES($pseudo ',' $login',' $pwd ')");
merci.
mais le problème est que quand j'envoie le formulaire, il me marque : Method Not Allowed
The requested method POST is not allowed for the URL /espacemembres/login.html.
je devrais faire quoi à ton avis pour arranger ça?
mais le problème est que quand j'envoie le formulaire, il me marque : Method Not Allowed
The requested method POST is not allowed for the URL /espacemembres/login.html.
je devrais faire quoi à ton avis pour arranger ça?
Method Not Allowed
The requested method POST is not allowed for the URL /espacemembres/login.html
Ce serait peut être mieux d'appeler ta page login.php ;-)
The requested method POST is not allowed for the URL /espacemembres/login.html
Ce serait peut être mieux d'appeler ta page login.php ;-)
oki c fait, mais les infos n'ont pas l'air de s'envoyer dans la BDD...je pige pas, j'ai pourtant bien mit
(merci de me consacrer tant de temps)
<form method="post" action="login.php"> Pseudo : <input type="text" name="pseudo" size="12"><br> Login : <input type="text" name="login" size="12"><br> Mot de passe : <input type="text" name="pwd" size="20"> <input type="submit" value="OK"> </form>
(merci de me consacrer tant de temps)
eh bien voivi le formulaire complet avec la requête et le reste:
<form method="post" action="enregistrement.php"> Pseudo : <input type="text" name="pseudo" size="12"><br> Login : <input type="text" name="login" size="12"><br> Mot de passe : <input type="text" name="pwd" size="20"> <input type="submit" value="OK"> </form> <p class="pages"> <?php mysql_connect("localhost", "root", ""); mysql_select_db("test"); // --------------- Etape 1 ----------------- // Si un message est envoyé, on l'enregistre // ----------------------------------------- if (isset($_POST['pseudo']) AND isset($_POST['login']) AND isset($_POST['motdepasse'])) { $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES); // On utilise htmlentities par mesure de sécurité $login = htmlentities($_POST['login'], ENT_QUOTES); // De même pour le message $pwd = htmlentities($_POST['motdepasse'], ENT_QUOTES); // On peut enfin enregistrer :o) mysql_query("INSERT INTO tbl_user(pseudo, login, pwd) VALUES($pseudo ',' $login',' $pwd ')"); } mysql_close(); // On n'oublie pas de fermer la connexion à MySQL ;o) ?>
tu veux dire fermer la requête php, puis echo, puis déconnecter de la BDD???
Il me dit que mes variables sont indefinies
Il me dit que mes variables sont indefinies
j'en demande peut être beaucoup, mais ce que je voudrais faire c'est utiliser un espace membre combiné avec session (enfin je crois que c ça => tant que t'es pas membre tu entre pas)
donc en utilisant les variables session pour garder des variables tout le long de la session, mais que la session soit un espace membres en même temps.(je ne sais pas il faut pt choisir)
j'ai essayé déjà de comprendre l'espace memres ( http://www.webdiz.com/coursphp/espmembres.php)
mais je n'arrive pas non plus a créer le formulaire et tant que les variables sont indéfinies dans l'autre je ne sais pas comment m'en sortir....
donc en utilisant les variables session pour garder des variables tout le long de la session, mais que la session soit un espace membres en même temps.(je ne sais pas il faut pt choisir)
j'ai essayé déjà de comprendre l'espace memres ( http://www.webdiz.com/coursphp/espmembres.php)
mais je n'arrive pas non plus a créer le formulaire et tant que les variables sont indéfinies dans l'autre je ne sais pas comment m'en sortir....
enfin tout ça pour dire que pour pas réussir à enregistrer des données de formulaire, je dois avoir un gros trou...