Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & SQL-Server
PHP & SQL-Server Forum d'entraide sur SQL-Server avec PHP. Avant de poster -> FAQ SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/06/2007, 20h20   #1
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Par défaut Identification en PHP

Bonjour,

Je voudrais limiter l'accès de certaines pages d'un site en php. Pour cela je veux interroger une base de données SQL server dans laquelle j'ai entré deux login(login) et deux mots de passes (pwd). J'arrive à les afficher, donc à lire la table. Par contre, mon programme qui demande à l'utilisateur de s'identifier ne fonctionne pas comme je le veux. Il envoit bien les données, par contre il sort du if sachant que je tape le bon mot de passe.

Voici mon code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
<HTML>
    <HEAD>
 
        <TITLE>
        </TITLE>
    </HEAD>
    <BODY>
<?
if( $id = mssql_connect('ESMAIL_AHOUZI','','') ) 
            {
                if( $id_db = mssql_select_db('BDTR') )
                    {
 
            printf("la connexion a bien été effectué");
 
 
 
                    }    
                else 
                    {
                    printf("Echec de connexion à la base");
                    }
 
            } 
    else 
            {
                printf("Echec de connexion au serveur de base de données");
            }
 
 
 
 
 
 
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) 
    {
 
 
        $requete = "SELECT pwd FROM identification WHERE login='".$_POST['login']."'";
 
 
 
        $req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
 
        $data = mssql_fetch_assoc($req);
 
        if($data['pwd'] !=$_POST['password']) 
            { 
 
                echo "Ton Pass ne correspond pas à celui de la BDD"; 
 
            }
        else 
            {
                session_start();
                $_SESSION['login'] = $_POST['login']; 
 
                echo "Tu es bien connecté";
 
            } 
    }
else 
    { 
 
    echo "Tu as oublié de remplir un champ";
 
    }
 
 
?>
 
 
    </BODY>    
</HTML>

Merci d'avance.
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2007, 20h27   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
quel est le message qui s'affiche quand tu tapes un bon mot de passe ?
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 11h32   #3
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Voici le message que j'ai dans tous les cas : "la connexion a bien été effectuéTon Pass ne correspond pas à celui de la BDD ".
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 11h38   #4
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Tu as bien mis les mots de passes en clair dans la base de données?
Essaie ca:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
$req = mssql_query($requete) or die('Erreur SQL !<br>' . $mysql . '<br>' . mssql_error());
 
$data = mssql_fetch_assoc($req);
echo "password tape : " . $_POST['password'] . "<br/>";
echo "password dans bdd : " . $data['pwd'] . "<br/>"; 
        if($data['pwd'] !=$_POST['password']) 
            { 
 
                echo "Ton Pass ne correspond pas à celui de la BDD"; 
 
            }
et regardes si ce sont bien les memes.
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h05   #5
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
la connexion a bien été effectué

password tape dans le cadre: inpt
password dans bdd : inpt

Ton Pass ne correspond pas à celui de la BDD

Les mots de passes sont effectivement bien les mêmes. Il y a donc un pb dans le if. C'est comme s'il n'arrivait pas à comparer les deux chaines de caractères. Peut être que la syntaxe du if n'est pas bonne.
Je les ai déclaré tous les deux en temps que VARCHAR taille 10. Peut être qu'il y a d'autres choses à déclarer.
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h07   #6
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Autre solution :
Code :
1
2
3
4
5
6
7
8
9
10
11
$req = mssql_query($requete) or die('Erreur SQL !<br>' . $mysql . '<br>' . mssql_error());
 
$data = mssql_fetch_assoc($req);
echo "password tape : " . var_dump($_POST['password']) . "<br/>";
echo "password dans bdd : " . var_dump($data['pwd']) . "<br/>"; 
        if($data['pwd'] !=$_POST['password']) 
            { 
 
                echo "Ton Pass ne correspond pas à celui de la BDD"; 
 
            }
je pense que tu as un probleme d'espace avant ou apres le mot de passe, montres nous le résultat avec var_dump()
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h15   #7
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
la connexion a bien été effectué
string(4) "inpt" password tape :
string(4) "inpt" password dans bdd :
Ton Pass ne correspond pas à celui de la BDD
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h23   #8
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Ouh la...
Y a eu un probleme identique il y a une heure et la personne s'était trompée en copiant son script dans le forum (en fait il modifiait son erreur de frappe du coup on voyait pas l'erreur)

Peux-tu remettre le code exact (juste copier coller) ici (avec les var_dump) ?
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h28   #9
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
voici mon code php : exemple1.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<HTML>
	<HEAD>
		<TITLE>
		</TITLE>
	</HEAD>
	<BODY>
<?
if( $id = mssql_connect('ESMAIL_AHOUZI','','') ) 
			{
				if( $id_db = mssql_select_db('BDTR') )
					{	
			printf("la connexion a bien été effectué");
            		}	
				else 
					{
					printf("Echec de connexion à la base");
					}
			} 
	else 
			{
				printf("Echec de connexion au serveur de base de données");
			}
 
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password'])) 
	{
		$requete = "SELECT pwd FROM identification WHERE login='".$_POST['login']."'";
 
		$req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
 
 $data = mssql_fetch_assoc($req);
 echo "password tape : " . var_dump($_POST['password']) . "<br/>";
 echo "password dans bdd : " . var_dump($data['pwd']) . "<br/>";
 if($data['pwd'] !=$_POST['password']) 
	{ 
	echo "Ton Pass ne correspond pas à celui de la BDD"; 
	}
 
		$data = mssql_fetch_assoc($req);
 
		if($data['pwd'] !=$_POST['password']) 
			{ 
				echo "Ton Pass ne correspond pas à celui de la BDD"; 
			}
		else 
			{
				session_start();
				$_SESSION['login'] = $_POST['login']; 
				echo "Tu es bien connecté";
			} 
	}
else 
	{ 
	echo "Tu as oublié de remplir un champ";
	}
?>
 
	</BODY>	
</HTML>

Voici la page html créée précédemment :
Code HTML :
1
2
3
4
5
6
7
8
9
10
11
<HTML>
	<BODY>
<form method="post" action="exemple1.php">
 <label>Nom d utilisateur : <input type="text" name="login" /></label><br />
 <label>Mot de passe : <input type="password" name="password" /></label><br /><br />
 <input type="submit" value="Envoyer" />
 <input type="reset" value="Rétablir" />
	</form>
 
	</BODY>
</HTML>
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h31   #10
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
C'est bizarre tu as deux mssql_fetch_assoc()

l'exemple que je te donnais avec les var_dump il ne fallait pas le copier/coller entièrement, tu te retrouves à faire un fetch deux fois de suite, du coup la seconde fois tes variables sont bel et bien différentes. Fais ca:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<HTML>
<HEAD>
 
<TITLE>
</TITLE>
</HEAD>
<BODY>
<?
if( $id = mssql_connect('ESMAIL_AHOUZI','','') )
{
if( $id_db = mssql_select_db('BDTR') )
{
printf("la connexion a bien été effectué");
}
else
{
printf("Echec de connexion à la base");
}
 
}
else
{
printf("Echec de connexion au serveur de base de données");
}
 
if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password']))
{
$requete = "SELECT pwd FROM identification WHERE login='".$_POST['login']."'";
 
$req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
 
$data = mssql_fetch_assoc($req);
echo "password tape : " . var_dump($_POST['password']) . "<br/>";
echo "password dans bdd : " . var_dump($data['pwd']) . "<br/>";
if($data['pwd'] !=$_POST['password'])
{
echo "Ton Pass ne correspond pas à celui de la BDD";
}
else
{
session_start();
$_SESSION['login'] = $_POST['login'];
 
echo "Tu es bien connecté";
 
}
}
else
{
echo "Tu as oublié de remplir un champ";
}
 
?>
 
</BODY>
</HTML>
Il ne devrait pas te mettre Ton Pass ne correspond pas à celui de la BDD cette fois ci.
Il devrait meme te mettre une erreur a propos des header() already sent
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h39   #11
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Ca a l'air de fonctionner cette fois. Il me mets ça :

Citation:
la connexion a bien été effectuéstring(8) "hnhpytnz" password tape :
string(8) "hnhpytnz" password dans bdd :

Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\essai login\new folder\exemple1.php:8) in c:\program files\easyphp1-8\www\essai login\new folder\exemple1.php on line 41

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\essai login\new folder\exemple1.php:8) in c:\program files\easyphp1-8\www\essai login\new folder\exemple1.php on line 41

Tu es bien connecté
Ce sont des cookies envoyer à l'utilisateur j'imagine ça ?. En tout cas je vous remercie !!!
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h44   #12
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
De rien !
mais je ne comprends pas pourquoi ca ne marchait pas avant puisqu'on n'a rien changé

Autrement, tu utilises mal les sessions. Il ne faut rien envoyer au navigateur avant d'utiliser un session_start()
Pour ca, il faut donc faire tous tes tests en php d'abord, et ensuite, quand tu as tout réussi tu crées la page html. Il faut donc retirer tous le html avant tes tests en php, et ne faire aucun echo avant de faire un session_start().

Bon courage
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/06/2007, 12h53   #13
Membre du Club
 
Étudiant
Inscription : juin 2007
Messages : 70
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2007
Messages : 70
Points : 40
Points : 40
Envoyer un message via MSN à ptiyo
si ta un probleme ac tes sessions_start() c juste ke tu doi les placer tt en haut de ta page avant tout le reste mm le html en gro tu rentre : <? session_start() ?>
ptiyo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 15h09   #14
Membre régulier
 
Avatar de lou87
 
Inscription : février 2006
Messages : 349
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : février 2006
Messages : 349
Points : 81
Points : 81
Il y a quelque chose qui m'intrigue dans le code......

Je sais je débute dans ce langage aussi mais au lieu de mssql_connect, ce n'est pas mysql_connect ?

Juste par curiosité....
__________________
Programmer c'est comme gravir une montagne...
Il faut procéder par étapes...
(? auteur ?)
Un seul être vous manque et tout est dépeuplé.
Lamartine (merci chat hotplug ^^)
lou87 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 15h43   #15
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
mysql_connect() permet de se connecter au SGBD MySQL
mssql_connect() permet de se connecter au SGBD MS SQL Server
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 13h36   #16
Invité de passage
 
Inscription : juin 2007
Messages : 28
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 28
Points : 1
Points : 1
Bonjour,
J'ai juste changé d'ordinateur, je suis toujours sur SQL Server, c'est juste le nom qui as changé. Mais la reconnaissance du mot de passe ne marche pas cette fois !!! Si qq voit d'où peut venir l'erreur, je suis preneur.
Merci.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<link rel="stylesheet" type="text/css" href="indexcss.css"/>
<HTML>
<HEAD>
<TITLE>
</TITLE>
</HEAD>
<BODY>
<?
  	if( $id = mssql_connect('PC-AHOUZI','','') )
			{
				if( $id_db = mssql_select_db('BDTR') )
					{
					echo "connexion à la base de données";
					}
				else
					{
					printf("Echec de connexion à la base");
					}
 
			}
	else
			{
				printf("Echec de connexion au serveur de base de données");
			}
 
		if(isset($_POST) && !empty($_POST['login']) && !empty($_POST['password']))
			{
				$requete = "SELECT pwd FROM identification WHERE login='".$_POST['login']."'";
 
				$req = mssql_query($requete) or die('Erreur SQL !<br>'.$mysql.'<br>'.mssql_error());
 
				$data = mssql_fetch_assoc($req);
			echo "password tape : " . var_dump($_POST['password']) . "<br/>";
 
			echo "password dans bdd : " . var_dump($data['pwd']) . "<br/>"; 
 
 
				if($data['pwd'] !=$_POST['password'])
					{
					?>
					<div align="center"><br><br><br><big>
					<?
 
				echo "Désolé, le mot de passe : " . $_POST['password'] . "<br/>"; 
				echo "et le login : " . $_POST['login'] . "<br/>"; 
				echo " ne correspondent pas "
 
 
			?>		<br><br><br>
				Cliquer <a href="login.htm">ici</a> pour recommencer
					</big></div>
 
 
				 </big></div>
					<?
 
 
					}
				else
					{
					?>
					<div align="center"><br><br><br><big>
					<?
					echo " Bienvenue";
					?> <br><?
 
					echo $data['nom'];
					?> <br><br><br><?
					echo" vous êtes maintenant connecté à la base de données";
					?> <br><br><br>
					Cliquer <a href="page_carte_maroc.htm">ici</a> pour continuer
					</big></div>
					<?
					}
		}
 
 
 
		else
			{
			?> <div align="center"><br><br><br><big><?
				echo "Vous avez oublié de remplir un champ";
				?> <br><br><br>
					Cliquer <a href="login.htm">ici</a> pour recommencer
					</big></div>
					<?
 
			}
 
 
 
?>
 
</BODY>
</HTML>
Citation:
connexion à la base de données
string(4) "inpt" password tape :
string(8) " inpt " password dans bdd :

Désolé, le mot de passe : inpt
et le login : i.ahouzi
ne correspondent pas

Cliquer ici pour recommencer
jumar84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h10   #17
Membre régulier
 
Inscription : juin 2002
Messages : 114
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juin 2002
Messages : 114
Points : 77
Points : 77
Envoyer un message via MSN à Odulo
Citation:
string(4) "inpt" password tape :
string(8) " inpt " password dans bdd :
Ce ne sont pas les mêmes string c'est tout :p il y a deux espaces de trop
Odulo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2007, 14h15   #18
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Je dirai même qu'il y en a quatre en trop (deux avants, deux apres) mais cette erreur tu l'avais déjà eue un peu plus haut dans ton message, tu aurais pu t'en rendre compte (c'était le but des var_dump() que je t'avais fait mettre!)
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h08.


 
 
 
 
Partenaires

Hébergement Web