$_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   -
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

22 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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....
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
je lirai tout à mon aise ce soir

merci beaucoup

@+
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
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....)
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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?
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
oui, oui j'ai déjà réussi à faire un script pour ajouter des news, faire un minichat et un livre d'or aussi je crois
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Je sais pas par où commencer. Qu'est ce que tu n'as pas bien compris en fait?
0

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

Posez votre question
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
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...
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Ok.
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....
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
ok ça j'ai comprit.Donc le champ statut (en int) est toujours égal à 1 ou 0 ???
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Voilà, tu peux en faire un booléen ...
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
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)
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
je me sens bête...
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)
);
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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.
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
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:
<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...
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
...
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Je crois qu'il y a déjà un soucis ici:
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 ')");
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
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?
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
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 ;-)
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
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
<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)
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Fait un echo sur ta requête, c'est la meilleure technique de debuggage :-)
Essaies la requête affichée directement dans PhpMyAdmin par exemple. Ou bien affiche la ici.
(merci de me consacrer tant de temps)

Personne n'a dit que je le faisais par obligation ;-)
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
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)
?>

0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
Non, pas le code Php. Je pensais plutôt à afficher la requête avec un echo pour voir ce que ça donne:
echo "INSERT INTO tbl_user(pseudo, login, pwd) VALUES($pseudo ',' $login',' $pwd ')"
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
tu veux dire fermer la requête php, puis echo, puis déconnecter de la BDD???
Il me dit que mes variables sont indefinies
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
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....
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
enfin tout ça pour dire que pour pas réussir à enregistrer des données de formulaire, je dois avoir un gros trou...
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
rien ne s'enregistre dans la bdd, je n'y comprends rien?????
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Voila un exemple d'espace membre
http://www.lephpfacile.com/howto/index.php?p=10
0
maxime_B Messages postés 788 Date d'inscription   Statut Membre Dernière intervention   55
 
merci lami ^^
et encore merci à toi kilian, sans toi je serais encore à la traine.

;-)

a+
0