Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
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 26/07/2006, 23h11   #1
Invité de passage
 
Inscription : juillet 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 4
Points : 0
Points : 0
Par défaut Sessions : comment vérifier le login et le mdp dans la base de données ?

Bonjour, je débute en PHP (moins d'une semaine ), je commence à comprendre le principe. J'ai réussi à faire une identification par une ouverture de session, sauf que pour l'instant le login et le mot de passe de mon utilisateur est entré directement dans le code. Et je bloque pour demander d'aller le comparer aux identifiants qui sont dans la base... Voici le code de mon fichier d'authentification :

Code de auth.php
Citation:
<?php
function CheckUser($login,$md5)
{
if($login=="user" && $md5=="ab4f63f9ac65152575886860dde480a1") // MD5 de azerty
return true;
return false;
}

?>
<?php
if(!isset($_POST['md5']))
{
header("Location: ../index.php");
die();
}
$md5=$_POST['md5'];

if(!isset($_POST['login']))
{
header("Location: ../index.php");
die();
}
$login=$_POST['login'];

if(!CheckUser($login,$md5))
{
header("Location: ../index.php");
die();
}

session_start();
$_SESSION['last_access']=time();
$_SESSION['ipaddr']=$_SERVER['REMOTE_ADDR'];
$_SESSION['user']=$login;

header("Location: ../indexauth.php");
?>
Je me suis servi du tutoriel de Bob sur developpez.net, qui était très très bien expliqué. Je travaille sur EasyPHP 1.8, j'ai ma base mySQL qui est prête à être utilisée. Comment dois-je procéder ?

Connexion à la base j'imagine :
Citation:
$db = mysql_connect('localhost', 'root', 'mdp');
// on sélectionne la base
mysql_select_db('nom_bdd',$db);
Et ensuite ? ... Merci beaucoup !
micha30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 23h54   #2
Membre expérimenté
 
Avatar de papyphp
 
Inscription : avril 2005
Messages : 425
Détails du profil
Informations personnelles :
Âge : 62
Localisation : Belgique

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : avril 2005
Messages : 425
Points : 545
Points : 545
Bonjour à toi et bienvenue sur ce forum,

C'est bon comme début.

Je te conseillerais d'aller voir les fonctions suivantes

Code :
1
2
mysql_query()
mysql_fetch_array()
La première te permets de soumettre une requete, la suivante d'en examiner le résultat.

Lien intéressant

Conseil en passant
Code :
1
2
3
4
 
$db = mysql_connect('localhost', 'root', 'mdp') or die ('erreur de connection : '.mysql_error()) ;
// on sélectionne la base
mysql_select_db('nom_bdd',$db) or die ('Base pas sélectionnée : '.mysql_error());
Tant que tu es en phase de développement, ça te permets de savoir ou est l'erreur et quelle est-elle.
__________________
Lu kinze d' awousse, la Vierje arandje û dusbrôle lu timp. Et ce coup ci, elle ne nous a pas ratés
papyphp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 00h03   #3
Membre actif
 
Avatar de nicolas.pied
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 161
Points : 161
Code permettant de vérifier qu'un login et un mot de passe (sous format MD5) sous bien présents dans la base de données :

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
// Connexion et sélection de la base
$link = mysql_connect("mysql_hote", "mysql_utilisateur", "mysql_mot_de_passe")
    or die("Impossible de se connecter");
echo "Connexion réussie";
mysql_select_db("my_database") or die("Could not select database");
 
// Exécuter des requêtes SQL
$query  = "SELECT * FROM nom_de_la_table_user ";
$query .= "WHERE 'nom_colonne_login' = '". $login ."' ";
$query .= "AND 'nom_colonne_mdp' = '" . $md5 . "' LIMIT 1";
 
$result = mysql_query($query) or die("Query failed");
if(mysql_num_rows($result) == 1) {
  echo "Authentification OK";
}
else {
  echo "Erreur d'authentification";
}
 
// Libération des résultats 
mysql_free_result($result);
 
// Fermeture de la connexion 
mysql_close($link);
__________________
Un peu d'humour : jokes.guppix.fr
Articles et actualités informatiques : Kbups.org
Articles sur le développement informatique : nicolaspied.developpez.com
nicolas.pied est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 00h54   #4
Invité de passage
 
Inscription : juillet 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 4
Points : 0
Points : 0
Merci pour ton lien papyphp, j'avais déjà lu à peu près la même chose sur php-debutant (c'est quasiment les mêmes cours).
Merci pour les pistes, je vais chercher, et merci pour l'astuce "ondie", je connaissais mais c'est vrai que j'ai pas encore à l'esprit que "en cas de bug" ça m'aiderait. Je vais les ajouter et bien les commenter...

Et merci nicolas pour le code, je vais le tester et l'adapter, je vous dirai si ça fonctionne bien. Merci à vous deux !



PS : j'adore PHP
micha30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 01h45   #5
Invité de passage
 
Inscription : juillet 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 4
Points : 0
Points : 0
Bon... j'ai un peu plus de mal que ce que je pensais...

Citation:
Notice: Undefined variable: login in d:\easyphp1-8\www\amoursecret\php\auth.php on line 9

Notice: Undefined variable: md5 in d:\easyphp1-8\www\amoursecret\php\auth.php on line 9
Query failed
J'arrive pas à relier ton code au mien. Apparemment il ne reconnait plus mes variables.

############

Citation:
// Connexion et sélection de la base
$link = mysql_connect("127.0.0.1", "root", "mdp") or die("Impossible de se connecter");
//echo "Connexion réussie<BR>";
mysql_select_db("nom_base") or die("Could not select database");
//echo "Sélection réussie<BR>";

// Exécuter des requêtes SQL
$query = "SELECT * FROM utilisateur WHERE login='$login' AND password='$mdp' LIMIT 1";
Ca, ça doit être bon. Mais ensuite, comment vérifier ?

Citation:
$result = mysql_query($query) or die("Query failed");
Je lance la requête. Actuellement j'ai un retour Query Failed, puisqu'il ne trouve pas mes variables $md5 et $login... Enfin, continuons. Est-ce que je garde ma fonction CheckUser ? En fait j'arrive plus à comprendre comment utiliser mon md5... boarf j'me noie
micha30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 10h09   #6
Membre actif
 
Avatar de nicolas.pied
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 161
Points : 161
En fait $login et $mdp, il faut les remplacer par tes variables contenant respectivement le login et le mot de passe. J'ai mis celles-ci car tu les utilisais dans ton premier script (cf. premier post).

Sinon, essayes de les remplacer par $_POST['login'] et $_POST['mdp']...ou pour etre encore plus sûr, tu indique un login et un mot de passe existant dans ta base, genre :

Code :
$query = "SELECT * FROM utilisateur WHERE login='mich30000' AND password='mon_mot_passe' LIMIT 1";
__________________
Un peu d'humour : jokes.guppix.fr
Articles et actualités informatiques : Kbups.org
Articles sur le développement informatique : nicolaspied.developpez.com
nicolas.pied est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 11h00   #7
Membre confirmé
 
Avatar de mLk92
 
Inscription : mars 2006
Messages : 522
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 522
Points : 249
Points : 249
Tu fais une requete du type :

Code :
1
2
3
4
5
 
$req="SELECT * FROM utilisateur ORDER BY login ASC";
$result=mysql_query($req) or die ("error");
$list_utilisateur=mysql_fetch_array($result);
(tu peux aussi faire : $list_utilisateur=mysql_fetch_row($result); )
Après tu prend les variable $_POST['login'] et $_POST['mdp']

et tu fait ton test :
Code :
1
2
3
4
5
6
7
 
 
if($_POST['login'] == $list_utilisateur['login] && $_POST['mdp'] == $list_utilisateur['mdp']){
echo"<p>identifiant corrects</p>";
}else{
 echo"<p> error</p>";
}
voilà =)
__________________
Citation:
" Can't take your slogans no more, no more sweet talk from the hypocrits " by Robert Nesta Marley
mLk92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 11h17   #8
Membre actif
 
Avatar de nicolas.pied
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 161
Points : 161
C'est pas très optimale pour la base de données ; il vaut mieux utiliser la clause WHERE en plus, elle est faite pour ça.
__________________
Un peu d'humour : jokes.guppix.fr
Articles et actualités informatiques : Kbups.org
Articles sur le développement informatique : nicolaspied.developpez.com
nicolas.pied est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 12h15   #9
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Je vois de plus en plus de truc de ce genre :

Code :
1
2
3
 
$sql = "................."
$req = mysql_query($sql);
interet ?

Pour ton identication, j'en ai une si ca t'interesse ... ?
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 12h27   #10
Membre actif
 
Avatar de nicolas.pied
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 161
Points : 161
Citation:
$sql = "................."
$req = mysql_query($sql);
Si j'ai bien compris le sens de ta phrase, cette façon de programmer est juste pour éclaircir le code source.
__________________
Un peu d'humour : jokes.guppix.fr
Articles et actualités informatiques : Kbups.org
Articles sur le développement informatique : nicolaspied.developpez.com
nicolas.pied est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 12h30   #11
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
bah oui pourquoi ne pas faire directement :

Code :
mysql_query("............");
Enfin voila quoi la je vois pas
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 12h38   #12
Membre actif
 
Avatar de nicolas.pied
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 161
Points : 161
Je pense pas qu'il soit necessaire d'engager un débat là dessus. Comme je l'ai dit, il s'agit juste de choix de certains développeurs que je comprends très bien également car si tu as une requête en SELECT FROM WHERE ORDER ou pire encore, il est donc plus clair de l'écrire sur plusieurs lignes. Et les habitudes font que ...
__________________
Un peu d'humour : jokes.guppix.fr
Articles et actualités informatiques : Kbups.org
Articles sur le développement informatique : nicolaspied.developpez.com
nicolas.pied est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 15h37   #13
Invité de passage
 
Inscription : juillet 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 4
Points : 0
Points : 0
Yeeess j'y suis arrivé ! J'ai eu du mal avec les "parse error", PHP est très contraignant, faut surtout pas oublier une virgule ou un espace en trop quelque part. C'est bon, j'ai mon code qui vérifie directement dans ma base si le gars est bien authentifié. Il compare les données entrées dans le formulaire : $_POST['login'] et $_POST['passwd'], avec les données de ma base :
Citation:
$sql = "SELECT * FROM `utilisateur` WHERE login='$login' and password='$password'";
Voici le code en entier pour les prochains :
Citation:
<?php
$login = $_POST['login'];
$password = $_POST['passwd'];

// Connexion et sélection de la base
$link = mysql_connect("127.0.0.1", "root", "tdsphilo") or die("Impossible de se connecter");
echo "Connexion réussie<BR>";
mysql_select_db("amoursecret",$link) or die("Could not select database");
echo "Sélection réussie<BR>";

$sql = "SELECT * FROM `utilisateur` WHERE login='$login' and password='$password'";
$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
$data = mysql_fetch_array($req);


if($_POST['login'] == $data['login'] && $_POST['passwd'] == $data['password']){
echo $data['login']."<BR>";
echo $data['password'];
}
else{
echo "<p>Mauvais identifiants</p>";
}
?>
Il reste à rediriger vers les bonnes pages après l'authentification, mais sinon je pense que l'essentiel y est. Merci à tous !
micha30000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 15h43   #14
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
Envoyé par Elwyn
bah oui pourquoi ne pas faire directement :

Code :
mysql_query("............");
Enfin voila quoi la je vois pas
C'est plus pratique pour débugguer les requêtes générées dynamiquement, parce que tu peux ajouter un echo $req avant de faire le query et ainsi voir ce qui est effectivement exécuté, si tout est fait directement dans le query aucun moyen de contrôler ce qui est fait.
__________________
Pas de questions techniques par MP, le forum est là pour ça et est plus efficace.

Orthographe : une connexion (avec un x), un langage (sans u), une requête (un seul t), 'une quote' (avec qu), une syntaxe (sans h)
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 19h54   #15
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Citation:
Envoyé par JWhite
C'est plus pratique pour débugguer les requêtes générées dynamiquement, parce que tu peux ajouter un echo $req avant de faire le query et ainsi voir ce qui est effectivement exécuté, si tout est fait directement dans le query aucun moyen de contrôler ce qui est fait.

Ah ok je savais pas
En fait j'ai appris le PHP comme ca, pas dans des livre ni rien, je l'ai appris au fil du temps et je me suis jamais "mis a jour" et comme le site du zero ca va bien 5 minutes
Donc si vous connaissez une adresse ou je peux en apprendre encore plus

car par exemple une connection a la BDD je ferais ca :

Code :
1
2
mysql_connect('    ','    ','    ');
mysql_select_db('    ');
au lieu de :

Code :
1
2
$db = mysql_connect('    ','    ','    ');
mysql_select_db('    ','$db');
il y a une difference enorme ? car apres dans les "nouveaux codes" je vois aussi :

Code :
mysql_query("..............",'$db');
toujours ce lien a la connection du debut ...
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2006, 20h05   #16
Membre actif
 
Avatar de nicolas.pied
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 161
Points : 161
Ca va quand il y a des plusieurs connexions à des base de données sinon bof bof.

Personnellement, je te recommande la documentation PHP au format CHM, une fois que tu la maîtrise alors tu as tout sous la main en un rien de temps.
__________________
Un peu d'humour : jokes.guppix.fr
Articles et actualités informatiques : Kbups.org
Articles sur le développement informatique : nicolaspied.developpez.com
nicolas.pied est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2006, 17h42   #17
Membre chevronné
 
Avatar de Elwyn
 
Homme
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 836
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : juillet 2006
Messages : 836
Points : 712
Points : 712
Citation:
Envoyé par nicolas.pied
Personnellement, je te recommande la documentation PHP au format CHM, une fois que tu la maîtrise alors tu as tout sous la main en un rien de temps.
Euh ... c'est a dire ?
Elwyn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2006, 20h18   #18
Membre actif
 
Avatar de nicolas.pied
 
Inscription : janvier 2005
Messages : 244
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : janvier 2005
Messages : 244
Points : 161
Points : 161
Voici le lien pour télécharger la documentation :

ICI
__________________
Un peu d'humour : jokes.guppix.fr
Articles et actualités informatiques : Kbups.org
Articles sur le développement informatique : nicolaspied.developpez.com
nicolas.pied 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 12h06.


 
 
 
 
Partenaires

Hébergement Web