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

PHP & Base de données Discussion :

Formulaire de connexion qui ne se valide pas


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 19
    Par défaut Formulaire de connexion qui ne se valide pas
    Bonjour,

    Je viens de passer tout mon site de MySQL à PDO et c'est très satisfaisant, entre autre pour tout ce qui est gestion de l'utf8 !
    Je galère cependant depuis un moment sur le formulaire de connexion avec une connexion qui ne veut pas se faire.
    Le message d'erreur est "Le nom d'utilisateur ou le mot de passe est incorrect.".
    À la tentative de connexion, le var_dump() retourne "int(0)".
    Je ne maîtrise pas du tout la partie mot de passe et peut-être que ça vient de là...

    Code PHP : 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    <?php
    // Constantes de connexion à la BDD
    define("DBHOST", "localhost");
    define("DBUSER", "root");
    define("DBPASS", "");
    define("DBNAME", "...");
     
    // DSN de connexion (pour PDO)
    $dsn = "mysql:dbname=".DBNAME.";host=".DBHOST;
     
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
     
    // Connexion à la base de données
    try{
        // On instancie PDO
        $bdd = new PDO($dsn, DBUSER, DBPASS);
     
        // On s'assure que les données sont envoyées en UTF8
        $bdd->exec("SET NAMES utf8");
     
        // On définit le mode de "fetch" par défaut, ici on choisit le tableau associatif
        // (non obligatoire, évite de préciser lors de la récupération des données)
        $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
     
    }catch(PDOException $e){
        die($e->getMessage());
    }
     
    require('header.php');
     
    if(isset($_POST['formconnexion'])) {
        $userconnect = htmlspecialchars($_POST['user']);
        $pwdconnect = sha1($_POST['password']);
        if(!empty($userconnect) AND !empty($pwdconnect)) {
            $requser = $bdd->prepare("SELECT * FROM 0_users WHERE username = :user AND password = :pwd");
            $requser->execute(array(':user' => $userconnect, ':pwd' => $pwdconnect));
            $userexist = $requser->rowCount();
            var_dump($userexist);
            if($userexist == 1) {
                $userinfo = $requser->fetch();
                $_SESSION['username'] = $userinfo['username'];
                header("location: accounting.php");
            } else {
                $erreur = "Le nom d'utilisateur ou le mot de passe est incorrect.";
            }
        } else {
            $erreur = "Tous les champs doivent être complétés !";
        }
    }
    ?>
        <form class="box" action="" method="post" name="login">
            <h1 class="box-logo box-title"><img src="images/logo.png" alt=""></h1>
            <br>
            <input type="text" class="box-input" name="user" placeholder="Nom d'utilisateur">
            <input type="password" class="box-input" name="password" placeholder="Mot de passe">
            <input type="submit" value="Connexion " name="formconnexion" class="box-button">
           <?php if(!empty($message)){ ?>
               <p class="errorMessage"><?php echo $message; ?></p>
            <?php } ?>
        </form>
        <hr style="height:2px;border-width:0;color:gray;background-color:orangered">
    <?php
    require('footer.php');
    ?>

    Une idée ?
    Merci pour votre temps !

    Goo

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bonjour,

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $userconnect = htmlspecialchars($_POST['user']);

    On utilise htmlspecialchars seulement à l'affichage des données mais pas ici.

    Puis pour l'encodage en utf8, je ne suis pas sûr de l'utilisation de $bdd->exec("SET NAMES utf8");, essayez plutôt
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
    ou bien directement lors de l'instanciation du PDO :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $bdd = new PDO($dsn, DBUSER, DBPASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

    Ou bien encore, définir le charset dans le DSN :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $dsn = "mysql:dbname=".DBNAME.";host=".DBHOST.";charset=utf8mb4";

    Supprimez htmlspecialchars, effectuez les modifications que je vous ai suggéré et réessayez de vous connecter.

    Note : utf8mb4 est le JEU DE CARACTÈRES préféré pour UTF-8 car il inclut Emoji et certains caractères chinois qui manquaient dans utf8. Ce jeu de caractères est disponible à partir de MySQL version 5.5.3.

  3. #3
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 19
    Par défaut
    Merci Toufik83 pour toutes ces précisions intéressantes.

    Je viens de passer ma BDD en utf8mb4_unicode_ci.

    Par contre, après ajout de l'encodage dans vos 3 propositions (j'ai conservé la version DNS) et malgré la suppression de la fonction htmlspecialchars(), il n'y a aucun changement.

    J'ai également testé ma requête avec soit uniquement le membre, soit avec uniquement le mot de passe et le résultat reste inchangé.

    C'est dingue car toutes les autres requêtes fonctionnent sans soucis.

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bonjour,
    Citation Envoyé par 69gOO Voir le message
    J'ai également testé ma requête avec soit uniquement le membre, soit avec uniquement le mot de passe et le résultat reste inchangé.
    La requête n'a retourné aucune ligne ? bizarre

    Alors je viens de tester votre code en locale (après avoir remplacer la variable $message par $erreur) et l'authentification a fonctionné, que se soit avec des caractères spéciaux ou non, j'ai fais une petite recherche et j'ai trouvé qu'il ne faut pas utiliser sha1 pour crypter les mots de passes, voir l'avertissement sur la doc php.

    Ceci à fonctionné pour moi parce que probablement je suis sous la version 7.2.33 PHP.

    Quelle version PHP utilisez vous ?

    Avez-vous essayé avec une autre méthode de cryptage ?

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 19
    Par défaut
    Bonjour Toufik83 et merci pour vos tests, précisions et la correction de $erreur.

    Je tourne en local sous Wamp avec PHP 7.2.34.

    Jusqu'à présent je n'avais pas utilisé la prévisualisation. Grosse erreur car après la validation du formulaire, j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"code":"MethodNotAllowedError","message":"POST is not allowed"}
    D'après ce que j'ai pu lire, il s'agit d'une erreur 405. Il va falloir que j'investigue ce problème inconnu.

    Je continue les investigations dans le week-end.

Discussions similaires

  1. Formulaire qui ne se valide pas.
    Par kevin76110 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/07/2012, 10h44
  2. formulaire de connexion qui reste à gauche
    Par Dave Lopeur dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 13/04/2011, 10h22
  3. Formulaire de connexion qui ne connecte pas
    Par Lexion71 dans le forum Langage
    Réponses: 3
    Dernier message: 28/12/2007, 18h41
  4. Connexion qui ne se ferme pas
    Par ch0upette dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 10/09/2007, 15h50
  5. Connexion qui ne se ferme pas
    Par ch0upette dans le forum JDBC
    Réponses: 3
    Dernier message: 03/09/2007, 16h28

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