IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] [Débutant] Autentification HTTP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut [Tableaux] [Débutant] Autentification HTTP
    Bonjour!

    Voici que je suis confronté à un nouveau probléme, avec l'autentification HTTP. En effet, j'ai ecrit le code suivant, mais quand j'ai commencé à tester, seul un des profils inscrits dans la base de données arrivait à s'identifier normalement, l'autre apparaissant comme "Identifiant non trouvé" alors que je sais qu'il se trouve dans la base de données! De plus, quand j'ai modifié le code pour vérifier si le probléme venait de la requête sql, il devait executer la requete SQL, retourner le resultat et l'afficher, et la ça marchait, tous les identifiants/mdp du tableau etaient affichés. Mais pour s'identifier, ça ne marche pas.

    Peut-être ça vient du code? Merci d'avance pour votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
        header("WWW-Authenticate: Basic realm=\"My Realm\"");
        header("HTTP/1.0 401 Unauthorized");
        echo "Identification annulée";
        exit;
      } else {
      if ($usernom == $_SERVER['PHP_AUTH_USER'] ) {          
          if($usermdp == $_SERVER['PHP_AUTH_PW'] )   {      
          echo "Hello"    ;
          echo $usernom      ;
      } else { 
             echo "Mot de passe incorrect" ;
      }
      }
        else {
            echo "Identifiant non trouvé"  ;
        }
      }
     
     
      $requete = "SELECT * FROM fba" ;
    $serveur = "mysql" ;
    $utilisateur = "user" ;
    $passe = "mdp" ;
    $base = "base" ;
    @MySQL_connect($serveur, $utilisateur, $passe) or die("Echec de connexion au serveur") ;
    @mysql_select_db($base) or die("Echec de sélection de la base") ;
     
    if($resultat = mysql_query($requete)) {      
    while($ligne = mysql_fetch_array($resultat)) {  
        $usernom = $ligne["nom"] ;
        $usermdp = $ligne["mdp"]  ;     
    }  
    } else {
        echo "Erreur de requête de la base de données." ;
        }
    ?>

  2. #2
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    J'avoue que je n'ai pas bien saisi comment tu pratiquais ton identification..

    Par contre je comprends encore moins ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if($resultat = mysql_query($requete)) {      
    while($ligne = mysql_fetch_array($resultat)) {  
        $usernom = $ligne["nom"] ;
        $usermdp = $ligne["mdp"]  ;     
    }
    Tu as un select * from ta table juste au dessus et tu parcours tous tes enregistrements pour les écraser à chaque tour de boucle, quel est l'intérêt ?
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  3. #3
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Un peu bizarre ce script.

    La première partie semble correcte mais je ne vois pas comment tu peux valider les users si la variable $usernom n'est pas renseigné

    Dans la deuxième partie, comme l'a dit guitou12, ce code ne fait pas grand chose d'utile car les users s'ecrasent les uns après les autres donc seul le dernier user se retouve dans les variables

    A mon avis tu ne nous a pas donné le script complet
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    Ben oui, justement, mon probléme c'est que je ne sais pas comment faire pour que les users ne s'ecrasent pas, et que n'importe quel user puisse être identifié, pas juste le dernier....

    Pour l'identification, c'est l'identification HTTP.

  5. #5
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Quand tu recup le nom de les infos de l'utilisateur via $_SERVER['PHP_AUTH_ , c'est a ce moment là que tu dois faire la requete en spécifiant la clause Where qui va bien ( user, mdp )

    Cela me parait plus logique
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    Ok, merci, j'ai fait les modifications nécessaires.
    J'ai donc remanié le script, voilà ce que ça donne maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
        header("WWW-Authenticate: Basic realm=\"My Realm\"");
        header("HTTP/1.0 401 Unauthorized");
        echo "Identification annulée";
        exit;
      } else {
      $SERVER['PHP_AUTH_USER'] = $usernom   ;
      $SERVER['PHP_AUT_PW'] = $usermdp  ;
      }
     
      $requete = "SELECT * FROM fba WHERE nom = ".$usernom ;
    $serveur = "sql" ;
    $utilisateur = "user" ;
    $passe = "pw" ;
    $base = "data" ;
    @MySQL_connect($serveur, $utilisateur, $passe) or die("Echec de connexion au serveur") ;
    @mysql_select_db($base) or die("Echec de sélection de la base") ;
     
    if($resultat = mysql_query($requete)) {      
    $ligne = mysql_fetch_array($resultat) ;
        $nom = $ligne["nom"] ;
        $mdp = $ligne["mdp"]  ;  
        if($nom != $usernom) {
        echo "Identifiant non trouvé"     ;
        exit ;   
        } elseif($mdp != $usermdp) {
            echo "Mot de passe incorrect"  ;
            exit ;
        } else {
            echo "Bienvenue, ".$nom."!" ;
            echo "Ton mot de passe est :".$mdp;
    } 
    } else {
        echo "Erreur de requête de la base de données." ;
        }
    ?>
    Y-a-t-il encore des erreurs?

    Merci pour votre aide!

  7. #7
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Citation Envoyé par Amallric
    Y-a-t-il encore des erreurs?
    Si cela fonctionne bien, c'est qu'il ne doit plus ya avoir d'erreur.

    Heureux d'avoir pu t'aider
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    Ben en fait, je viens de tester et ça retourne "erreur de la requete de la base de données".

    A mon avis, ça vient de la requete SQL. Il y a t'il une erreur dans sa synthaxe?

  9. #9
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    tu peux afficher la requete avec un echo et la tester dans phpmyadmin

    A première vu le nom est un champ de type charactère donc il doit falloir l'entourer avec des apostrophes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $requete = "SELECT * FROM fba WHERE nom = '".$usernom ."'" ;
    echo $requete;
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    Probléme résolu, merci!
    Par contre, pour l'inscription, comment faire pour empecher de choisir le même nom? Il-y-a t-il un moyen autre que rendre unique la ligne "nom" de la relation? J'ai essayé plusieurs moyens, à chaque fois ça ne marchait pas...

    Quelqu'un a des idées? (j'ai regardé les tutos sur les formulaires, mais ils ne me conviennent pas, ils utilisent une extension de PHO que je n'ai pas).

    Plus précisement, j'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    $quete = "SELECT * FROM fba WHERE nom = '".$nom."'" ;
     
    @MySQL_connect($serveur, $utilisateur, $passe) or die("Connexion au serveur échouée") ;    
    @mysql_select_db($base) or die("Erreur de sélection de base de données") ;
    $result = mysql_query($quete) ;
     
    if ($result != false) {
          exit("Cet identifiant est dejà utilisé. Priére d'en choisir un autre.")  ;
        } else {  
    $resultat = mysql_query($requete) or die("Erreur de requete de la base de données") ;            
    mysql_close($base) ;
    }
    Le probléme vient du "if($result != false)". Pensez-vous que cette methode est la bonne? Si oui, quelles modifications faut-il faire? Il me faut placer une condition pour que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "exit("Cet identifiant est dejà utilisé. Prière d'en choisir un autre")"
    ne s'affiche que si $nom(variable renseignée grâce à un formulaire) correspond à une entrée de la ligne "nom" de la relation.

    Merci d'avance!

  11. #11
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Si tu veux que le nom soit unique le meilleur moyen est de rendre unique la colone de la table.
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    ben oui mais alors on ne pourra pas savoir s'il y a eu une erreur de requete ou le nom est deja utilisé, non?

  13. #13
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    il y a tout ce qu'il faut dans les fonctions.

    mysql_errno() pour le numéro de l'erreur
    mysql_error() pour le texte de l'erreur

    Les codes d'erreur Mysql

    Tu pourrais aussi faire une requete avant l'insertion pour savoir si le nom est déja utilisé. C'est à toi de voir la solution que tu préfère
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    Tu pourrais aussi faire une requete avant l'insertion pour savoir si le nom est déja utilisé. C'est à toi de voir la solution que tu préfère
    Oui voilà, j'aimerais faire ça. Mais comment? J'ai essayé de coder une requête(voir message précedent pour le code), mais ça ne marche pas, et je ne comprends pas: si je mets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $quete = "SELECT * FROM fba WHERE nom = '".$nom."'" ; 
    $result = mysql_query($quete);
    et que si le nom $nom n'est pas présent dans la relation, quelle valeur est-elle assignée à la variable $result? False? NULL? Ou alors elle n'est pas renseignée du tout?

    Merci d'avance!

  15. #15
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par Amallric
    et que si le nom $nom n'est pas présent dans la relation, quelle valeur est-elle assignée à la variable $result? False? NULL? Ou alors elle n'est pas renseignée du tout?
    Fais le test tu verras par toi même
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    Mais comment? Je n'y arrive pas, sinon je n'aurais pas posé toute cette suite de questions!

  17. #17
    Membre expérimenté
    Avatar de guitou12
    Homme Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 077
    Points : 1 561
    Points
    1 561
    Par défaut
    Citation Envoyé par Amallric
    Mais comment? Je n'y arrive pas, sinon je n'aurais pas posé toute cette suite de questions!
    Tu écris 2 requêtes , une correcte qui va te ramener les infos associées à un pseudo et l'autre qui ne retournera rien car le pseudo sera inexistant.

    Ensuite tu fais un var_dump($resultatdetarequete) et tu verras bien ce que ça retourne
    Ex développeur Php / J2EE.
    Actuellement reconverti à SharePoint 2013

    Mon blog SP 2013

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    Je viens de tester cette methode et voilà ce que ça me donne:
    resource(3) of type (mysql result) resource(2) of type (mysql result)
    La premiere requete est bonne, la deuxiéme est mauvaise
    C'est normal, tt ça? Si oui, j'ai du mal à comprendre comment me servir de ces infos pour mon code....

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 79
    Points : 59
    Points
    59
    Par défaut
    Bon finallement ca y est, j'ai trouvé et ma page d'inscription marche enfin!

    Deja merci beaucoup pour votre soutien, grâce à vous aide j'ai non seulement resolu mes problémes mais aussi, et c'est encore plus important, j'ai appris à corriger tout seul les erreurs, et pour un autodidacte comme moi, c'est l'essentiel; donc encore une fois; merci!

    Par contre, j'ai encore une petite question: comment transferer des variables d'un fichier à un autre? Il y a la méthode de "form action =fichier.php" etc que j'ai utilisée pour mon formulaire. Mais peut-elle aussi transporter de simples variables? Ou il faut forcement des zones à renseigner? J'ai trouvé la fonction "require()", mais elle ne permet que de prendre un fichier complet, pas juste certaines variables. Y-a-til d'autres possibilités?

    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/07/2006, 14h52
  2. [Probleme] tri croissant - tableaux (débutant)
    Par tarnak dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 01/07/2006, 21h01
  3. [Tableaux] débutant : supprimer ligne tableau
    Par samplaid dans le forum Langage
    Réponses: 2
    Dernier message: 27/03/2006, 10h39
  4. [Tableaux] [Débutant ) Classes
    Par Halobox dans le forum Langage
    Réponses: 5
    Dernier message: 12/01/2006, 15h50
  5. Réponses: 4
    Dernier message: 11/10/2005, 14h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo