les sessions

Eléphant du PHP | 66 Messages

10 oct. 2007, 14:12

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");
    }
}
?>
Modifié en dernier par Z3lg4dis le 10 oct. 2007, 14:33, modifié 2 fois.

Mammouth du PHP | 568 Messages

10 oct. 2007, 14:20

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.
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 66 Messages

10 oct. 2007, 14:35

j'ai modifier mon message desole

il faut regarder le premier :)

Mammouth du PHP | 568 Messages

10 oct. 2007, 14:44

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) ?
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 66 Messages

10 oct. 2007, 14:45

oui mais mon $_POST['login'] me donne le nom d'utilisateur or moi je veux le numéro

Mammouth du PHP | 568 Messages

10 oct. 2007, 14:50

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.
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 73 Messages

10 oct. 2007, 14:52

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é.
Image Un bon maître a ce souci constant : enseigner à se passer de lui.

Eléphant du PHP | 66 Messages

10 oct. 2007, 14:59

en gros à la place de mon count je met num_user et je change la condition de mon if ?

Eléphant du PHP | 73 Messages

10 oct. 2007, 15:01

Ben ouais ! Vas y teste ...
Image Un bon maître a ce souci constant : enseigner à se passer de lui.

Eléphant du PHP | 66 Messages

10 oct. 2007, 15:07

je pige pas ce ke je dois mettre comme condition

je galère à fond la

Mammouth du PHP | 568 Messages

10 oct. 2007, 15:12

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 ;)
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 66 Messages

10 oct. 2007, 15:21

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");
    }
}
?>

Mammouth du PHP | 568 Messages

10 oct. 2007, 15:30

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().
Heddi s'est remis à développer pour lui même !
Martina Hingis - Étoile du Tennis
Heddi v. 2007

Eléphant du PHP | 73 Messages

10 oct. 2007, 15:42

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().
Image Un bon maître a ce souci constant : enseigner à se passer de lui.

Eléphant du PHP | 66 Messages

10 oct. 2007, 16:35

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.