Page 1 sur 3

Problème Log In

Posté : 07 août 2011, 21:35
par maxgeek
Bonjour, voila j'ai un problème avec un code pour me connecter a mon site : j'ai créer ma base de donnée dans PHPMyAdmin, j'y ai crée un nom d'utilisateur aisi qu'un mot de passe pour tester, et j'ai beau mettre le bon pseudo et le bon pass il ne veut pas me connecter :evil: voici mon code :
<?php
	session_start();
?>
<!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=utf-8" />
<title>Document sans titre</title>
</head>
<body>
<!-- connexion BDD -->
<?php
	$PARAM_hote='localhost';      // le chemin vers le serveur
	$PARAM_port='3306';
	$PARAM_nom_bd='monsite';          // le nom de votre base de données
	$PARAM_utilisateur='root';    // nom d'utilisateur pour se connecter
	$PARAM_mot_passe='';          // mot de passe de l'utilisateur pour se connecter

		try
			{
			$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
			/* BDD connectee */
			}
 
		catch(Exception $e)
			{
			/* erreur connection */
			echo 'Une erreur est survenue !';
			echo 'Erreur : '.$e->getMessage().'<br />';
			echo 'N° : '.$e->getCode();
			die();
			}
?>
<!--    /fin de la connexion -->
	<?php
	if(isset($_POST) AND !empty($_POST['login']) AND !empty($_POST['pass'])) // si les infos on bien été envoyées
		{
		extract($_POST);
		$pseudo = $_POST['pseudo'];
		$pass = $_POST['pass'];
		$req=$connexion->query("SELECT * FROM user WHERE pseudo='$pseudo' and pass='$pass' "); // Requette MySQL
		$req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
		$id = $req['id'];
		}
	else
		{
		?>
		<p>Echec de connexion, mauvais pseudo et/ou mauvais mot de passe, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>
		<?php
		}
	if (isset($req) AND (mysql_num_rows($req) > 0) AND ($pass == $req['pass'])) //si la requette a été effecutée ET que l'utilisateur existe ET pass ok
		{
		$pseudo = $_SESSION['pseudo'];
		$pass = $_SESSION['pass'];
		$id = $_SESSION['id'];
		$_SESSION['connexion'] == 1;
		?>
		<p>Connexion réussie, <a href="index.php" alt="index">retourner a l'index</a><br /></p>
		<?php
		}
	else
		{
		?>
		<p>Echec de connexion, mauvais pseudo et/ou mauvais mot de passe, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>
		<?php
		}
Il m'affiche a chaque fois cette phrase que j'ai moi meme indiqué dans mon code :
Echec de connexion, mauvais pseudo et/ou mauvais mot de passe, se connecter
merci

Re: Problème Log In

Posté : 07 août 2011, 22:59
par sirakawa
Chalut,




Si je vois bien, ta phrase d'erreur s'affiche à tout coup, puisqu'elle est en-dehors du code php...

En plus, j'ai une sainte horreur de ces codes mélangés; de plus si on n'a pas login et passe, il est inutile de poursuivre et de devoir tester $req, ce qui n'a guère de sens que si on a envoyé une requête...
 if(isset($_POST) AND !empty($_POST['login']) AND !empty($_POST['pass'])) // si les infos ont bien été envoyées
	{
		  extract($_POST);
                $pseudo = $_POST['pseudo'];
                $pass = $_POST['pass'];
                $req=$connexion->query("SELECT * FROM user WHERE pseudo='$pseudo' and pass='$pass' "); // Requette MySQL
                $req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
                $id = $req['id'];
		if (isset($req) AND (mysql_num_rows($req) > 0) AND ($pass == $req['pass'])) 
                // et si la requête a été effectuée ET que l'utilisateur existe ET pass ok
                {
					$pseudo = $_SESSION['pseudo'];
					$pass = $_SESSION['pass'];
					$id = $_SESSION['id'];
					$_SESSION['connexion'] == 1;
					$message ="<p>Connexion réussie, <a href="index.php" alt="index">retourner a l'index</a><br /></p>";
                }
	        else //et si la requête n'a pas été effectuée ou l'utilisateur n'existe pas ou  pass pas ok
                {
					$message ="<p>Echec de connexion, mauvais pseudo et/ou mauvais mot de passe, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>";
                }	
		} 
        else //______________________________________________________si les infos n'ont pas été bien envoyées
		{
		
			$message = "<p>pseudo et/ou mot de passe non fournis, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>";
		}
      print "$kessage "; ....

Re: Problème Log In

Posté : 08 août 2011, 00:14
par moogli
fache toi correctement :)

pourquoi utiliser isset($req) alors que la variable est crée au dessus ?

mysql_num_rows n'a rien à faire ici puisse qu'il utilise PDO !

isset($_POST) AND est totalement inutile puisque $_POST est toujours déclarée (même si aucun formulaire n'est posté !!!!)

extract($_POST);
$pseudo = $_POST['pseudo'];
$pass = $_POST['pass'];

quel intérêt de faire deux fois la même chose !!!

$req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
$id = $req['id'];

cela montre clairement que l'utilisation de PDO n'est pas comprise !

Exemple de tuto sur PDO http://www.siteduzero.com/tutoriel-3-34 ... x-bdd.html

print "$kessage "; ....

pas besoin de ", d'ou vient $kmessage ?

$pseudo = $_SESSION['pseudo'];
$pass = $_SESSION['pass'];
$id = $_SESSION['id'];
$_SESSION['connexion'] == 1;

totalement illogique vu que l'on met le pseudo en session est non l'inversion, l'affectation se fait de droite a gauche !

j'en ai profiter pour corriger les erreurs sur les chaines de caractères et le tout en fait.
a tester j'ai ptet laisser des aneriesmais il se fait tard pour moi ^^
<?php

 if(!empty($_POST['login']) AND !empty($_POST['pass'])) // si les infos ont bien été envoyées
	{
	$req=$connexion->query('SELECT * FROM user WHERE pseudo='.$connexion->quote($_POST['pseudo'].' and pass='.$connexion->quote($_POST['pass']); // Requette MySQL
	$req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
	if ( ($req->rowCount() > 0) && ($pass == $req->pass)) 
	// et si la requête a été effectuée ET que l'utilisateur existe ET pass ok
	{
	
		$_SESSION['pseudo'] = $_POST['pseudo'];
		$_SESSION['pass']=$_POST['pass'];
		$id = $_SESSION['id'];
		$_SESSION['connexion'] == 1;
		$message ='<p>Connexion réussie, <a href="index.php" alt="index">retourner a l\'index</a><br /></p>';
	}
	else //et si la requête n'a pas été effectuée ou l'utilisateur n'existe pas ou  pass pas ok
	{
							$message = '<p>Echec de connexion, mauvais pseudo et/ou mauvais mot de passe, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>';
	}       
	$req->closecursor();
	} 
	else //______________________________________________________si les infos n'ont pas été bien envoyées
			{
			
					$message = '<p>pseudo et/ou mot de passe non fournis, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>';
			}
  print $message;
 ?>
@+

Re: Problème Log In

Posté : 08 août 2011, 12:08
par maxgeek
J'ai testé et il me dit
( ! ) Parse error: syntax error, unexpected ';' in C:\wamp\www\Code\pages\connect.php on line 38
J'ai regardé pour vérifier que toutes les parenthèses se fermaient, toutes les ' tout ça mais rien a faire toujours cette erreur.

Voici le code :
<?php
	session_start();
?>
<!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=utf-8" />
<title>Document sans titre</title>
</head>
<body>
<!-- connexion BDD -->
<?php
	$PARAM_hote='localhost';      // le chemin vers le serveur
	$PARAM_port='3306';
	$PARAM_nom_bd='monsite';          // le nom de votre base de données
	$PARAM_utilisateur='root';    // nom d'utilisateur pour se connecter
	$PARAM_mot_passe='';          // mot de passe de l'utilisateur pour se connecter

		try
			{
			$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
			/* BDD connectee */
			}
 
		catch(Exception $e)
			{
			/* erreur connection */
			echo 'Une erreur est survenue !';
			echo 'Erreur : '.$e->getMessage().'<br />';
			echo 'N° : '.$e->getCode();
			die();
			}
?>
<!--    /fin de la connexion -->
<?php
  if(!empty($_POST['login']) AND !empty($_POST['pass'])) // si les infos ont bien été envoyées
         {
         $req=$connexion->query('SELECT * FROM user WHERE pseudo='.$connexion->quote($_POST['pseudo'].' and pass='.$connexion->quote($_POST['pass']); // Requette MySQL
         $req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
         if ( ($req->rowCount() > 0) && ($pass == $req->pass)) 
         // et si la requête a été effectuée ET que l'utilisateur existe ET pass ok
         {
         
                 $_SESSION['pseudo'] = $_POST['pseudo'];
                 $_SESSION['pass']=$_POST['pass'];
                 $id = $_SESSION['id'];
                 $_SESSION['connexion'] == 1;
                 $message ='<p>Connexion réussie, <a href="index.php" alt="index">retourner a l\'index</a><br /></p>';
         }
         else //et si la requête n'a pas été effectuée ou l'utilisateur n'existe pas ou  pass pas ok
         {
                                                         $message = '<p>Echec de connexion, mauvais pseudo et/ou mauvais mot de passe, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>';
         }       
         $req->closecursor();
         } 
         else //______________________________________________________si les infos n'ont pas été bien envoyées
                         {
                         
                                         $message = '<p>pseudo et/ou mot de passe non fournis, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>';
                         }
   print $message;
  ?>
Merci

Re: Problème Log In

Posté : 08 août 2011, 12:26
par Cyrano
Et pourtant il manque bien une parenthèse, et même 2, compte bien ligne 38 de ton code.

Re: Problème Log In

Posté : 08 août 2011, 14:42
par maxgeek
J'ai corrigé la ligne 38, la voila :
$req=$connexion->query('SELECT * FROM user WHERE pseudo='.$connexion->quote($_POST['pseudo']).' and pass='.$connexion->quote($_POST['pass']).' ');
Mais il n'accepte toujours pas de me connecter, j'ai pourant essayer d'autres utilisateurs (en les créant avec PhpMyAdmin) mais ça ne marche pas. Encore une erreur ? Merci

Re: Problème Log In

Posté : 08 août 2011, 14:53
par Cyrano
Essaye la chose suivante : fais afficher dans ta page la requête qui est dynamiquement générée et teste-la dans phpMyAdmin, reviens avec le résultat et éventuellement le message d'erreur s'il y en a un.

Re: Problème Log In

Posté : 08 août 2011, 15:11
par maxgeek
il ne veut pas afficher la requette avec print il met :
( ! ) Notice: Undefined variable: req in C:\wamp\www\Code\pages\connect.php on line 62
Call Stack
# Time Memory Function Location
1 0.0023 380256 {main}( ) ..\connect.php:0

Re: Problème Log In

Posté : 08 août 2011, 15:19
par Cyrano
Forcément, gros malin, tu essayes de faire afficher la ressource et non la requête. Ça veut dire qu'il faut créer une variable contenant ta requête dynamique avant la ligne où tu utilises $connexion->query et entre les deux utilise un var_dump(), comme ceci :
<?php
$sql = 'SELECT * FROM user WHERE pseudo='.$connexion->quote($_POST['pseudo']).' and pass='.$connexion->quote($_POST['pass']).' ';
echo("<pre>\n");
var_dump($sql);
echo("</pre>\n");
$req = $connexion->query($sql);
Et là tu vas voir qu'il manque quelque chose d'important dans ta requête. L'exécution déclenche une erreur qui doit te dire qu'une colonne n'existe pas... et pour cause, ce n'est pas une colonne de la table.

Re: Problème Log In

Posté : 08 août 2011, 15:37
par maxgeek
j'ai rajouté ça a mon code, qui est donc maintenant :

connect.php
<?php
	session_start();
?>
<!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=utf-8" />
<title>Document sans titre</title>
</head>
<body>
<!-- connexion BDD -->
<?php
	$PARAM_hote='localhost';      // le chemin vers le serveur
	$PARAM_port='3306';
	$PARAM_nom_bd='monsite';          // le nom de votre base de données
	$PARAM_utilisateur='root';    // nom d'utilisateur pour se connecter
	$PARAM_mot_passe='';          // mot de passe de l'utilisateur pour se connecter

		try
			{
			$connexion = new PDO('mysql:host='.$PARAM_hote.';port='.$PARAM_port.';dbname='.$PARAM_nom_bd, $PARAM_utilisateur, $PARAM_mot_passe);
			/* BDD connectee */
			}
 
		catch(Exception $e)
			{
			/* erreur connection */
			echo 'Une erreur est survenue !';
			echo 'Erreur : '.$e->getMessage().'<br />';
			echo 'N° : '.$e->getCode();
			die();
			}
?>
<!--    /fin de la connexion -->
<?php
  if(!empty($_POST['login']) AND !empty($_POST['pass'])) // si les infos ont bien été envoyées
         {
		 $sql = 'SELECT * FROM user WHERE pseudo='.$connexion->quote($_POST['pseudo']).' and pass='.$connexion->quote($_POST['pass']).' ';
		echo("<pre>\n");
		var_dump($sql);
		echo("</pre>\n");
		$req = $connexion->query($sql);
         $req->setFetchMode(PDO::FETCH_OBJ); // on dit qu'on veut que le résultat soit récupérable sous forme d'objet
         if ( ($req->rowCount() > 0) && ($pass == $req->pass)) 
         // et si la requête a été effectuée ET que l'utilisateur existe ET pass ok
         {
         
                 $_SESSION['pseudo'] = $_POST['pseudo'];
                 $_SESSION['pass']=$_POST['pass'];
                 $id = $_SESSION['id'];
                 $_SESSION['connexion'] == 1;
                 $message ='<p>Connexion réussie, <a href="index.php" alt="index">retourner a l\'index</a><br /></p>';
         }
         else //et si la requête n'a pas été effectuée ou l'utilisateur n'existe pas ou  pass pas ok
          {
                                                          $message = '<p>Echec de connexion, mauvais pseudo et/ou mauvais mot de passe, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>';
          }       
          $req->closecursor();
          } 
          else //______________________________________________________si les infos n'ont pas été bien envoyées
                          {
                          
                                          $message = '<p>pseudo et/ou mot de passe non fournis, <a href="connexion.php" alt="connexion">se connecter</a><br /></p>';
                          }
    print $message;
   ?>
  
et il me dit que le pseudo et/ou le mdp n'est pas fourni, alors j'ai vérifé ma page précédente avec le formulaire de connexion (pour voir si le formulaire pointe vers la bonne page) mais je ne trouve pas d'erreur ... voici le formulaire :

connexion.php
<form action="connect.php" method='post'>
		<table align="center" border="0">
			<tr>
				<td>Pseudo :</td>
				<td><input type="text" name="pseudo" maxlength="250"></td>
			</tr>
			<tr>
				<td>Mot de Passe :</td>
				<td><input type="password" name="pass" maxlength="250"></td>
			</tr>
			<tr>
				<td colspan="2" align="center"><input type="submit" value="Connexion"></td>
			</tr>
		</table>
	</form>

Re: Problème Log In

Posté : 08 août 2011, 16:12
par Cyrano
Normalement ce code aurait dû afficher la requête directement dans la page : c'est cette requête qui comporte une erreur, deux en réalité puisque ça concerne deux éléments qui ont le même problème.

Re: Problème Log In

Posté : 08 août 2011, 16:24
par maxgeek
Et c'est quoi le problème de la requete ? c'est celle qui m'a été indiquée dans les premières réponses du sujet.

Re: Problème Log In

Posté : 08 août 2011, 16:29
par Cyrano
:roll: Quel manque de sens de l'observation...

Quelle différence relèves-tu entre cette requête :
$sql  = 'SELECT * '.
        'FROM user '.
        'WHERE pseudo='.$connexion->quote($_POST['pseudo']).' '.
        'and pass='.$connexion->quote($_POST['pass']).' ';
Et celle-ci :
$sql  = "SELECT * ".
        "FROM user ".
        "WHERE pseudo='". $connexion->quote($_POST['pseudo']) ."' ".
        "AND pass='". $connexion->quote($_POST['pass']) ."'";

Re: Problème Log In

Posté : 08 août 2011, 17:07
par maxgeek
la premiere est avec des simples guillemets ' la seconde avec des doubles "
Mais dans toutes les réponses les requettes étaient avec des simples ' ...

Re: Problème Log In

Posté : 08 août 2011, 17:52
par Cyrano
Il y a un détail supplémentaire que tu ne sembles pas avoir remarqué, observe mieux ;)