problème identification

Eléphanteau du PHP | 25 Messages

26 janv. 2011, 20:15

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

ViPHP
ViPHP | 1996 Messages

26 janv. 2011, 23:09

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.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 25 Messages

27 janv. 2011, 16:30

Merci beaucoup !

je vais tenter ça

Eléphanteau du PHP | 25 Messages

27 janv. 2011, 17:21

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

ViPHP
ViPHP | 1996 Messages

27 janv. 2011, 17:42

Es tu sûr que c'est cela ?
<?php
session_start();
echo "$_SESSION[pseudo]";
?>
ou bien cela
<?php
session_start();
echo $_SESSION["pseudo"];
?>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphanteau du PHP | 25 Messages

27 janv. 2011, 19:31

C'est bien ça

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 janv. 2011, 20:27

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 !

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 25 Messages

27 janv. 2011, 21:39

Bonjour,

merci pour votre réponse.

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 janv. 2011, 23:22

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 ;)



@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 1996 Messages

01 févr. 2011, 23:20

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
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr