Problème boucle

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème boucle

Re: Problème boucle

par Cilum90 » 27 févr. 2021, 14:32

Attention à ta preg_match pour le mail, on peut proposer des mail comme ".@..[a-z]+"

pour éviter cela encadre le devant de l'adresse par "[a-z0-9]+[ta condition actuelle][a-z0-9]+@etc..."

J'ai créé une "petite" preg_match pour vérifier les mail en PHP: https://www.c2script.com/scripts/verifi ... hp-s2.html

Ou sinon tu as la fonction filter_var() avec un filtre email , personnellement je préfère savoir qu'est ce que je vérifie et comment.
Merci pour les infos! Je vais regarder 8-)

Re: Problème boucle

par two3d » 27 févr. 2021, 14:08

Attention à ta preg_match pour le mail, on peut proposer des mail comme ".@..[a-z]+"

pour éviter cela encadre le devant de l'adresse par "[a-z0-9]+[ta condition actuelle][a-z0-9]+@etc..."

J'ai créé une "petite" preg_match pour vérifier les mail en PHP: https://www.c2script.com/scripts/verifi ... hp-s2.html

Ou sinon tu as la fonction filter_var() avec un filtre email , personnellement je préfère savoir qu'est ce que je vérifie et comment.

Re: Problème boucle

par two3d » 27 févr. 2021, 14:06

La fonction empty() sert de isset() aussi, tu na pas besoin de faire une fois empty puis une fois isset (d'ailleurs la logique serait de le faire à l'inverse, d'abord isset puis savoir si il est vide) mais empty() peut être utilisé pour les deux: isset et empty

Cf:
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']))
{//inutile

Re: Problème boucle

par Cilum90 » 27 févr. 2021, 13:01

Salut, si je me souviens bien lorsque tu haches le mot de passe avec la fonction password_hash (qui est je pense une très bonne fonction de hachage qui utilise un algorithme de hachage fort et irréversible d'après la doc), tu dois utiliser la fonction password_verify pour vérifier le mot de passe lors du login en lui passant le mot de passe saisi par l'utilisateur avec le hash que tu as sauvegardé dans ta base de données. Tu ne peux justement pas comparer 2 hash générés avec cette fonction car elle va à chaque fois générer des hash différents pour une même chaine en entrée.
Salut, au final j'avais changé le code avec celui que je vais poster et maintenant ça fonctionne.
Juste après avoir contrôlé si les deux Mdp sont les mêmes, je l'ai haché au moment de l'enregistrer dans la base de données.

Code : Tout sélectionner

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 $reqpseudo = $bdd->prepare('SELECT pseudo FROM membres where pseudo = ?'); $reqpseudo->execute(array($pseudo)); $pseudoexist=$reqpseudo->rowCount(); if ($pseudoexist == 0) { //On controle si il n'y a pas deja d'autres membres avec le même email $reqmail = $bdd->prepare('SELECT * FROM membres WHERE email = ?'); $reqmail->execute(array($email)); $mailexist=$reqmail->rowCount(); if ($mailexist == 0) { 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><?php }
:)

Re: Problème boucle

par Saian » 26 févr. 2021, 18:38

Salut, si je me souviens bien lorsque tu haches le mot de passe avec la fonction password_hash (qui est je pense une très bonne fonction de hachage qui utilise un algorithme de hachage fort et irréversible d'après la doc), tu dois utiliser la fonction password_verify pour vérifier le mot de passe lors du login en lui passant le mot de passe saisi par l'utilisateur avec le hash que tu as sauvegardé dans ta base de données. Tu ne peux justement pas comparer 2 hash générés avec cette fonction car elle va à chaque fois générer des hash différents pour une même chaine en entrée.

Re: Problème boucle

par Cilum90 » 25 févr. 2021, 15:51

Fais un var_dump de $_POST["mdp"] et $_POST["mdp2"] pour savoir si ils sont réellement différents.

Je connais pas password_hash, peut être que ça renvoi la même chaine lors du traitement
Je te remercie pour ton message, j'ai enfin décidé de changer le code.
Bonne Journée

Re: Problème boucle

par two3d » 25 févr. 2021, 01:21

Fais un var_dump de $_POST["mdp"] et $_POST["mdp2"] pour savoir si ils sont réellement différents.

Je connais pas password_hash, peut être que ça renvoi la même chaine lors du traitement

Problème boucle

par Cilum90 » 24 févr. 2021, 23:35

Bonsoir,
Je voudrais savoir pourquoi ma boucle me renvoie toujours oui même si les mdp sont différents. Merci
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";
    }
}
 
?>