Nouveau sujet Répondre Imprimer Syndication RSS 2.0

Session en php

De l'aide pour un débutant : Merci !
Feu follet
Avatar de meteo71
  • Age : 42 ans
  • Messages : 188
  • Inscrit : 25 Novembre 2006
Message édité 3 fois, dernière édition par Genova, 15 Janvier 2008, 16:08     Lien vers ce message 15 Janvier 2008, 7:53
Bonjour,

j'essaye de faire une zone membre avec les sessions.
J'ai crée une table avec 3 champ (id_user, login_user et pass_user)

Sur une première page, j'ai fait un petit formulaire (methode POST) pour poster le login et le mot de passe et on est ensuite redirigé vers la page membre.

Voici le code de la page membre :

<?php
if($_POST["login"] != "" && $_POST["mot_de_passe"] != "")
{
  $login     = $_POST["login"] ;
  $pass      = $_POST["mot_de_passe"] ;

  //connexion au serveur
  $cnx = mysql_connect($hostname_nuxit, $username_nuxit, $password_nuxit, $database_nuxit) ;
  //sélection de la base de données
  $db  = mysql_select_db($database_nuxit) ;

  //création de la requête SQL
  $sql = "SELECT * FROM tablemembre WHERE login_user = '".$login."' AND pass_user = '".$pass."'" ;
  //exécution de la requête SQL
  $requete = @mysql_query($sql, $cnx) or die($sql."<br>".mysql_error()) ;
  //on récupère le résultat
  $result = mysql_fetch_object($requete) ;
  
  //si la requête s'est bien passée
  if(is_object($result))
  {
    //début de la sessions
    session_start() ;
    //enregistrement d'une variable de session, ici le login de l'utilisateur
    $_SESSION["login"] = $login ;
$_SESSION["mot_de_passe"] = $pass ;

    header("Location: [url=http://www.meteo-bourgogne.com/membre2/index2.php]membre2/index2.php[/url]") ;
  }//fin if
  //sinon on retourne à la page d'inscription
  else
  {
    header("Location: [url=http://www.meteo-bourgogne.com/]http://www.meteo-bourgogne.com/[/url]"); 
  }//fin else
}//fin if
/*
  sinon on retourne à la page d'inscription
*/
else
{
  header("Location: [url=http://www.meteo-bourgogne.com/]http://www.meteo-bourgogne.com/[/url]"); 
}//fin else
?>


Quelque soit le login et le mot de passe entré dans la page de connexion, je reviens toujours à la racine de mon site et jamais vers la page index2.php (même si le login et le mot de passe sont bons)

Je ne sais pas pourquoi.

Merci de votre aide


Christophe
http://meteo-bourgogne.com/imges/logonouveaubw0.gif
 
Supernova
Avatar de BlackJowy
  • Age : 3010 ans
  • Messages : 4037
  • Inscrit : 01 Mars 2007
  Lien vers ce message 15 Janvier 2008, 8:01
J'ai pas le temps de tout regarder, mais déjà :

if($_POST["login"] != "" && $_POST["mot_de_passe"] != "")


N'est pas correct, tu dois verifier l'existence des variables $_POST avec la fonction isset() avant de tenter de savoir leur contenu, sans quoi tu auras des warning :)
 
Volcan
Avatar de Sékiltoyai
  • Age : 24 ans
  • Messages : 1065
  • Inscrit : 19 Septembre 2006
Message édité 1 fois, dernière édition par Sékiltoyai, 15 Janvier 2008, 11:12     Lien vers ce message 15 Janvier 2008, 11:11
Fais un var_dump($result); après ton mysql_fetch_object (en enlevant les header bien entendu…)


http://www.phpfrance.com : Support francophone PHP et Web.
 
Feu follet
Avatar de meteo71
  • Age : 42 ans
  • Messages : 188
  • Inscrit : 25 Novembre 2006
Message édité 3 fois, dernière édition par meteo71, 15 Janvier 2008, 16:01     Lien vers ce message 15 Janvier 2008, 14:41
Re bonjour et merci pour vos réponses rapides.

Sachez que je ne maitrise pas du tout ces fonctions ni le php http://www.fire-soft-board.com/fsb/images/smileys/happy.gif !!

Voila ce que j'ai essayé :

J'ai remplacé le début du script sans rien changer d'autres. Cela reconnait bien les mauvais login et mot de passe et me redirige bien vers la page d'accueil du site, mais cela fait la même chose même si on met le bon utilisateur ... ??

if (isset($_POST["login"]) != "" && isset($_POST["mot_de_passe"]) != "")
{
$login = ($_POST["login"] ;
$pass = ($_POST["mot_de_passe"] ;

Fais un var_dump($result); après ton mysql_fetch_object (en enlevant les header bien entendu…)



J'ai ensuite essayé de rajouter ça :

$result1 = var_dump($result);
if(is_object($result1))

si je met lde Var_dump, cela reconnait le bon mais pas les mauvais et en plus cela m'affiche une truc tout au dessus dela page (voir plus bas). Si j'enleve le car_dump, la page ne se charge pas ...
et cette fois, cela ne reconnait plus rien du tout et j'arrive systématiquement sur la page membre2.
Je n'ai pas du tout compris ce bout de phrase "header bien entendu".


Enfin, j'ai aussi un truc qui s'affiche en haut de la page :
object(stdClass)(4) { ["id_user"]=> string(1) "1" ["login_user"]=> string(5) "chris" ["pass_user"]=> string(5) "chris" ["station_user"]=> NULL } [*][*][*][*]

Merci


Christophe
http://meteo-bourgogne.com/imges/logonouveaubw0.gif
 
Supernova
Avatar de BlackJowy
  • Age : 3010 ans
  • Messages : 4037
  • Inscrit : 01 Mars 2007
  Lien vers ce message 15 Janvier 2008, 16:38
if (isset($_POST["login"]) != "" && isset($_POST["mot_de_passe"]) != "")
{
$login = ($_POST["login"] ;
$pass = ($_POST["mot_de_passe"] ;


ton if il sera toujours vrai

le isset() te renvoie un booleen, que tu compare à une chaine vide, forcément un booleen sera toujours différent d'une chaine vide ^^

//On vérifie que les deux variables existent
if(isset($_POST['login']) && isset($_POST['mot_de_passe']))
{
	//On vérifie le cas où le login ne satisferait pas nos conditions
	if($_POST['login'] == '')
	{
		echo 'Login Vide';
	}
	//On vérifie le cas où le mot de passe ne satisferait pas nos conditions
	elseif($_POST['mot_de_passe'] == '')
	{
		echo 'Mot de passe Vide';
	}
	//Les deux correspondent donc à nos attentes
	else
	{
		$login = $_POST['login'];
		$pass = $_POST['mot_de_passe'];
	}
}
 
Feu follet
Avatar de meteo71
  • Age : 42 ans
  • Messages : 188
  • Inscrit : 25 Novembre 2006
  Lien vers ce message 15 Janvier 2008, 19:44

//On vérifie que les deux variables existent
if(isset($_POST['login']) && isset($_POST['mot_de_passe']))
{
   


Merci,

j'ai gardé ça et ça marche ! if(!isset($_SESSION["login"]) || $_SESSION["login"] == "")

J'ai maintenant un autre problème.

quelle est le code pour faire passer les variables de session $_SESSION["login"] de page en page, entre des pages à accés membre et d'autres pages à accés pour tous (même ceux qui n'ont pas de login ???)

Il faut mettre un code en début de page mais je ne vois pas lequel

Merci


Christophe
http://meteo-bourgogne.com/imges/logonouveaubw0.gif
 
Volcan
Avatar de Talus
  • Age : 23 ans
  • Messages : 1817
  • Inscrit : 28 Septembre 2006
  Lien vers ce message 15 Janvier 2008, 20:53
session_start()... C'est un peu la base de la manipulation de sessions...


 
Feu follet
Avatar de meteo71
  • Age : 42 ans
  • Messages : 188
  • Inscrit : 25 Novembre 2006
  Lien vers ce message 15 Janvier 2008, 21:31
session_start()... C'est un peu la base de la manipulation de sessions...

Merci ... j'avais compris ça mais c'est après que cela me pose problème...


Christophe
http://meteo-bourgogne.com/imges/logonouveaubw0.gif
 
Supernova
Avatar de BlackJowy
  • Age : 3010 ans
  • Messages : 4037
  • Inscrit : 01 Mars 2007
  Lien vers ce message 15 Janvier 2008, 21:36
Comment ça ?

Tu devrais simplement lire un tuto sur les session (trouvable facilement par google), tout s'eclaircira :)

(Même si perso les sessions je trouve ça relou :p)
 
Volcan
Avatar de Talus
  • Age : 23 ans
  • Messages : 1817
  • Inscrit : 28 Septembre 2006
  Lien vers ce message 15 Janvier 2008, 22:00
(Moi aussi...)


 
Volcan
Avatar de Sékiltoyai
  • Age : 24 ans
  • Messages : 1065
  • Inscrit : 19 Septembre 2006
  Lien vers ce message 15 Janvier 2008, 22:20
if (isset($_POST["login"]) != "" && isset($_POST["mot_de_passe"]) != "")
{
$login = ($_POST["login"] ;
$pass = ($_POST["mot_de_passe"] ;


ton if il sera toujours vrai

le isset() te renvoie un booleen, que tu compare à une chaine vide, forcément un booleen sera toujours différent d'une chaine vide ^^

Non, La comparaison != est une comparaison sans vérification des types. La chaine vide est castée en booléen, et est donc égale à false. Ce qui fait que ca compare à false…

Ensuite, quand on donne des conseils, ce n'est pas pour qu'ils soient appliqués n'importe comment. Si tu ne savais pas ce que fesait var_dump() ou isset(), tu te prennais par la main et tu regardais la doc : http://www.php.net/manual/


http://www.phpfrance.com : Support francophone PHP et Web.
 
Supernova
Avatar de BlackJowy
  • Age : 3010 ans
  • Messages : 4037
  • Inscrit : 01 Mars 2007
  Lien vers ce message 15 Janvier 2008, 22:26
Citation
Non, La comparaison != est une comparaison sans vérification des types. La chaine vide est castée en booléen, et est donc égale à false. Ce qui fait que ca compare à false…


C'est vrai, le pire c'est que je l'utilise, mais j'avais pas lié tout ça dans ma tête ^^
 
Feu follet
Avatar de meteo71
  • Age : 42 ans
  • Messages : 188
  • Inscrit : 25 Novembre 2006
  Lien vers ce message 18 Janvier 2008, 9:40
J'ai réussi à faire quelques choses qui fonctionnent.

Merci de votre aide


Christophe
http://meteo-bourgogne.com/imges/logonouveaubw0.gif
 
Répondre


.