Page 1 sur 2

les sessions

Posté : 10 oct. 2007, 14:12
par Z3lg4dis
Maintenant je m'attaque aux sessions et c'est la premiere fois je me suis donc rencarder sur lme sujet

Toutr d'abord j'ai besoin de récupérer le numéro de l'utilisateur lorsqu'il se connecte seulement je ne vois pas comment et à quel moment le faire.

voila mes codes pour l'identification de l'utilisateur :
		<form action="connexion.php" method="post">		
		<table width="300" border="0">
		<tr>
         <td width="300" align="center"><span class="intitule">Login</span></td>
        </tr>
        <tr>
         <td width="300" height="28" align="center"><input name="login" type="text" /></td>
        </tr>
		<tr>
         <td width="300" height="28" align="center"></td>
        </tr>
        <tr>
         <td width="300" align="center"><span class="intitule">Password</span></td>
        </tr>
        <tr>
         <td width="300" align="center"><input name="pass" type="password" /></td>
        </tr>
        </table>
<br />
        <table width="300" border="0">
         <tr>
          <td width="300" align="center"><input name="entrer" type="submit" value="Connexion" /></td>
</form>
là s'est pour entrer ses identifiants

et voila la page qui vérifie les id :
<?php
include('connexion.inc');
 
if (isset($_POST['login']) && isset($_POST['pass'])) { // test des l'existances des variables
    $sqlQuery = "Select COUNT(*) 
        FROM users
        WHERE login_user = '".mysql_real_escape_string($_POST['login'])."'
        AND  pass_user = '".mysql_real_escape_string($_POST['pass'])."'";
    $result = mysql_query($sqlQuery) or die('erreur '.$sqlQuery.' : '.mysql_error());
    $array = mysql_fetch_row($result);
    if($array[0] == 1) {
        session_start();
        $_SESSION['login'] = $login;
		header("Location: accueil.php");
    } else {
        header("Location: index.php");
    }
}
?>

Posté : 10 oct. 2007, 14:20
par heddicmi
A aucun moment tu n'as en effet déclaré $login. Alors pourquoi l'utiliser ? Dans les lignes avant, tu utilises pourtant bien $_POST["login"], qui contient ta valeur.

Posté : 10 oct. 2007, 14:35
par Z3lg4dis
j'ai modifier mon message desole

il faut regarder le premier :)

Posté : 10 oct. 2007, 14:44
par heddicmi
Bin en fait, la réponse est la même en fait :p

Pourquoi écris-tu :
$_SESSION['login'] = $login;
Alors que tu sait que ta valeur n'est pas dans $login, mais dans $_POST['login'] (Que tu utilises dans le if et dans la requête) ?

Posté : 10 oct. 2007, 14:45
par Z3lg4dis
oui mais mon $_POST['login'] me donne le nom d'utilisateur or moi je veux le numéro

Posté : 10 oct. 2007, 14:50
par heddicmi
Dans ce cas, il te faut chercher dans le resultat de ta requete. La requête que tu exécutes ne te retournes que le nombre d'utilisateurs avec le couple Login/pass. Il faudrait que ta requête te retourne plutôt l'id de l'utilisateur avec ce couple Login/Pass.

Posté : 10 oct. 2007, 14:52
par Sedril
A ce moment là, fais plutôt une requête qui ramène l'identifiant de l'utilisateur, non ?

Bien sur il faut modifier le code qui est placé aprés la requête aussi non ca veut plus rien dire.

Soit le tableau qui est retourné sera vide ou avec une valeur nulle dans le cas où le couple utilisateur/mot de passe n'a pas été trouvé, soit il contiendra l'identifiant recherché.

Posté : 10 oct. 2007, 14:59
par Z3lg4dis
en gros à la place de mon count je met num_user et je change la condition de mon if ?

Posté : 10 oct. 2007, 15:01
par Sedril
Ben ouais ! Vas y teste ...

Posté : 10 oct. 2007, 15:07
par Z3lg4dis
je pige pas ce ke je dois mettre comme condition

je galère à fond la

Posté : 10 oct. 2007, 15:12
par heddicmi
Pour la condition de ton if, tu mets ce que tu veux... Tu peux tester si ta requête t'as retourné un numéro d'utilisateur. Si oui, tu poursuits, si non, non ;)

Posté : 10 oct. 2007, 15:21
par Z3lg4dis
maintenant avec mes modif il me met une parse error
<?php
include('connexion.inc');
 
if (isset($_POST['login']) && isset($_POST['pass'])) { // test des l'existances des variables
    $sqlQuery = "Select num_user 
        FROM users
        WHERE login_user = '".mysql_real_escape_string($_POST['login'])."'
        AND  pass_user = '".mysql_real_escape_string($_POST['pass'])."'";
    $result = mysql_query($sqlQuery) or die('erreur '.$sqlQuery.' : '.mysql_error());
    if($result['login_user'] = $_POST['login']) && ($result['pass_user'] = $_POST['pass']){
		header("Location: accueil.php");
    } else {
        header("Location: index.php");
    }
}
?>

Posté : 10 oct. 2007, 15:30
par heddicmi
Pas tout à fait... Ici, ton test vérifie que les valeurs saisies en Login et Pass par l'utilisateur correspondent au Login et Pass du compte utilisateur dans ta base de données. Ce qui, par principe sera forcément toujours vrai vu que tu récupère dans la requête le compte correspondant à ce Login / Pass.

Mais tu noteras aussi qu'en utilisant $result['login_user'] et $result['pass_user'], tu génereras forcément une erreur. En effet, ta requête ne récupère que le champ num_user. Il ne récupère pas les champs login_user et pass_user.

Ainsi, ton test devrait plus porter sur "Est-ce que ma requête ma retourné un utilisateur ?", notament grace à la fonction mysql_num_rows().

Posté : 10 oct. 2007, 15:42
par Sedril
Attention, mysql_query() ne renvoie pas de donnée mais juste une référence à une requête.

Il faut ensuite utiliser une autre fonction telle que mysql_fetch_array() ou mysql_num_rows().

Posté : 10 oct. 2007, 16:35
par Z3lg4dis
Déjà avec ça
<?php
include('connexion.inc');
 
if (isset($_POST['login']) && isset($_POST['pass'])) { // test des l'existances des variables
    $sqlQuery = "Select num_user 
        FROM users
        WHERE login_user = '".mysql_real_escape_string($_POST['login'])."'
        AND  pass_user = '".mysql_real_escape_string($_POST['pass'])."'";
    $result = mysql_query($sqlQuery) or die('erreur '.$sqlQuery.' : '.mysql_error());
    $array = mysql_fetch_row($result);
    if($array=FALSE)
	{
	header("Location: index.php");
	}
	header("Location: accueil.php");
}
?>
Je rentre sur ma page quoi que je mette il ne vérifi même pas si les identifiant sont bon
En fait d'après ce que j'ai compris avec le fetch_row si le résultat est false cela veut dire qu'il n'y a pas de ligne donc il doit revenir a index.php mais la il m'envoi vers acceuil donc déjà la ça merdouille.