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 :

Test toujours OK


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Test toujours OK
    Bonsoir,
    Je voudrais savoir pourquoi ma boucle me renvoie toujours oui même si les mdp sont différents. Merci

    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
    if(isset($_POST['form_inscription'])) 
    {    
        $pseudo = htmlspecialchars($_POST['pseudo']);
        $email = htmlspecialchars($_POST['email']);
        $hmdp = password_hash($_POST["mdp"], PASSWORD_DEFAULT);
        $hmdp2 = password_hash($_POST["mdp2"], PASSWORD_DEFAULT);
     
        if(!empty($_POST['email']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']) AND !empty($_POST['email']))
        {
            if($hmdp == $hmdp2)
            {
                echo "oui" ;    
            }
            else 
            {
                echo "non";
            }
        }       
        else
        {
            $erreur= "Tous les champs doivent être complétés";
        }
    }
     
    ?>

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 253
    Points : 164
    Points
    164
    Par défaut
    Bonjour,

    Je pense d'abord que la condition "$hmdp == $hmdp2" ne retourne pas le bon résultat forcément, donc php évalue bien ces deux termes de la même façon tout en les interprétants si cela est nécessaire et cela dépend de plusieurs choses.
    Pour trouver la source du problème à mon avis il faut commencer par faire en sorte que php réalise cette évaluation le mieux possible :
    1/vérifier l'encodage charset des strings que tu récupères en général utf8, et que ton script php soit aussi en utf8
    2/convertis explicitement les mots de passe en string
    3/ change l'évaluation avec l'opérateur "===" en remplacement de "=="

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Italie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2020
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Je te remercie pour ta réponse, au final j'ai changé le code et ça fonctionne... Je suis débutant et je suis en plaine découverte.
    Je connais le utf8 pour HTML, ça existe un utf8 de php que je peux mettre au début de la page?

    Le nouveau code:
    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
    <?php
    //ON se connecte à la base de donneés
    try
    {
        $bdd = new PDO('mysql:host=localhost;dbname=andrea;charset=utf8', 'root', 'root');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
     
    if(isset($_POST['form_inscription'])) 
    {
        $pseudo = htmlspecialchars($_POST['pseudo']);
        $email = htmlspecialchars($_POST['email']);
        $email2 = htmlspecialchars($_POST['email2']);
        $mdp = htmlspecialchars($_POST['mdp']);
        $mdp2 = htmlspecialchars($_POST['mdp2']);
     
        if(!empty($_POST['pseudo']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']) AND !empty($_POST['email']) AND !empty($_POST['email2']))
        {
            if(isset($_POST['pseudo'],$_POST['mdp'],$_POST['mdp2'],$_POST['email'],$_POST['email2']))
            {
                //On controle si il n'y a pas deja d'autres membres avec le même pseudo    
     
                $requete = $bdd->prepare('SELECT pseudo FROM membres where pseudo = ?');
                $requete->execute(array($pseudo));
     
                if ($requete->fetch() == false)
                {
                    if(($mdp == $mdp2) AND ($email == $email2) AND preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email))
                    {
                        $req = $bdd->prepare("INSERT INTO membres(pseudo, mdp, email, date_inscription) VALUES(?, ?, ?, CURDATE())");
                        $req->execute(array($pseudo, $hmdp= password_hash($mdp, PASSWORD_DEFAULT), $email)); 
                        ?><p><?php $inscrit= 'Vous etes inscrits!';?></p>

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2014
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2014
    Messages : 253
    Points : 164
    Points
    164
    Par défaut
    Normalement ton script est en utf8. Ma remarque est très générale, je sais par expérience que lorsque une évaluation avec "==" ne marche pas là où ça devrait c'est souvent pour des raisons d'encodage, de typage des variables.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $pseudo = htmlspecialchars($_POST['pseudo']);
    $email = htmlspecialchars($_POST['email']);
    $email2 = htmlspecialchars($_POST['email2']);
    $mdp = htmlspecialchars($_POST['mdp']);
    $mdp2 = htmlspecialchars($_POST['mdp2']);
    N'utilise pas htmlspecialchars() avant de stocker les informations en base de données, ça n'a pas d'intérêt du point de vue sécurité pour ce qui est des injections SQL (pour ça il y a les requêtes préparées que tu utilises déjà). Cette fonction est conçue pour l'affichage en html donc réserve la plutôt pour ce moment là. (Au passage, à ce moment du code tu ne sais même pas si les items email, email2, mdp, mdp2 de $_POST sont définis.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(!empty($_POST['pseudo']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']) AND !empty($_POST['email']) AND !empty($_POST['email2']))
    {
        if(isset($_POST['pseudo'],$_POST['mdp'],$_POST['mdp2'],$_POST['email'],$_POST['email2']))
    La fonction empty() contrôle si une variable est vide mais aussi si la variable est définie, donc inutile de tester avec isset() par la suite si tu as testé avec empty() auparavant.

    Attention avec l'instruction AND (qu'on peut plus sobrement écrire en minuscule) qui n'est pas équivalente à &&. && est utilisé par défaut et and est à garder pour des cas particuliers. (Voir la page sur la précédence des opérateurs.)

    Par défaut utilise les comparaisons strictes if(($mdp === $mdp2) ..., ça t'oblige à te demander quels types tu manipules et ça t'éviteras de courir après des erreurs silencieuses.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email)
    Attention avec l'ancre de fin de chaîne $ car elle tolère une nouvelle ligne finale par défaut, autrement dit la chaîne "andrea.pesaro@monmail.com\n" passera alors qu'elle ne devrait pas. Pour être sûr que $ marque bien et uniquement la fin de la chaîne, il faut ajouter le modificateur D (Dollar End Only): preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#D", $email) ou bien troquer les ancres ^ et $ contre \A et \z (le z est en minuscule) qui elles ne réservent aucune mauvaise surprise.

    Mais de toute manière, pour tester la syntaxe d'une adresse email en PHP il y a filter_var($email, FILTER_VALIDATE_EMAIL). (Le test ultime reste d'envoyer un lien par email pour confirmation, car même si la syntaxe est bonne, rien ne prouve que l'adresse existe ou est accessible).

    Astuce: il est possible de faire l'insertion et le contrôle du pseudo en une seule requête:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO membres(pseudo, mdp, email, date_inscription)
    SELECT 'toto', 'zbliczbloc418', 'rene.goulard@abcd.fr', CURDATE()
    WHERE NOT EXISTS (
        SELECT 1
        FROM membres
        WHERE pseudo = 'toto'
    )
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. [batch] problème avec boucle for
    Par TanEk dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 22/04/2008, 14h41
  2. Problème avec boucle
    Par tahoser dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/01/2008, 09h59
  3. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  4. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26
  5. [Tableaux] Problème avec boucle
    Par MYster dans le forum Langage
    Réponses: 6
    Dernier message: 11/11/2005, 18h39

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