Problème d'ouverture de session en php.

Résolu
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014 - Modifié par BunoCS le 2/06/2014 à 15:35
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014 - 3 juin 2014 à 12:11
Bjr voici mon problème je n'arrive pas à ouvrir une session d'un utilisateur lors que son login et son mot de passe sont correct.le résultat que j'obtiens quand j'execute ce code est mauvais mot de passe.et ssa me dérange boucoup car je vais aller plus loin en créant un bon site.
En effet l'utilisateur est inviter à remplir un formulaire d'authetification (login+motpasse) si c'est ok il est rédiriger vers une page ou on l'affiche ce message ''vous etez correctement identifié'' avec après un bouton deconnexion pour quitter la session.
Merci de votre aide.


NB:
connexion.php on a les infos svtes:
<code php>
<?php
//connexion à la base de données
$connect=mysql_connect('localhost','root','');
mysql_select_db('kambi',$connect) or die('Erreur de selection '.mysql_error());
?>
ici log et motpasse sont les valeurs name respectivement de champ login et mot de passe du formulaire d'authentification.


<?php include("connexion.php");
// ouverture de la session de l'utilisateur
session_start();

// test si les deux variables existent
if(isset($_POST['log']) && isset($_POST['motpasse'])) {
// on récupère les deux vles postées ds formulaire
$login=$_POST['log'];
$pass=$_POST['motpasse'];
//on teste si le motdepasse et login correspondent à un enrégistrement ds bd
if(verification($login,$pass))
{

$_SESSION['log']=$login;
$_SESSION['motpasse']=$pass;
$message='vous êtes correctement identifié ';

}
else

{
//sinon on avertit l'utilisateur
$message='mauvais mot de passe';
$message.='<a href="index.php">retour</a>';

}
}

else

{
// un des champs n'est pas rempli
$message='le login ou le mot de passe est vide';
$message.='<a href="index.php">retour</a>';
}

function verification ($login,$pass){
$login=$_POST['log'];
$pass=$_POST['motpasse'];
$sql ="SELECT * FROM yves WHERE login='$login' AND password='$pass'" ;
// Exécution de la requête SQL
$result=mysql_query($sql)or die(mysql_error());
$ligne=mysql_num_rows($result);
if($ligne == 1){
return TRUE;
}else{
return FALSE;
}
}
</code>

Message édité : Ajout des balises de code !

12 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 juin 2014 à 13:06
Tu passes en paramétres de ta fonction le Login et le password...
Nul besoin de chercher à les "re-récupérer" dans POST !

function verification ($login,$pass){
 // Lignes INUTILES !
 // $login=$_POST['log'];
 // $pass=$_POST['motpasse'];


 // Présentation de la requête avec retours à la ligne..
 // Cela rend sa lecture plus simple !
 $sql ="SELECT * 
         FROM yves  
         WHERE login='$login' 
         AND password='$pass' " ;

 // Exécution de la requête SQL
 $result=mysql_query($sql)or die(mysql_error()."<br> Requête = ".$sql);

 $ligne=mysql_num_rows($result);
 if($ligne == 1){
  return TRUE;
 }else{
  return FALSE;
 }
}

1
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
2 juin 2014 à 13:32
session_start(); soit être mis avant tout envoi de texte.
Je ne comprends pas l'agencement de ton code, on dirait que tu affiche le formulaire et que tu le contrôle dans le même fichier et directement à la suite, tu peux détailler le fonctionnement ?
1
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 juin 2014 à 14:58
on dirait que tu affiche le formulaire et que tu le contrôle dans le même fichier et directement à la suite,
Je ne comprend pas ton étonnement...
Il n'est pas rare d'avoir dans le même fichier PHP : Le formulaire HTML + le script Php de vérification...
ce qui n'est pas le cas ici... il semble bien qu'il ai utilisé deux "pages" distinctes... (ce qui ne pose aucun souci non plus).


session_start(); soit être mis avant tout envoi de texte.
Il peut le placer où ll veut .. du moment que c'est avant toute utilisation des variables de session $_SESSION.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 juin 2014 à 13:00
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
0
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014
2 juin 2014 à 14:20
Merci pour la correction concernant la lisibilité du code dans requête sql et comment baliser le code en le mettant en couleur.
Je viens d'essayer le code corrigé mais j'ai le message mauvais mot de passe alors que le login et le mot de passe sont correct.même message(mauvais mot de passe) pour le cas ou le login ou le mot de passe sont vides.
Voici l'intégralité du fichier authentification
j'utilise wampserver version 5.6.12


<?php include("connexion.php");
// ouverture de la session de l'utilisateur
session_start();

// test si les deux variables existent
if(isset($_POST['log']) && isset($_POST['motpasse'])) {
// on récupère les deux vles postées ds formulaire
$login=$_POST['log'];
$pass=$_POST['motpasse'];
//on teste si le motdepasse et login correspondent à un enrégistrement ds bd
if(verification($login,$pass))
{

$_SESSION['log']=$login;
$_SESSION['motpasse']=$pass;
$message='vous êtes correctement identifié ';

}
else

{
//sinon on avertit l'utilisateur
$message='mauvais mot de passe';
$message.='<a href="index.php">retour</a>';

}
}

else

{
// un des champs n'est pas rempli
$message='le login ou le mot de passe est vide';
$message.='<a href="index.php">retour</a>';
}

function verification ($login,$pass){

$sql ="SELECT *
FROM yves
WHERE login='$login'
AND password='$pass'" ;
// Exécution de la requête SQL
$result=mysql_query($sql)or die(mysql_error()."<br> Requête = ".$sql);

$ligne=mysql_num_rows($result);
if($ligne == 1){
return TRUE;
}else{
return FALSE;
}
}

mysql_close();
?>

<html>
<head><title>Identification</title></head>
<body><p>
<?php echo $message ?>
</p></body>
</html>
0

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

Posez votre question
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 juin 2014 à 14:54
As tu vérifié que ta requête fonctionne ?
Qu'elle te retourne le bon résultat ?

Fais en un Echo puis va tester le résultat directement dans ta BDD :

function verification ($login,$pass){

$sql ="SELECT * 
 FROM yves  
 WHERE login='$login'
 AND password='$pass'" ;

// Echo de la requête
echo "<br> Requete : ".$sql."<br>";

// Exécution de la requête SQL
$result=mysql_query($sql)or die(mysql_error()."<br> Requête = ".$sql);

$ligne=mysql_num_rows($result);

// Echo du nombre de lignes :
echo "<br>NbLignes retournées par la requête : ".$ligne."<br>";

  if($ligne == 1){
    return TRUE;
  }else{
    return FALSE;
  }
}



Pour ce qui est de tester si tes variables ne sont pas vides.. il te faut utiliser en plus du isset... le !empty

if(isset($_POST['log']) && isset($_POST['motpasse']) && !empty($_POST['log']) && !empty($_POST['motpasse']) ) {

// Le reste de ton code...

}



0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 juin 2014 à 14:59
Fais également un Print de tes variables POST pour être sûr qu'elles sont bonnes et que tu utilises bien la même syntaxe dans ton script..


<?php include("connexion.php");
 // ouverture de la session de l'utilisateur
   session_start();
echo "<br> Variables POST : <br>";
print_r($_POST);
echo "<br>";

// Le reste de ton code..


0
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014
Modifié par jordane45 le 2/06/2014 à 16:09
Jordane45 je pense que tu me suis très bien contrairement à l'autre ki pense que le formulaire html se trouve dans le même fichier php c'est faux (formulaire est dans le fichier index.php) pour n pas alourdir le code voila pourquoi j l'ai écarté.
voici le formulaire index.php pour être complet.
ne fait pas attention au code html et css regarder ou j'ai justement définir le formulaire d'autentification dans div id="menu".

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
<link rel="stylesheet" type="text/css" href="test.css">
<link rel="stylesheet" href="calendar.css" type="text/css" />
<title> mon premier site </title>
<style type="text/css">
<!--
a {
text-decoration: none;
color:white;
}

a:visited {
text-decoration: none;
color:white ;
}
a:hover {
text-decoration: none;
color:green;
}
//-->
</style>
</head>
<body>
<div id="image">
<marquee direction="right">MON SITE WEB</marquee>
</div>
<div id="en_tete">
<center>
<img src="bullo.jpg" name="logo" width="300" height="190" margin-bottom="100px"/>
<br />
<strong> projet_ntic-gabon </strong>
</center>

</div>
<br />
<div id="rubrique">
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr >
<td width="11%" align="center"><a href="page1.php"> ACCEUIL </a></td>
<td width="24%"align="center"><a href="page2.php" target=""> ACTIVITE ET EVENEMENT </a></td>
<td width="15%" align="center"><a href="page3.html">AGENDA</a></td>
<td width="23%" align="center"><a href="page4.html">PARTENAIRES</a></td>
<td width="15%" align="center"><a href="page5.html">CONTACT</a></td>
<td width="12%" align="center"><a href="page6.html">FORUM</a></td>
</tr>
</table>
</div>
<div id="menu">
  <center><h3>Authentification</h3>
  <form action="authentification.php" method="post">
  <table border="0" cellpadding="0" cellspacing="0" >
  <tr>
     <td align="right">login</td>
  <td><input type="text" name="log" /></td>
  </tr>  
  <tr>
  <td align="right">password</td>
  <td><input type="password" name="motpasse" /></td>
  </tr>
  <td></td>
  <td><input type="submit" value="se connecter" /></td>
  </table>
  </form>
  <a href="inscription.php" target="_blank">Inscription</a>
  <h3>Calendrier</h3>
  <?php
   require_once("calendar.php");
   //parametrage du calendrier
   $params=array("LANGUAGE_CODE"=>"en",
   "FIRST_WEEK_DAY"=>1,
   "USE_SESSION"=>true);
   calendar($params);
   ?> 
  </center>
  </div>
 
<div id="corps">
 <h1>l'objectif de ce travail est de pouvoir m'initier avec le web notamment la creation de site </h1>
 <p>j'ai tout d'abord commencé par la conception de la maquette ,c'est _à dire definir les éléments clés telle que l'entete du site,
 le menu ,le corps principal de la page sur lequel nous devons saisir les informations et qui sert d'affichage lors des appels des elements figurants soit sur le menu ou l'entete.
 enfin le pied de la page qui donne des renseignements sur l'auteur comme son email,son copyright...
    </p>
    
    <h1> les debouchés de ce travail </h1>
 <p>ce travail d'initiation nous prepare progressivement à la mise sur le web d'application orienté plusieurs secteurs.
tant pour faire connaitre ces structures au vu de tout le monde mais également promouvoir la creativité et l'imagination de tout un chacun
car le reseau Internet est consideré comme un secteur de vulgarisation de l'information.Ceci dit, nous ,à travers cet
essai batissons nos prémiers pas vers la mise en place d'un site web d'une structure nationale dédié aux jeunes qui leur permet de s'exprimer et donner 
leur opinions sur l'actualité afin de permettre aux politiques de suivre et de prendre correctement les decisions relatives aux situations auxquelles sont confrontées le peuple en 
general et les jeunes en particulier.
 </p>
</div>
   
   <div id="pied_de_page">
   <h2>pour me joindre voici mon email:bonaventureyves@yahoo.fr</h2>
   <p>toute copie de ce document est autorisé sauf sa modification droit reservé uniquement à son auteur </p>
   </div>
</body>
</html>

0
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014
2 juin 2014 à 15:44
le test passe pour les variables POST et la réquête sql.mais le nombre de ligne retourné est égal à zéro.
voila en claire le résultat du test dans le navigateur:

variable POSTArray ( [log] => thibaut2014 [motpasse] => 1984kambi )

Requete : SELECT * FROM yves WHERE login='thibaut2014' AND password='1984kambi'

NbLignes retournées par la requête : 0
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 juin 2014 à 16:11
C'est donc que ta requête n'est pas bonne...
Tu as regardé en direct dans ta BDD ?
Si tu cherches le login thibaut2014 ... quel est le password associé ?
C'est bien celui que tu as indiqué : 1984kambi ?
Il n'est pas encodé en MD5 ou qqchose du genre ?
0
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014
2 juin 2014 à 16:36
je vais tenter de lancer une réquête sql pour compter le nombre de ligne contenue dans ma table pour voir si mysql_num_rows() fonctionne correctement. sinon il est obsolète dans la version php que j'utilise.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
2 juin 2014 à 16:47
ce n'est pas mysql_num_rows qui est obsolète;.. c'est.. à mon avis.. ta requête qui est fausse et qui ne retourne rien !
Va dans PhpMyadmin... et testes y la requête directement .....
0
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014
3 juin 2014 à 10:39
En fait ma réquête fonctionne lorsque j'enlève la clause WHERE exemple:

<?php
$link = mysql_connect("localhost", "root", "");
mysql_select_db("kambi", $link);

// Exécution de la requête SQL
$result=mysql_query("SELECT *
FROM yves ", $link) ;

echo $ligne=mysql_num_rows($result);
?>
En la testant ça me renvoie exactement le nombre de ligne dans la table yves.Mais si je mets la clause WHERE le résultat est null.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
3 juin 2014 à 10:48
En fait ma réquête fonctionne lorsque j'enlève la clause WHERE

... Je t'ai demandé de la tester DIRECTEMENT dans ta BDD .... et non de passer par tes pages PHP !

Donc.... j'insiste ...... si ta requête, lorsque tu la testes dans ta BDD ne te retourne aucun résultat.... c'est qu'il n'y a .... aucun résultat correspondant !
Et donc....
Dans ta tables ... as tu bien un login correspondant à celui que tu cherches et dont le password est identique à celui que tu saisis dans ton formulaire ???!!!

Là ce n'est pas un souci de programmation.... juste une souci de compréhension de ce que tu as dans ta base de données....
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
3 juin 2014 à 10:59
0
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014
3 juin 2014 à 11:05
OK je vais le tester ds ma bd.
0
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014
3 juin 2014 à 11:40
j'ai essayé directement ds la base de données en utilisant phpmyadmin la réquête m'envoie aucun resultat de même que le logiciel heidisql toujours aucun résultat.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
3 juin 2014 à 11:58
Pffff.......... Si ta requête ne te retourne AUCUN résultat .... c'est qu'il n'y a AUCUN résultat à avoir pour la requête que tu as écris....

Peux tu... enfin... me répondre lorsque je te demande :
Dans ta tables ... as tu bien un login correspondant à celui que tu cherches et dont le password est identique à celui que tu saisis dans ton formulaire ???!!!

Si tu fais en direct dans ta bdd la requête :
SELECT * 
FROM yves 
WHERE login='thibaut2014'

Qu'obtiens tu ??

Si tu fais ensuite :
SELECT * 
FROM yves 
WHERE password='1984kambi' 


As tu des résultat pour ces deux requêtes ?
0
Souffrance_OS Messages postés 12 Date d'inscription lundi 19 mai 2014 Statut Membre Dernière intervention 3 juin 2014
3 juin 2014 à 12:11
ssa marche après avoir renommé le champ password en pwd dans ma table yves et après plusieurs réquêtes sql ds phpmyadmin car sql le confondait déja à sa variable PASSWORD.
Merci bocoup de votre aide.
0
Rejoignez-nous