Base de donnée mysql

Locki Messages postés 225 Statut Membre -  
avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Voici mon code php:

<?php
// On démarre la session
session_start();
$loginOK = false;

// On n'effectue les traitement qu'à la condition que
// les informations aient été effectivement postées
if ( isset($_POST) && (!empty($_POST['nom_utilisateur'])) && (!empty($_POST['password'])) )
{

extract($_POST); // je vous renvoie à la doc de cette fonction

// On va chercher le mot de passe afférent à ce login
$sql = "SELECT nom_utilisateur FROM login WHERE nom_utilisateur = '$login'";
$req = mysql_query($sql) or die('Erreur SQL : '.$sql);

// On vérifie que l'utilisateur existe bien
if (mysql_num_rows($req) > 0)
{
$data = mysql_fetch_assoc($req);

// On vérifie que son mot de passe est correct
if ($password == $data['password'])
{
$loginOK = true;
}
}
}

// Si le login a été validé on met les données en sessions
if ($loginOK)
{
$_SESSION['nom_utilisateur'] = $data['nom_utilisateur'];
$_SESSION['age'] = $data['age'];
$_SESSION['sexe'] = $data['sexe'];
$_SESSION['ville'] = $data['ville'];
}
else
{
echo 'Nom d\'utilisateur ou mot de passe incorect. Veuillez réessayer.';
}
?>

J'ai une erreur quand je veux me conecter sur mon site. Il me vient:
Erreur SQL : SELECT nom_utilisateur FROM login WHERE nom_utilisateur = ''

Pourtant, l'utilisateur et le mot de passe sont bien enregistrer dans ma bdd.

Quelle est l'erreur??

Merci à ceux qui m'aideront

13 réponses

  1. bissdebrazza Messages postés 2886 Statut Contributeur 712
     
    Salut!dis nous la variable $login est déclarée où?
    0
  2. Locki Messages postés 225 Statut Membre 13
     
    en effet, je ne l'ai pas déclarée.
    Pourrais-tu m'éclairer car je suis un peu débutant...
    0
  3. bissdebrazza Messages postés 2886 Statut Contributeur 712
     
    ok!login correspond à quoi pour toi?
    0
  4. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Ton identification peut mal de fonctionner :
    // On va chercher le mot de passe afférent à ce login 
    $sql = "SELECT nom_utilisateur FROM login WHERE nom_utilisateur = '$login'";

    J'espère que ton serveur a l'option magic_quotes activée (ce qui est également déconseillé), sinon on peut te faire une injection SQL.

    Je te déconseil l'utilisation de la fonction extract(). Imagine que tu aies une variable contenant une informations qui n'est pas censée dépendre de l'utilisateur et que le hackeur la modifie en créant un champ lui-même dans le formulaire (ce qui est possible, car le HTML est côté client, donc modifiable).

    Essaye avec ce script.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Locki Messages postés 225 Statut Membre 13
     
    bissdebrazza:au login de la personne? (enfaite je ne comprends pas la syntaxe de SELECT FROM WHERE)
    avion-f16: ton script est plein de fautes...
    0
    1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Tu pourrais m'en citer au moins une ?
      En tout cas, pas au niveau syntaxique.

      As-tu mis tes identifiants dans cette ligne ?
      $pdo = new PDO('mysql:host=localhost;dbname=db_test','root','');
      localhost : ton hôte SQL
      db_test : le nom de ta base de données
      root : ton identifiant
      les guillemets vides : ton mot de passe

      Et remplace la ligne 16 par
      if($password == $donnees->password) {
      0
  7. Locki Messages postés 225 Statut Membre 13
     
    excuse-moi, la page a été traduite automatiquement ....

    sinon j'ai une erreur:
    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000] [1049] Unknown database 'db_test'' in C:\xampp\htdocs\Formulaire_inscription\php\VerifLogin.php:6 Stack trace: #0 C:\xampp\htdocs\Formulaire_inscription\php\VerifLogin.php(6): PDO->__construct('mysql:host=loca...', 'root', '') #1 {main} thrown in C:\xampp\htdocs\Formulaire_inscription\php\VerifLogin.php on line 6

    merci a toi
    0
    1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      J'ai modifié mon message précédent, j'y explique comment y mettre tes informations.
      0
  8. Locki Messages postés 225 Statut Membre 13
     
    ca marche mais la vérification ne marche pas. Il me vient toujours "Nom d'utilisateur ou mot de passe incorrect. Veuillez réessayer."
    0
  9. Eastchild Messages postés 337 Statut Membre 31
     
    Bonjour,

    Tu as oublié un point dans ta requête SQL.

    le bon code :

    $sql = "SELECT nom_utilisateur FROM login WHERE nom_utilisateur = '.$login; 
    0
  10. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Essaye avec ça : http://paste.pocoo.org/show/215698/
    Dis-moi ce que tu vois (et n'oublie pas de remettre tes informations à la ligne 7).
    0
  11. Locki Messages postés 225 Statut Membre 13
     
    Formulaire envoyé
    Nom d'utilisateur ou mot de passe incorect. Veuillez réessayer.
    0
    1. Eastchild Messages postés 337 Statut Membre 31
       
      Si c'est bien ce que je pense, remplace ta variable $login par $_POST['nom_utilisateur']
      0
    2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Regarde à la ligne 9 : $login est défini est contient $_POST['nom_utilisateur'] protégé contre les injections SQL.
      0
  12. Locki Messages postés 225 Statut Membre 13
     
    je te met un screen de ma bdd:

    http://img691.imageshack.us/img691/1776/20100519152729.png
    0
    1. Eastchild Messages postés 337 Statut Membre 31
       
      Tu veux bien récupéré les données de ta table login en comparant le nom d'utilisateur que l'on a posté avec ceux de la table ?
      0
  13. Locki Messages postés 225 Statut Membre 13
     
    Peux tu mieux expliquer stp
    0
    1. Eastchild Messages postés 337 Statut Membre 31
       
      Lorsqu'un utilisateur arrive sur ton site, il a droit à un formulaire sur lequel il va pouvoir saisir son login et son mot de passe. Un fois qu'il a posté, tu récupères les données qu'il a envoyé pour les comparer avec les données de ta BDD. Pour cela, il faut que tu recupère à l'aide de $_POST ce qui a été posté.
      Sur ton code, tu donnes les variables $login et $password qui ne sont pas définie donc elle ne valle rien. Il faut utiliser $_POST['nom_utilisateur'] et $_POST['password'].


      Ce qui donne :

      <?php   
      // On démarre la session   
      session_start();   
      $loginOK = false;   
      
      // On n'effectue les traitement qu'à la condition que   
      // les informations aient été effectivement postées   
      if ( isset($_POST) && (!empty($_POST['nom_utilisateur'])) && (!empty($_POST['password'])) )   
      {   
      
      // On va chercher le mot de passe afférent à ce login   
      $sql = "SELECT * FROM login WHERE nom_utilisateur = '.$_POST['nom_utilisateur'];   
      $req = mysql_query($sql) or die('Erreur SQL : '.$sql);   
      
      // On vérifie que l'utilisateur existe bien   
      if (mysql_num_rows($req) > 0)   
      {   
      $data = mysql_fetch_assoc($req);   
      
      // On vérifie que son mot de passe est correct   
      if ($_POST['password'] == $data['password'])   
      {   
      $loginOK = true;   
      }   
      }   
      }   
      
      // Si le login a été validé on met les données en sessions   
      if ($loginOK)   
      {   
      $_SESSION['nom_utilisateur'] = $data['nom_utilisateur'];   
      $_SESSION['age'] = $data['age'];   
      $_SESSION['sexe'] = $data['sexe'];   
      $_SESSION['ville'] = $data['ville'];   
      }   
      else   
      {   
      echo 'Nom d\'utilisateur ou mot de passe incorect. Veuillez réessayer.';   
      }   
      ?>
      0
  14. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    En fait, en protégeant $login pour les injections SQL, les guillemets se mettent déjà autour de la chaine.
    Donc la ligne
    $sql = 'SELECT 'password' FROM 'login' WHERE 'nom_utilisateur' = "'.$login.'"';
    devient
    $sql = 'SELECT 'password' FROM 'login' WHERE 'nom_utilisateur' = '.$login;
    Cette fois, je pense que c'est la bonne :)
    0