Page 1 sur 1

problème identification

Posté : 26 janv. 2011, 20:15
par AurelienC
Bonjour à tous,

J'ai fait un petit programme pour l'identification, mais il ne marche pas, certaines fois, en rafraichissant, les gens se retrouvent identifié avec la première personne de la table...

Qu'est-ce qui cloche ?
<?php

//Récup

if(isset($_SESSION['auth']))		
	{
	if($_SESSION['auth']=="oui")
		{
		echo "
			<font face='tahoma' color='#558EDA' size='3'>
			<br>Bonjour $_SESSION[pseudo] !
			<br><a href='profil.php' style='color: rgb(85, 142, 213); text-decoration: none;'> > Mon profil</a></font>
			";
			}
	else
		{
		echo "ERREUR !";
		}
	}


elseif(!isset($_SESSION['auth']) and isset($_POST['form']))
	{
	//Récupération des données du formulaire
	$vpseudo=htmlentities($_POST['pseudo']);
	$vmdp=htmlentities($_POST['mdp']);
	
	
	//Vérif si vide
		
	//Pseudo = vide
	if (empty($vpseudo))
		{
		echo "Pas de pseudo !";
		exit();
		}
	
	//Mot de passe = vide
	if (empty($vmdp))
		{
		echo "Pas de mot de passe !";
		exit();
		}

	//Codage du mot de passe
	$vmdpc=md5($vmdp);

	//Recherche
		include("config.php");

		$connexion = mysql_connect($hote, $user, $mpasse, $base)
			or die ("erreur co");
		
		$db = mysql_select_db ($base)
			or die ("erreur base");
	
	$sql="select pseudo, passe, niveau from membres where pseudo='$vpseudo'";
	$req=mysql_query($sql)
	or die("Erreur SQL ! 1");
	$num=mysql_num_rows($req);
	$ligne = mysql_fetch_assoc($req);

	//Pas trouvé (pseudo)
	if($num==0)
		{
		echo "Erreur d'identification.";
		exit();
		}

	//Mauvais MDP
	if($ligne['passe'] != $vmdpc) 
		{
		echo "Erreur d'identification.";
		exit();
		}
  
	//ID OK
		
	$_SESSION['auth']="oui";
	$_SESSION['pseudo']="$ligne[pseudo]";
	$_SESSION['niveau']="$ligne[niveau]";
			
	}	

else
	{
	//Formulaire
	echo"<html>
	<form action='index.php' method='POST' enctype='multipart/form-data'>
	<input type='hidden' value='ok' name='form' />
	<table width='200' border='0' align='center'>
	<tr>
	<td><input name='pseudo' type='text' /></td>
	</tr>
	<tr>
	<td><input name='mdp' type='password' id='mdp' /></td>
	</tr>
	<tr>
	<td><input type='submit' value='Connexion' /></td>
	</tr>
	<tr>
	<td>	<font face='Tahoma'><b><a href='inscription.php' style='color: rgb(85, 142, 213); text-decoration: none;'>Inscription !</a></b></font></td>
	</tr>
	</table>
	</form>";
	}	
	

?>
Merci par avance,
Bonne soirée à tous

Re: problème identification

Posté : 26 janv. 2011, 23:09
par Aureusms
Essaye ceci :
$
sql="select pseudo, passe, niveau from membres where pseudo='".mysql_escape_string($vpseudo)."' LIMIT 1";
Comme normalement tu n'as qu'un pseudo identique LIMIT 1 devrait convenir. Si tu as plus d'un pseudo dans ta base identique, ta recherche n'est pas bonne.

Re: problème identification

Posté : 27 janv. 2011, 16:30
par AurelienC
Merci beaucoup !

je vais tenter ça

Re: problème identification

Posté : 27 janv. 2011, 17:21
par AurelienC
Ca ne marche toujours pas :(

Je me connecte avec la deuxième personne dans la base, qui a le même mot de passe que la première (mais logiquement ça ne devrait pas poser de problème !) l'identification se fait bien, mais quand je re vais sur la page d'accueil ça m'affiche "bonjour mauvais pseudo"...
<?php

//Récup

if(isset($_SESSION['auth']))		
	{
	if($_SESSION['auth']=="oui")
		{
		echo "
			<font face='tahoma' color='#558EDA' size='3'>
			<br>Bonjour $_SESSION[pseudo]
			<br><a href='profil.php' style='color: rgb(85, 142, 213); text-decoration: none;'> > Mon profil</a></font>
			";
			}
	else
		{
		echo "ERREUR !";
		}
	}


elseif(!isset($_SESSION['auth']) and !empty($_POST['form']))
	{
	//Récupération des données du formulaire
	$vpseudo=htmlentities($_POST['pseudo']);
	$vpseudo=mysql_escape_string($vpseudo);
	
	$vmdp=htmlentities($_POST['mdp']);
	$vmdp=md5($vmdp);
	
	//Vérif si vide
		
	//Pseudo = vide
	if (empty($vpseudo))
		{
		echo "Pas de pseudo !";
		exit();
		}
	
	//Mot de passe = vide
	if (empty($vmdp))
		{
		echo "Pas de mot de passe !";
		exit();
		}
	
	//Recherche
		include("config.php");

		$connexion = mysql_connect($hote, $user, $mpasse, $base)
			or die ("erreur co");
		
		$db = mysql_select_db ($base)
			or die ("erreur base");
	
	$sql="SELECT pseudo, passe, niveau FROM membres WHERE pseudo='$vpseudo' AND passe='$vmdp' LIMIT 1";
	
	$req=mysql_query($sql)
		or die("Erreur SQL ! 1");
	
	$num=mysql_num_rows($req);
	$ligne = mysql_fetch_assoc($req);

	//Pas trouvé (pseudo)
	if($num==0 or $ligne['pseudo']!=$vpseudo or $ligne['passe']!=$vmdp)
		{
		echo "Erreur d'identification.";
		exit();
		}

	//ID OK
		
	$_SESSION['auth']="oui";
	$_SESSION['pseudo']=$vpseudo;
	$_SESSION['niveau']=$ligne['niveau'];
	
	echo "
			<font face='tahoma' color='#558EDA' size='3'>
			<br>Bonjour $_SESSION[pseudo] !
			<br><a href='profil.php' style='color: rgb(85, 142, 213); text-decoration: none;'> > Mon profil</a></font>
			";
	
			
	}	

else
	{
	//Formulaire
	echo"<html>
	<form action='index.php' method='POST' enctype='multipart/form-data'>
	<input type='hidden' value='ok' name='form' />
	<table width='200' border='0' align='center'>
	<input type='hidden' value='$histo' /> <tr>
	<td><input name='pseudo' type='text' /></td>
	</tr>
	<tr>
	<td><input name='mdp' type='password' id='mdp' /></td>
	</tr>
	<tr>
	<td><input type='submit' value='Connexion' /></td>
	</tr>
	<tr>
	<td>	<font face='Tahoma'><b><a href='inscription.php' style='color: rgb(85, 142, 213); text-decoration: none;'>Inscription !</a></b></font></td>
	</tr>
	</table>
	</form>";
	}	
	

?>


Pourtant sur une page avec juste ça (voir ci dessous) ça marche bien !
<?php
session_start();
echo "$_SESSION[pseudo]";
?>

Je suis un peu perdu...

Merci

Re: problème identification

Posté : 27 janv. 2011, 17:42
par Aureusms
Es tu sûr que c'est cela ?
<?php
session_start();
echo "$_SESSION[pseudo]";
?>
ou bien cela
<?php
session_start();
echo $_SESSION["pseudo"];
?>

Re: problème identification

Posté : 27 janv. 2011, 19:31
par AurelienC
C'est bien ça

<?php
session_start();
echo "$_SESSION[pseudo]";
?>

Re: problème identification

Posté : 27 janv. 2011, 20:27
par moogli
non, la solution de Aureusms est bonne.

pourquoi ?

parce que toi tu demande a ce que l'on trouve dans le tableau $_SESSION un index qui à la valeur de la constante session.
oui lorsque tu utilise une chaine de caractère non entourée de ' ou " elle est considérée comme une constante, d'ailleur php doit de donner une erreur !

@+

Re: problème identification

Posté : 27 janv. 2011, 21:39
par AurelienC
Bonjour,

merci pour votre réponse.

J'ai une erreur quand je fais
echo "$_SESSION['pseudo']";
mais pas quand je fais
echo "$_SESSION[pseudo]";

Re: problème identification

Posté : 27 janv. 2011, 23:22
par moogli
ffiiooouuuu

echo $_SESSION['pseudo']; tous simplement.

php ne sais pas ou finis la variable dans ce cas, il est possible d'utiliser la syntaxe suivante echo "${_SESSION['pseudo']}"; mais franchement inutile ;)



@+

Re: problème identification

Posté : 01 févr. 2011, 23:20
par Aureusms
ffiiooouuuu

echo $_SESSION['pseudo']; tous simplement.

php ne sais pas ou finis la variable dans ce cas, il est possible d'utiliser la syntaxe suivante echo "${_SESSION['pseudo']}"; mais franchement inutile ;)



@+
Ah ba stiens connaissais pas cette écriture...
ca me rapelle les endif de steahl35 lol