Sessions / PHP

Sessions / PHP - PHP - Programmation

Marsh Posté le 22-01-2009 à 17:43:04    

Bonjour à toutes et à tous,
 
Tout d'abord, je tiens à préciser que j'ai bien chercher partout, et que je n'ai pas trouvé mon souci dans le forum, je me permets donc un nouveau sujet...
 
 
J'ai un souci en ce qui concerne les sessions.
 
J'ai bien crée ma table, mon formulaire, mais rien ne fonctionne. J'ai du faire plein de fautes partout, mais j'avoue y avoir passé des heures, et je m'y perds moi même.
 
Voici la page qui contient le formulaire.
 
Voici mon code au tout début de ma page :
 

Code :
  1. <?php
  2. session_start() ;
  3. ?>
  4. <?php if($_POST["login"] != "" && $_POST["password"] != "" )
  5. {
  6.   $login     = $_POST["login"] ;
  7.   $pass      = md5($_POST["password"]) ;
  8.   //connexion au serveur
  9.   $cnx = mysql_connect('localhost', 'clgrange', 'eGDVUPg8');
  10.   //sélection de la base de données
  11.   $db  = mysql_select_db('clgrange', $cnx);
  12.   //création de la requête SQL
  13.   $sql = "SELECT * FROM user1 WHERE login_user = '".$login."' AND pass_user = '".$password."'" ;
  14.   //exécution de la requête SQL
  15.   $requete = @mysql_query($sql, $cnx) or die($sql."<br>".mysql_error()) ;
  16.   //on récupère le résultat
  17.   $result = mysql_fetch_object($requete) ;
  18.   //si la requête s'est bien passée
  19.   if(is_object($result))
  20.   {
  21.     //début de la sessions
  22.     session_start() ;
  23.     //enregistrement d'une variable de session, ici le login de l'utilisateur
  24.     $_SESSION["login"] = $login ;
  25.     header("Location index.php" ) ;
  26.   }//fin if
  27.   //sinon on retourne à la page d'inscription
  28.   else
  29.   {
  30.     header("Location index.php" ) ;
  31.   }//fin else
  32. }//fin if
  33. /*
  34.   sinon on retourne à la page d'inscription
  35. */
  36. else
  37. {
  38.   header("Location index.php" ) ;
  39. }//fin else
  40. ?>


 
Voici le code de mon formulaire, plus loin dans ma page index.php :
 

Code :
  1. <form action="page2.php" method="post" class="formulaire">
  2.       <p>Login</p>
  3.       <p>
  4.         <input name="login" type="text" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>" size="13" class="formulaireBoite"/>
  5.       </p>
  6.       <p>Mot de passe</p>
  7.       <p><input name="password" type="password" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>" size="13" class="formulaireBoite" /><span style="margin-left:5px;"><input name="envoyer" type="image" src="images/boutonFormulaire.gif" value="ok" /></span></p>
  8.         </form>


 
J'ai sûrement fait des erreurs entre les "exemple" et 'exemple'.... au secours !!!
 
 
Merci de m'aider, cela serait adorable.
 
P.S. : comme beaucoup, je suis débutant, ne me criez pas trop dessus.....je ne demande qu'à apprendre !  
 
Blatman09

Reply

Marsh Posté le 22-01-2009 à 17:43:04   

Reply

Marsh Posté le 22-01-2009 à 17:46:57    

et ? quel est le problème ?

Reply

Marsh Posté le 22-01-2009 à 17:55:24    


 
quelque soit le login et mot de passe que je tape, cela fonctionne...... :(
 
je précise que je n'ai besoin qu'un d'un seul login/mdp..... déjà crée dans ma table....

Reply

Marsh Posté le 22-01-2009 à 18:08:39    

déjà, à la ligne 23 de ton premier code, tu fais un 2 appel à session_start() ;. Celui ci est superflu (session_start() ; est appelé avant), supprime le.
Ensuite, fais :

Code :
  1. var_dump($results);


Après l'appel de mysql_fetch_object() pour savoir ce qu'il retourne quand le couple login/mot de passe est incorrect.
Teste cette valeur à la place de is_object($results) ;)

Reply

Marsh Posté le 22-01-2009 à 18:09:19    

Ah aussi, renseigne toi sur les injections SQL (faille de sécurité), ton code est vulnérable.

Reply

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


 
 
Merci de m'avoir répondu et de m'aider !!
 
je ne comprends pas cela (voir juste au dessus) ??
 
Sinon, j'ai modifié ce que tu m'as dit. merci encore !  

Reply

Marsh Posté le 22-01-2009 à 18:17:35    

ajoute :
var_dump($results)
après l'appel de mysql_fetch_object, et dit ce qui s'affiche ;)

Reply

Marsh Posté le 22-01-2009 à 18:22:04    

Petite remarque  :
1) le @ qui débute un nom de fonction ne sert qu'à cacher les messages d'erreur et d'alertes (warning)
2) le seul message d'alerte retourné par mysql_query est celui pour indiquer qu'il n'existe pas de connexion à la base de donnée qui soit utilisable
3) mysql_select_db retourne le même message d'erreur et est placé plus tôt dans le code
4) le ' or die($sql."<br>".mysql_error())  ' affichera 10 fois plus d'informations utile pour un pirate que ce qu'un message d'erreur php aurait indiqué pour une requête qui n'a pas marché
 
Au vu de tout ça, qu'elle est l'utilité de l' @ que tu as mis devant mysql_query à part compliquer le débuguage?

Reply

Marsh Posté le 22-01-2009 à 18:23:57    


 
merci !!!
 
Voilà où j'en suis : (aucun changement....) merci de me co,nsacrer du temps, c'est vraiment sympa.
 

Code :
  1. <?php
  2. session_start() ;
  3. ?>
  4. <?php if($_POST["login"] != "" && $_POST["password"] != "" )
  5. {
  6.   $login     = $_POST["login"] ;
  7.   $pass      = md5($_POST["password"]) ;
  8.   //connexion au serveur
  9.   $cnx = mysql_connect('localhost', 'clgrange', 'eGDVUPg8');
  10.   //sélection de la base de données
  11.   $db  = mysql_select_db('clgrange', $cnx);
  12.   //création de la requête SQL
  13.   $sql = "SELECT * FROM user1 WHERE login_user = '".$login."' AND pass_user = '".$password."'" ;
  14.   //exécution de la requête SQL
  15.   $requete = @mysql_query($sql, $cnx) or die($sql."<br>".mysql_error()) ;
  16.   //on récupère le résultat
  17.   $result = mysql_fetch_object($requete) ;
  18.   var_dump($results) ;
  19.   //si la requête s'est bien passée
  20.   if(var_dump($results))
  21.   {
  22.    
  23.     //enregistrement d'une variable de session, ici le login de l'utilisateur
  24.     $_SESSION["login"] = $login ;
  25.     header("Location index.php" ) ;
  26.   }//fin if
  27.   //sinon on retourne à la page d'inscription
  28.   else
  29.   {
  30.     header("Location index.php" ) ;
  31.   }//fin else
  32. }//fin if
  33. /*
  34.   sinon on retourne à la page d'inscription
  35. */
  36. else
  37. {
  38.   header("Location index.php" ) ;
  39. }//fin else
  40. ?>


Reply

Marsh Posté le 22-01-2009 à 18:27:35    

Citation :

$result = mysql_fetch_object($requete) ;


Citation :

var_dump($results) ;

Il faut choisir, avec ou sans "s"?

Citation :

if(var_dump($results))

:??:  :pt1cable:  
RTFM (lis la doc)
Définition de cette fonction :

Citation :

void var_dump  ( mixed $expression  [, mixed $expression  [,  $...  ]] )

void = ne retourne rien.
Tu ne peux donc pas tester ce qu'elle retourne vu qu'elle ne retourne rien.
 
 
 
Une fois que t'auras corrigé le coup du "s", qu'est ce que le var_dump à affiché dans ton navigateur?

Message cité 2 fois
Message édité par omega2 le 22-01-2009 à 18:28:12
Reply

Marsh Posté le 22-01-2009 à 18:27:35   

Reply

Marsh Posté le 22-01-2009 à 18:38:21    

omega2 a écrit :


 
 
Une fois que t'auras corrigé le coup du "s", qu'est ce que le var_dump à affiché dans ton navigateur?


 
 
désolé... et merci, je suis vraiment pas doué....
 
voilà où j'en suis....
 

Code :
  1. $requete = mysql_query($sql, $cnx) or die($sql."<br>".mysql_error()) ;
  2.   //on récupère le résultat
  3.   $results = mysql_fetch_object($requete) ;
  4.   var_dump($results) ;
  5.   //si la requête s'est bien passée
  6.   if(var_dump($results))
  7.   {
  8.    
  9.     //enregistrement d'une variable de session, ici le login de l'utilisateur
  10.     $_SESSION["login"] = $login ;
  11.     header("Location index.php" ) ;
  12.   }//fin if
  13.   //sinon on retourne à la page d'inscription
  14.   else
  15.   {
  16.     header("Location index.php" ) ;
  17.   }//fin else
  18. }//fin if
  19. /*
  20.   sinon on retourne à la page d'inscription
  21. */
  22. else
  23. {
  24.   header("Location index.php" ) ;
  25. }//fin else


 
 
navré d'être votre "boulet du soir"....
 
 
P.S. : j'ai supprimé le @ je l'ignorais, tout simplement... merci de l'info.

Message cité 1 fois
Message édité par Blatman09 le 22-01-2009 à 18:39:19
Reply

Marsh Posté le 22-01-2009 à 18:40:05    

omega2 a écrit :

Citation :

$result = mysql_fetch_object($requete) ;


Citation :

var_dump($results) ;

Il faut choisir, avec ou sans "s"?

Citation :

if(var_dump($results))

:??:  :pt1cable:  


désolé, je me suis trompé, sans "s" bien sur. [:cerveau julian33]  

omega2 a écrit :


RTFM (lis la doc)
Définition de cette fonction :

Citation :

void var_dump  ( mixed $expression  [, mixed $expression  [,  $...  ]] )

void = ne retourne rien.
Tu ne peux donc pas tester ce qu'elle retourne vu qu'elle ne retourne rien.


Je sais  :heink: je voulais dire tester la valeur afficher plutot que de tester le type de $result.

Reply

Marsh Posté le 22-01-2009 à 18:43:13    

Blatman09 a écrit :


 
 
désolé... et merci, je suis vraiment pas doué....
 
voilà où j'en suis....
 

Code :
  1. $requete = mysql_query($sql, $cnx) or die($sql."<br>".mysql_error()) ;
  2.   //on récupère le résultat
  3.   $results = mysql_fetch_object($requete) ;
  4.   var_dump($results) ;
  5.   //si la requête s'est bien passée
  6.   if(var_dump($results))
  7.   {
  8.    
  9.     //enregistrement d'une variable de session, ici le login de l'utilisateur
  10.     $_SESSION["login"] = $login ;
  11.     header("Location index.php" ) ;
  12.   }//fin if
  13.   //sinon on retourne à la page d'inscription
  14.   else
  15.   {
  16.     header("Location index.php" ) ;
  17.   }//fin else
  18. }//fin if
  19. /*
  20.   sinon on retourne à la page d'inscription
  21. */
  22. else
  23. {
  24.   header("Location index.php" ) ;
  25. }//fin else


 
 
navré d'être votre "boulet du soir"....


 
non, var_dump, c'est juste pour tester : en +, comme le dit omega2, var_dump ne retourne rien donc if(var_dump($result)) revient à faire : if(NULL) (il me semble).
Tu fais var_dump($result), tu nous dit ce qui s'affiche quand login et/ou mot de passe est/sont invalide(s).

Reply

Marsh Posté le 22-01-2009 à 18:45:23    


 
 
voilà, j'ai bien mis :
 

Code :
  1. $result = mysql_fetch_object($requete) ;
  2.   var_dump($result) ;
  3.   //si la requête s'est bien passée
  4.   if(var_dump($result))
  5.   {


 
 
aucun changement... :( j'accède toujours à ma "page2.php"....

Reply

Marsh Posté le 22-01-2009 à 18:46:33    

On ne peut pas tester la valeur affiché.

Spoiler :

Sauf en jouant avec les ob_start et conpanie mais ça n'a aucun intéré dans le cas présent.


Le var_dump sert juste à afficher le contenu de la variable avec la structure du contenu. C'est une fonction qu'on utilise juste le temps de débuguer et qu'on enlève toujours une fois qu'on a fini.  
 
Là pour continuer à t'aider, il faut que tu nous dises ce que le var_dump t'as affiché. Tant que tu ne nous l'auras pas dit, on ne pourra pas t'aider d'avantage.
 
PS : Pour le "s", c'est une erreur classique d'inattention. On l'a tous fait cette erreur là et plus qu'à notre tour, je dois l'avouer. ;)

Reply

Marsh Posté le 22-01-2009 à 18:48:40    

omega2 a écrit :


 
Là pour continuer à t'aider, il faut que tu nous dises ce que le var_dump t'as affiché. Tant que tu ne nous l'auras pas dit, on ne pourra pas t'aider d'avantage.
 
PS : Pour le "s", c'est une erreur classique d'inattention. On l'a tous fait cette erreur là et plus qu'à notre tour, je dois l'avouer. ;)


 
 
comment voir ce que cela affiche ? navré, là je suis perdu !!!  
 
(ok pour l'erreur, merci... ;)

Reply

Marsh Posté le 22-01-2009 à 18:52:15    

J'allais dire "en regardant ce qui s'affiche dans le navigateur [:airforceone] " mais je vais compléter par un "et en désactivant les redirections le temps des tests".
 
Et du coup, je viens de réaliser un truc que je vais tourner en question : c'est normal que tu renvoies vers la même page quelque soit le résultat de ton traitement?

Reply

Marsh Posté le 22-01-2009 à 18:53:46    

omega2 a écrit :

J'allais dire "en regardant ce qui s'affiche dans le navigateur [:airforceone] " mais je vais compléter par un "et en désactivant les redirections le temps des tests".
 
Et du coup, je viens de réaliser un truc que je vais tourner en question : c'est normal que tu renvoies vers la même page quelque soit le résultat de ton traitement?


 
oupsssss  non, si le couple login /mdp est incorrect, je veux que cela ré affiche ma page index.php....  

Reply

Marsh Posté le 22-01-2009 à 18:59:19    

le problème, c'est que vu ton code initial, tu renvois vers index.php quand :
1) le couple est correct
2) le couple est incorrect
3) on a pas saisie les deux
 
Heureusement, seul dans le cas 1) tu stockes l'utilisateur choisit.

Reply

Marsh Posté le 22-01-2009 à 19:01:15    

omega2 a écrit :

le problème, c'est que vu ton code initial, tu renvois vers index.php quand :
1) le couple est correct
2) le couple est incorrect
3) on a pas saisie les deux
 
Heureusement, seul dans le cas 1) tu stockes l'utilisateur choisit.


 
ah..... mais pourtant, quand je tape n'importe quoi pour tester, j'arrive bien sur ma page "page2.php", je n'y comprends plus rien.... :'(
 

Reply

Marsh Posté le 22-01-2009 à 19:10:25    

Petite incompréhension je crois.
Visiblement, le code php que tu as indiqué au début est celui de ta "page2.php". (je me trompe?)
Le formulaire html lui est sur une autre page.
 
Quand tu valides le formulaire, le navigateur appelle la page "page2.php" ce qui est tout à fait normal vu que c'est ce qui est indiqué.
 
Vu le code php que tu as indiqué dans ton premier message, quelque soit ce que tu as saisie dans le formulaire, tu seras redirigé vers "index.php" dès que le traitement sera finis. C'est le cas ou non? Si ça n'est pas le cas, demande à ton navigateur de t'afficher le source de la page. Si tu y vois le code php alors c'est que tu n'as pas mis tes pages sur un serveur qui traite le code php. Si ça n'est pas fait, alors installe wamp par exemple et ouvre les pages en passant par l'adresse "http://localhost/".
 
Si le navigateur t'as affiché le code php alors on n'a pas besoin de chercher plus loin, par contre s'il t'a affiché autre chose alors ça serait bien que tu nous copies ce qu'il t'a affiché quand t'as demander le code de la page au navigateur.
 
PS : Le code de la page c'est par le menu :
"affichage"/"code source de la page" dans firefox
"affichage"/"source" dans IE

Reply

Marsh Posté le 22-01-2009 à 19:13:40    

et non pourtant.... :
 
les 2 codes que j'ai cités sont biens dans ma page index.php
 
lorsque je fais afficher le code source (firefox) je ne vois pas mon code php, il est bien géré donc....
 
bon, à ce stade, je vous affre la boisson de votre choix... :'(

Reply

Marsh Posté le 22-01-2009 à 19:18:05    

bon, voici le code complet de ma page index.php désolé pour la longueur.... dites moi si je devrai ou non éditer mon message.

 

Sinon, je pense à autre chose, j'ai un autre forulaire dans ma page, qui fonctionne très bien, mais le fait qu'il soit présent affecte peut être celui qui ne fonctionne pas ???

 

message édité, voici le code de ma page index.php :

 


Message édité par Blatman09 le 22-01-2009 à 22:30:05
Reply

Marsh Posté le 22-01-2009 à 19:22:51    

enregistre ton script sur http://www.rafb.net/paste/ plutot.
Retire le code du forum et met le lien vers ton code.

Message cité 1 fois
Message édité par Profil supprimé le 22-01-2009 à 19:23:35
Reply

Marsh Posté le 22-01-2009 à 19:30:23    


 
voilà qui est fait, merci !!  


Message édité par Blatman09 le 22-01-2009 à 22:30:24
Reply

Marsh Posté le 22-01-2009 à 20:26:56    

VIRE DESSUITE LES INFOS DE CONNEXION A LA BASE DE DONNEE !!!
 
 
 
ligne 7 Vs 14 : $pass Vs $password
 
ligne 14 : aucune protection du contenu de la requête. Si je saisie comme mot de passe et comme utilisateur "0' or 1=1", on peut se connecter. Cette technique permet aussi de se connecter avec un pseudo existant sans connaitre le mot de passe associé. Avec ça, je deviens administrateur quand je veux. A noter que ça c'est les utilisations "gentilles". On peut aussi mettre par terre ton serveur SQL (lancer des requêtes tellement lourdes que ton serveur n'arrivera plus à répondre aux demandes) et bousiller certaines tables.  
 
ligne 21 : On t'as dit plus haut que "if(var_dump($result))", c'est n'importe quoi. Remet le test que t'avais au départ
 
lignes 43 et suivantes : T'as un autre système de connexion qui vient d'un très mauvais logiciel (il fonctionne mais il est bien pourri au niveau code) que t'as récupéré sur le net. Même si la requête d'identification est un peu plus sécurisé, sa sécurité peut être prise en défaut (pas d'utilisation des fonctions de sécurité de mysql) En tout cas, je me pose une question du coup : pourquoi ne pas utiliser le même système d'identification pour tout le site? Ca fait vraiment très brouillon quand un site propose plusieurs formulaires de connexion et que chaque formulaire ne donne accès qu'à une seule fonctionnalité du site.
 
 
ligne 77 à 92 : Alors là, c'est plus une faille, c'est un océan. T'imagines, on peut changer le mot de passe de l'administrateur du calendrier sans connaitre l'ancien mot de passe et sans être identifié. En clair, n'importe qui peut prendre la place de l'administrateur. [:sprint] Pour ça il suffit de saisir deux fois le même mot de passe, un peu comme si on créait un nouveau compte mais en piquant l'identité de l'administrateur. [:pingouino1700]  
Si ça ne se voit pas vraiment sur leur démo, c'est simplement qu'ils remettent le mot de passe initial à chaque affichage. Par contre quand on fait gaffe, on voit quand même qu'on rentre dans la fonction de changement du mot de passe et que le changement est accepté (même s'ils remettent à nouveau le mot de passe par défaut à l'affichage suivant).
 
 
 
Pour le reste, il n'y a rien qui me saute à la figure.

Message cité 1 fois
Message édité par omega2 le 22-01-2009 à 21:11:41
Reply

Marsh Posté le 23-01-2009 à 18:55:50    

omega2 a écrit :

Alors là, c'est plus une faille, c'est un océan.


 
 
C'est justement parce que je ne sais pas nager que je suis venu ici pour demander une bouée....
 
 
Merci beaucoup à Omega2 et à Luc@s pour le temps qu'ils m'ont consacré, l'aide et les pistes. Je vais reprendre tout mon code de A à Z., mais j'ai cependant une dernière question :
 
Le code php qui concerne la mise en place de ma session doit il être en tout début de page, ou alors doit il être avec le code de mon formulaire ? ou peu importe ?
 
Merci d'avance....

Reply

Marsh Posté le 23-01-2009 à 18:58:50    

Personnellement, je prépare tous les calculs et toutes les données avant l'affichage, et je te recommande fortement de procéder de cette façon.

Reply

Marsh Posté le 23-01-2009 à 19:00:34    

Le session_start() ; doit être mis avant tout appel aux variables de session et avant tout envoie de texte au navigateur. En pratique, la plupart des gens le mettent en premier dans leur page pour ne plus avoir à s'en préoccuper (et pour éviter de créer des bugs quand ils modifieront le fichier)

Reply

Marsh Posté le 23-01-2009 à 19:03:26    

omega2 a écrit :

Le session_start() ; doit être mis avant tout appel aux variables de session et avant tout envoie de texte au navigateur. En pratique, la plupart des gens le mettent en premier dans leur page pour ne plus avoir à s'en préoccuper (et pour éviter de créer des bugs quand ils modifieront le fichier)


 
Merci à tous les deux..... pour le session_start(), je savais, c'était pour le reste du code.
 
merci encore pour l'aide apportée, j'ai encore beaucoup de chose à apprendre car non maitrisées. Je me tournerai peut être à nouveau vers vous si je règle mon problème (autant faire profiter) ou bien si j'ai encore besoin d'aide.  
 
Blatman09

Reply

Marsh Posté le 23-01-2009 à 19:03:32    

ah s'il parle de session_start() y'a pas d'hésitation à avoir.

Reply

Marsh Posté le 23-01-2009 à 20:46:41    

me revoici !! (==> oh non, pas lui !!)

 

bon, ayant constaté mon incompétence quasi totale, j'ai tout repris à 0. Bien sûr, je me suis aidé de quelque chose trouvé sur internet, mais étrangement, j'ai plus confiance en vous.

 

tout fonctionne ... ou presque ! sur une page censée être protégée, si je tape directement son url, elle s'affiche..... :(

 

Voici mes codes utilisés, et cette fois ci, je ne ferai pas l'erreur grave de débutant de mettre mes identifiants.... (pas taper !)

 


Ma page index qui contient mon fomulaire :

Code :
  1. <form action="login.php" method="post" class="formulaire">
  2.       <p>Login</p>
  3.       <p>
  4.         <input name="pseudo_membre" type="text" value="" size="13" class="formulaireBoite"/>
  5.       </p>
  6.       <p>Mot de passe</p>
  7.       <p><input name="passe_membre" type="password" value="" size="13" class="formulaireBoite" /><span style="margin-left:5px;"><input name="envoyer" type="image" src="images/boutonFormulaire.gif" value="ok" /></span></p>
  8.         </form>
 

la page : login.php :

 
Code :
  1. <?
  2. include('fonctions.php');
  3. include('variables.php');
  4. // CONNEXION A LA BASE DE DONNEE
  5. connexion();
  6. no_cache();
  7. if(intval($login)==1 && isset($id))
  8. {
  9. $requete=requete("UPDATE "._TABLE_." set CodeTemporaire='', Date=NOW()-10000 where CodeTemporaire='".$id."'" );
  10. header("Location: ".$pagelogin);
  11. }
  12. else
  13. {
  14. // ON SELECTIONNE L'ENREGISTREMENT CONTENANT LE LOGIN ET
  15. // MOT DE PASSE SAISIS A LA PAGE INDEX.HTM
  16. $requete=requete("select Pseudo from "._TABLE_." where Pseudo='".$pseudo_membre."' and Passe='".$passe_membre."'" );
  17. // SI AUCUN ENREGISTREMENT NE CORRESPOND
  18. if(mysql_num_rows($requete)==0)
  19.  {
  20.  // REDIRECTION VERS LA PAGE ERREUR
  21.  header("Location: ".$pagelogin);
  22.  }
  23. // SI LE LOGIN ET MOT DE PASSE SONT EXACTES
  24. else
  25.  {
  26.  // CREATION D'UN IDENTIFIANT ALEATOIRE
  27.  $taille = 50;
  28.  $lettres = "abcdefghijklmnopqrstuvwxyz0123456789";
  29.  srand(time());
  30.  for ($i=0;$i<$taille;$i++)
  31.   {
  32.   $id.=substr($lettres,(rand()%(strlen($lettres))),1);
  33.   }
  34.  // MISE A JOUR DE L'IDENTIFIANT DANS LA TABLE
  35.  $requete=requete("UPDATE "._TABLE_." set CodeTemporaire='".$id."', Date=NOW()+".$validitesession." where Pseudo='".$pseudo_membre."' and Passe='".$passe_membre."'" );
  36.  // REDIRECTION VERS UNE PAGE PROTEGEE AVEC L'IDENTIFIANT SERVANT DE CLE
  37.  header("Location:".$pagelogged."?id=".$id);
  38.  }
  39. // DECONNEXION MYSQL
  40. deconnexion();
  41. }
  42. ?>
 

la page : variables.php :

 
Code :
  1. <?
  2. /*--------------------------------------------------------------------------------------
  3. VARIABLES DE CONNEXION A LA BASE DE DONNEE
  4. --------------------------------------------------------------------------------------*/
  5. define("_HOST_", "*********" );
  6. define("_USER_", "*******" );
  7. define("_PWD_", "******" );
  8. define ("_DB_", "******" );
  9. define ("_TABLE_", "*******" ); // nom de la table utilisée
  10. /*--------------------------------------------------------------------------------------
  11. AUTRES VARIABLES
  12. --------------------------------------------------------------------------------------*/
  13. $validitesession = 3600; // durée de validité de la session
  14. $pagelogin = 'index.php'; // page de login et de sortie
  15. $pagelogged = 'page2.php'; // page suivant la connexion
  16. ?>
 


la page fonctions.php :

 
Code :
  1. <?
  2. /*--------------------------------------------------------------------------------------
  3. FONCTION D'AFFICHAGE DES ERREURS DE CONNEXION
  4. --------------------------------------------------------------------------------------*/
  5. function erreur( $message )
  6. {
  7. echo $message ;
  8. exit ;
  9. }
  10. /*--------------------------------------------------------------------------------------
  11. FONCTION DE CONNEXION A LA BASE DE DONNEES
  12. --------------------------------------------------------------------------------------*/
  13. function connexion()
  14. {
  15.   // connexion au serveur de données
  16.   @mysql_connect( _HOST_ , _USER_ , _PWD_ ) or erreur( 'Connexion au serveur de données impossible' ) ;
  17.   // sélection de la base de données
  18.   @mysql_select_db( _DB_ ) or erreur( 'Sélection de la base de donnée impossible' ) ;
  19. }
  20. /*--------------------------------------------------------------------------------------
  21. FONCTION DE DECONNEXION A LA BASE DE DONNEES
  22. --------------------------------------------------------------------------------------*/
  23. function deconnexion()
  24. {
  25. @mysql_close();
  26. }
  27. /*--------------------------------------------------------------------------------------
  28. FONCTION DE D'EXECUTION D'UNE REQUETE
  29. Entrée :
  30.   $adr : requete
  31. Sortie :
  32.   $resultat : résultat de la requete
  33.   ou
  34.   message d'erreur
  35. --------------------------------------------------------------------------------------*/
  36. function requete( $requete )
  37. {
  38. if($resultat = mysql_query( $requete )) return $resultat ;
  39. erreur( "Erreur dans la requête : $requete<br>" . mysql_error() ) ;
  40. }
  41. /*--------------------------------------------------------------------------------------
  42. FONCTION DE DESACTIVATION DU CACHE DU NAVIGATEUR
  43. --------------------------------------------------------------------------------------*/
  44. function no_cache() {
  45.   header("Pragma: no-cache" );
  46.   header("Cache-Control: no-cache" );
  47. }
  48. ?>
 

la page secure.php : (qu'on me dit de mettre en include sur mes pages sécurisées, sauf que si je le fais, cela ne marche pas, même avec un session_start();
seul le session_start() fonctionne, mais j'ai le problème ennoncé en début de message.

 
Code :
  1. <?
  2. include('fonctions.php');
  3. include('variables.php');
  4. no_cache();
  5. // CONNEXION MYSQL
  6. connexion();
  7. // SELECTION DE L'ENREGISTREMENT CONTENANT L'ID EN COURS
  8. $requete=requete("select * from "._TABLE_." where CodeTemporaire='".$id."' and Date>NOW()" );
  9. // SI L'ID N'EXISTE PAS
  10. if(mysql_num_rows($requete)==0)
  11. {
  12. // REDIRECTION PAGE ERREUR
  13. requete("UPDATE "._TABLE_." set CodeTemporaire=NULL, Date=NOW()-10000" );
  14. header("Location:".$pagelogin);
  15. exit;
  16. }
  17. // LIGNE FACULTATIVE : RECUPERATION DU PSEUDO
  18. $pseudo=mysql_result($requete,0,"Pseudo" );
  19. // DECONNEXION MYSQL
  20. deconnexion();
  21. ?>
 

merci une fois de plus de m'éclairer.....

 

P.S. : j'ai bien sûr crée ma table et rempli un login et mdp)


Message édité par Blatman09 le 23-01-2009 à 20:48:43
Reply

Marsh Posté le 23-01-2009 à 21:44:36    

Ho non pas lui ^^
 
Ben ça c'est du compliqué juste pour faire une session...
J'avoue j'ai lu de travers ce que tu as mis.
 
Je suppose que tu sais te connecter à ta base de donnée, donc pas nécessaire de nous remettre ces lignes là
 
Là tu as pris un truc tout fait sur le net, j'ai un peu de mal à m'y retrouver arf
 
En faite tu voudrais un tuto pour mettre un systeme de session sur ton site ?
 
Il est tout beau le site de ac-grenoble
tu sais faire un super design comme ça sans savoir faire la session ? moi je ne sais grave pas faire un design comme ça sur un site, **chui jalouse** lol
bon je laisse les pros te répondre, mais sans avoir un niveau d'experte, on peut faire un système de session sur un site plus simplement.
 
j'ai l'impression que du faite que tu n'as pas construit toi meme ces lignes de code, tu ne piges pas où les variables se baladent.... (pas français ma phrase)

Reply

Marsh Posté le 23-01-2009 à 21:52:20    

Merci pour ta réponse !!
 
oui, il y a sûrement plus simple effectivement !!! mais ne sachant pas faire.... lol
 
merci beaucoup pour les compliments pour le site, avec toutes les heures que j'ai pu y passer, ça fait bien plaisir de lire ça ! :)

Reply

Marsh Posté le 23-01-2009 à 21:53:32    

tu sais programmer quoi en php (pour voir si ça vaut le coup que je te copie colle mes "codes" que j'utilise pour mes sites)
 
attention, je te copie colle mes codes, les autres vont dire que c'est beurk lol

Reply

Marsh Posté le 23-01-2009 à 21:58:09    

Artesia a écrit :

tu sais programmer quoi en php (pour voir si ça vaut le coup que je te copie colle mes "codes" que j'utilise pour mes sites)
 
attention, je te copie colle mes codes, les autres vont dire que c'est beurk lol


 
 
non, mais moi je ne dirai pas que c'est beurk !!! promis !! lol
 
oui, je veux juste un système de session sur mon site, mais sans inscription, je crée un unique login / mdp dans ma table, et c'est tout....

Reply

Marsh Posté le 23-01-2009 à 22:28:54    

MDR ton MP
 
Ne t'inquiete pas, je suis débutante aussi !!
Mais je bidouille comme je peux, j'ai pigé quelque truc et je m'en sers lol
 
Donc si je comprends bien ce que tu m'as dit, tu veux une session sans inscription, un peu un système comme pour te connecter pour administrer ton site.
 
Il se peut que je répète des trucs qui ont déjà été dit plus haut :
 
En haut de ton header du site tu met ton :
 
session_start()
 
Dans la PAGE 1
Tu mets ton formulaire de connexion où tu veux (enfin accessible quand meme mdr), on appelle cela la PAGE 1, l'action du formulaire donne sur la PAGE 2
 
Dans la PAGE 2
Tu récupères la variable avec la méthode post :
 

Code :
  1. $login=$_POST['tonlogin'];
  2. $motdepasse=$_POST['tonmotdepasse'];


 
Tu te connectes à ta base et tu vérifies ton login et mot de passe

Code :
  1. **connexion à ta base**
  2. $query = "SELECT * FROM table WHERE login='$login'";
  3. $mysqlResult = mysql_query($query);
  4. $rows = mysql_num_rows($mysqlResult);
  5. if ($rows==0)
  6. {
  7. print("Cet identifiant n\'existe pas" );
  8. include ("footer.php" );
  9. die();         
  10. };
  11. while($row = mysql_fetch_row($mysqlResult))
  12. {
  13.            $logindelabase = $row[0]; (par exemple) (tu dis ce que tu ne pigeras pas dans mon message)
  14.            $motdepassedelabase = $row[1]; (tjs par exemple)
  15.         };


 
n'oublie pas de fermer la connexion mysql_close($link); (le variable link, si c'est variable link que tu utilises pour te connecter)
 
Là tu vérifies ton mot de passe :
 

Code :
  1. if ($motdepasse == "$motdepassedelabase" )
  2. {
  3. print ("Identification réussi" )
  4. $_SESSION['login'] = $login;
  5. $_SESSION['password'] = $motdepasse;
  6. print ("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"2;URL='lapagecible.php'\">" );
  7. }
  8. else ($motdepasse != "$motdepassedelabase" )
  9. {
  10. print ("Vos identifiants ne sont pas corrects" );
  11. print ("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"2;URL='lapagecible.php'\">" );
  12. };


 
Et à chaque fois dans ton HEADER :
 
En plus du session_start();
 
tu mets :
$loginheader = $_SESSION['login'];
$passwordheader = $_SESSION['password'];
 
A partir de là moi je vérifie à chaque fois via la base de l'identification (en réalité je ne sais pas si c'est bien utile, mais ça me rassure niveau sécurité)
Je met dans une variable que je nomme par exemple $connecte (la faute d'orthographe est faite exprès)
 
if (!isset($loginheader)) ($connecte = "pasconnecte" );
 
Je vérifie dans la  base les identifiants :
 

Code :
  1. if (isset($loginheader))
  2. {
  3. $queryheader = "SELECT * FROM table WHERE login='$loginheader'";
  4. $mysqlResultheader = mysql_query($queryheader);
  5. $rowsheader = mysql_num_rows($mysqlResultheader);
  6. while($rowheader = mysql_fetch_row($mysqlResultheader))
  7. {
  8.            $logindelabaseheader = $rowheader[0];
  9.            $motdepassedelabaseheader = $rowheader[1];
  10.         };
  11. mysql_close($link);
  12. if ($passwordheader == "$motdepassedelabaseheader" ) ($connecte = "connecte" );
  13. };


 
comme ça j'ai une variable $connecte qui met permet de savoir s'il existe une session et si je suis bien connecté
 
par exemple après pour que seule la personne connecté puisse faire telle chose sur ta page php tu mets:
 

Code :
  1. if ($connecte == "connecte" ) alors blabla


 
 
 
 

Reply

Marsh Posté le 23-01-2009 à 22:31:24    

Il y a une erreur :
 
3ème truc de code ligne 8
faut mettre elseif à la place de else

Reply

Marsh Posté le 23-01-2009 à 22:38:30    

génial !!!!! mais c'est que je commence à comprendre, c'est dingue !! comme quoi mon cas n'est pas si désespéré !!!
 
 
par contre, je ne comprends pas la différence entre $login et $loginheader  :(
 
merci encore, vraiment !

Reply

Marsh Posté le 23-01-2009 à 23:07:55    

ben euh la différence, c'est une question de ne pas mélanger les variables du header et des autres pages.
 
pour éviter le conflit entre les variables si tu préfères
 
par exemple tu es connecté mais tu as besoin de la variable $login pour faire autre chose, ben ça ne touchera pas la variable $loginheader qui te sert à l'identification

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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