Requete mysql pour authentification

Résolu
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010 - 9 août 2007 à 15:49
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010 - 13 août 2007 à 13:00
Bonjour à tous de nous aider nous débutant. Vous faites un travail terrible. Moi j'apprend php en auto didacte et me demandais si cette portion de code pour une zone sécurisée par session était juste au niveau mysql (injection possible ou pas?).

<?php
if ((empty ($_POST['nom'])) && (empty ($_POST['pwd'])))//Verification que les variables $_POST sont définies ou existante
    { header ('location: ../../erreurcommande.php?erreur=post'); }
else
    {
    // création des variables
    include ('../config/options.config.php');
    $nom = $_POST['nom'];
    $pwd = $_POST['pwd'];

    // connection et recherche du password
    include ('connexion.cmd.php');
    $table = 'users';
    $requete = "SELECT pwd FROM $table WHERE nom="$nom" AND typeuser="administrateur"";

    $resultat = mysql_query($requete);
    $pass = mysql_fetch_array ($resultat);

    //fermeture et purge memoire requete
    mysql_free_result ($resultat); 
    mysql_close ();

    //Verification et redirection
    if ($pass['pwd'] == $pwd)
        { echo 'admin authentifié';}
    else
        { echo 'n\'est pas administrateur';}

    }
?>
ou

est-ce qu'il vaut mieux un

    $requete = "SELECT * FROM $table *";
    et faire un tri du tableau en comparant tout
   
Merci de vos conseil avisés.

6 réponses

Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
9 août 2007 à 17:31
OK j'avais mal lu.

Tu fais : $requete = "SELECT nom FROM $table WHERE nom="$nom" AND typeuser="administrateur" AND pwd = "$pwd"";

et ensuite if(mysql_num_rows($resultat) == 1){ admin trouvé }

plus simple et rapide :)
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
13 août 2007 à 12:12
Il n'y a pas vraiment de raison dans ce cas précis, il faut juste sélectionner quelque chose. En général, tu fais un select sur l'ID du membre pour le stocker en session  parce qu'un ID ça sert toujours. Mais si tu as aussi besoin du type d'utilisateur, vas-y aussi :)
3
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010
13 août 2007 à 13:00
Merci pour les info. J'adapte mon script ce soir.
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
9 août 2007 à 16:41
Hello,

si tes variables sont bien échappées par les magicquotes oui, sinon il faut faire addslashes( ) avant.

Pourquoi le mot de passe n'est-il pas dans la table aussi ?

est-ce qu'il vaut mieux un

    $requete = "SELECT * FROM $table *";
    et faire un tri du tableau en comparant tout

>> vaut mieux appeler chaque colonne oui.

à+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010
9 août 2007 à 16:55
si le mot de pass est contenu dans la base.

En fait la structure de ma base est

   id autoincrément
   mot de pass
   nom d'utilisateur
   catégorie (admin client entrepreneur)
   identifiant

Je selectionne la personne par la requete (si elle existe) et puis je verifie le mot de passe qu'elle a postée avec celui contenus dans la base de donnée.

En fait le problème est que j'hesite entre deux scripts. le premier ci dessus et celui ci dessous (qui me semble lourd puisqu'il parcour toute la bdd et verifie chaque ligne donc quand elle est petite sa va mais en grossisant??).

    <?php


      // création des variables


      $nom = $_POST["nom"];
      $pwd = $_POST["pwd"];
      $idUser = 0;
      $admin = 0;


      // connection et recherche des données
      include("connexion.php");
      $table = "USERS";
      $requete = "SELECT * FROM $table";
      $resultat = mysql_query($requete);


      $nlignes = mysql_num_rows($resultat);


      for ($i=0 ; $i < $nlignes ; $i++)
      {
       $ligne = mysql_fetch_array($resultat);
       if ($ligne[1] == $nom AND $ligne[2] == $pwd AND $ligne[3] == "administrateur")
       {
        // obtention des valeurs
        $admin = 1;
        $idUser = $ligne[0];
        $i = $nlignes;
       }
      }


      if ($admin == 1)
      { echo 'admin trouvé';}
      else
      { echo 'admin non trouvé'; }


    ?>
0
agparchitecture Messages postés 88 Date d'inscription jeudi 9 mars 2006 Statut Membre Dernière intervention 7 novembre 2010
13 août 2007 à 08:50
Désolé du retard pour la réponse mais suis partis en week-end. 

D'accord mais encore une question. Pourquoi selectionner le nom et pas autre chose (comme le pass ou le type d'utilisateur)?
0
Rejoignez-nous