Connexion php/mysql aidez moi

ferraioli Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, j'apprend le php et mysql de 0 avec l'aide d'un DVD elephorm
et comme première exercice j'ai voulut réaliser une inscription,connéxion

Mon inscription marche niquel mais ma connexion a un petit problème...
Le script marche mais si j'écrit rien dans les input pseudo et mot de passe et que je clique sur le boutton connexion, cela me mene a la page de connexion réussit alors qu'elle devrais pas :/ je vous prie de m'aider !

mon script :

<!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 nom</title>
</head>

<body>
<form method="post" action="login.php">
Pseudo : <input type="text" name="pseudo"></br>
Mot de passe : <input type="text" name="passe"></br></br>
<input type="submit" name="botton"  value="Connexion" />



<?php
//------Connexion DB-------//
session_start();
$connexion=mysql_connect( "localhost" , "root" , "" );
mysql_select_db("catalogue");


//------Condition quand tu click sur bouton envoyer-------//
if(isset($_POST['botton']))
{
	
	
//-----On vérifie si le pseudo et le mot de passe sont les même-----//	
$requete = "SELECT * FROM membre WHERE pseudo='".$_POST['pseudo']."' AND passe='".$_POST['passe']."'"; 
$resultat=mysql_query($requete); 
$donnee = mysql_fetch_array($resultat); 


//-----Condition Si le pseudo et le mote de passe sont les même alors header nous envoi a la page connexion-----//	
if($donnee['pseudo']==$_POST['pseudo'] AND $donnee['passe']==$_POST['passe']) 
{ 
header('Location:connexion.php');
} 


//-----Sinon, envoi du message vos identifiant sont incorréct-----//	
else
{
echo"vos idéntifiant sont incorrect";
}
}
?>
</body>
</html>




Cordialement.
A voir également:

2 réponses

Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Hello,

En fait tu t'y prends mal. Normalement tu ne récupères pas en base les lignes possédant un pseudo ET un mot de passe. Normalement ta requête devrait être celle-ci :

$requete = "SELECT passe FROM membre WHERE pseudo='".$_POST['pseudo']."'";

Et ensuite dans ton if tu dois vérifier que le passe est le même, et surtout que la base ne te renvoie pas un résultat vide, ce qui signifie que l'utilisateur n'existe pas.

if($donnee['passe'] != null && $donnee['passe'] == $_POST['passe']) { 
   header('Location:connexion.php');
} 

Sachant que tu oublies certaines bonnes pratiques :

1/ Normalement tu devrais vérifier que les données POST ne sont pas vides avant même d'envoyer la requête en base. Cela t'évite de solliciter la base pour rien.

2/ Tes mots de passe de base devraient être cryptés en sha1 (en faisant simplement $pass = sha1($pass)). C'est plus sécuritaire si tu te fais pirater ta base.

3/ Il n'est pas recommandé d'insérer directement des données POST dans tes requêtes, car en mettant certaines choses on pourrait récupérer l'intégralité de ta base (injection SQL). Renseigne-toi sur les requêtes préparées.

Bon courage !
0
Utilisateur anonyme
 
salut !
Juste une petite question, n'est il pas préférable de faire faire la requête de cette manière :

$requete = "SELECT count(*) FROM membre WHERE pseudo='".$_POST['pseudo']."' and passe=".sha1($_POST['passe'])."";


afin de ne pas manipuler une chaine correspondant au bon mot de passe ?
(c'est pour pas culture perso ^^)

merci.
naga
0
Mihawk Messages postés 4315 Date d'inscription   Statut Contributeur Dernière intervention   846
 
Naga, c'est ce que je conseille au dessus ; mais avant de crypter le $_POST, il faut déjà que la base elle-même soit cryptée ! Sinon la comparaison plantera à coup sûr
0
Utilisateur anonyme
 
oui en effet ^^ merci de la précision =)
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Salut,

Très bon conseil de Mihawk !
D'abord un petit :
if(isset($_POST) && !empty($_POST['pseudo']) && !empty($_POST['passe'])


Ensuite je te conseil de faire un exists de ton speudo, avec une function du type :
function exists($login){
$this->_bd->prepare('SELECT count(*) FROM membre WHERE login = :l ');
$this->_db->bindValue(':l', $login, PDO::PARAM_STR);
$req = $this->_bd->execute();
return (bool)$req->fetch();

Attention, ma fonction n'est pas tout à fait juste, à ne pas copier coller bêtement !

Donc si ta fonction te renvois true, tu check ensuite le mot de passe crypté. Sinon tu echo comment quoi l'utilisateur n'existe pas.

Pour finir, donc si ton mdp est bon, tu mets les infos du user en $_SESSION et tu header('Location:index.php') par exemple !
0