Impossible de vérifier si l'email existe déjà

Fermé
bouboualba Messages postés 1 Date d'inscription mercredi 5 septembre 2018 Statut Membre Dernière intervention 5 septembre 2018 - Modifié le 5 sept. 2018 à 21:07
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 5 sept. 2018 à 21:29
bonjour

je vien vers vous car je suis confronter a un petit souci
en effet j'essaye de verifier une adresse mail sa ne marche pas
la page se redirige quand meme et l'adresse s'ajoute quand meme
dans la base de donné
voici mon code:

<?php
$bdd=new PDO('mysql:host=localhost;dbname=test3','root','root');
if(isset($_POST['bouton']))
{
if(!empty($_POST['mail']) and !empty($_POST['mdp']) and !empty($_POST['mdp2']))

{

$mail=$_POST['mail'];
$mdp=$_POST['mdp'];
$mdp2=$_POST['mdp2'];




if(strlen($_POST['mail'])<=20)
{
$reqmail=$bdd->prepare("SELECT * FROM tables WHERE email = ?)");
$reqmail->execute(array($mail));
$mailexist=$reqmail->rowcount();
if($mailexist==0)
{


if($mdp==$mdp2)
{
$insertmbr=$bdd->prepare("INSERT INTO tables(email,mdp)VALUES(?,?)");
$insertmbr->execute(array($mail,$mdp));
header('location:verif.php');
}

else
{
echo"vos mot de passe ne correspondent pas";
}
}
else
{
echo"votre mail existe deja";
}

}
else
{
echo"votre email depasse les 20 caractere";
}

}
else
{
echo"veuillez remplir tous le formulaire";
}

}
?>
<form method="post" action="">
<input type="email" name="mail" placeholder="votre email" />
<br />
<input type="password" name="mdp" placeholder="votre mot de passe" />
<br />
<input type="password" name="mdp2" placeholder="confirmer mdp" />
<br />
<input type="submit" name="bouton" value="s'inscrire" />
</form>

il ne me sort pas d'erreur mais ne merche pas non plus
merci codialement

1 réponse

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
5 sept. 2018 à 21:29
Bonjour,

Plusieurs choses ne vont pas dans ton code.
Déjà.. il faut activer la gestion des erreurs PDO et de PHP
Ensuite, RowCount ne s'utilise pas (en pdo) sur une requête SELECT.

De plus, on place le code de connexion dans un fichier à part qu'on a juste à inclure dans les pages où on en a besoin.... au lieu de le réécrire (au risque de se tromper) dans chaque page.

Voici ton code corrigé

Fichier de connexion à la bdd :
<?php
//fichier cnxBdd.php
try{
  $bdd =new PDO('mysql:host=localhost;dbname=test3; charset=utf8', 'root', 'root');
  // Activation des erreurs PDO
  $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}
?>


Ton fichier :
<?php
//--------------------------------------------------------//
//Activation de l'affichage des erreurs PHP
//--------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//--------------------------------------------------------//
//connexion à la bdd et activation de la gestion des erreurs PDO
//--------------------------------------------------------//
require_once "cnxBdd.php";

//--------------------------------------------------------//
//récupération PROPRE des variables AVANT de les utiliser
//--------------------------------------------------------//
$mail = !empty($_POST['mail']) ? $_POST['mail'] : NULL;
$mdp = !empty($_POST['mdp']) ? $_POST['mdp'] : NULL;
$mdp2 = !empty($_POST['mdp2']) ? $_POST['mdp2'] : NULL;

if(isset($_POST['bouton'])){
  if($mail && $mdp && $mdp2){

    if(strlen($mail)<=20){
      try{
        $reqmail=$bdd->prepare("SELECT * FROM tables WHERE email = ?)");
        $reqmail->execute(array($mail));
        $result = $reqmail->fetchAll(); //on stocke le resultat dans un array
        $mailexist = !empty($result) ? true : false;
      }catch(Exception $e){
        // en cas d'erreur :
         echo " Erreur ! ".$e->getMessage();
      }
      if(!$mailexist) {
       if($mdp==$mdp2) {
          try{
            $insertmbr=$bdd->prepare("INSERT INTO tables(email,mdp)VALUES(?,?)");
            if( $insertmbr->execute(array($mail,$mdp))){
              header('location:verif.php');
              exit();
            }
          }catch(Exception $e){
            // en cas d'erreur :
             echo " Erreur ! ".$e->getMessage();          
          }
        } else {
          echo"vos mot de passe ne correspondent pas";
        }
      } else {
        echo"votre mail existe deja";
      }
    } else {
      echo"votre email depasse les 20 caractere";
    }

  } else {
    echo"veuillez remplir tous le formulaire";
  }
}

?>
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title>Utiliser des API</title>
</head>
<body>
  <form method="post" action="">
    <input type="email" name="mail" placeholder="votre email" value="<?php echo $mail;?>" />
    <br />
    <input type="password" name="mdp" placeholder="votre mot de passe" value="<?php echo $mdp;?>" />
    <br />
    <input type="password" name="mdp2" placeholder="confirmer mdp" value="<?php echo $mdp2;?>" />
    <br />
    <input type="submit" name="bouton" value="s'inscrire" />
  </form>
 </body>
 </html>


Je t'invite au passage à lire et à appliquer TOUT ce qui se trouve dans les liens suivants:
https://forums.commentcamarche.net/forum/affich-37584947-php-gestion-des-erreurs-debogage-et-ecriture-du-code
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Ainsi qu'une explication pour poster correctement ton code à l'avenir :
https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code


Pour finir... on ne stocke JAMAIS les password en clair dans la BDD.
On va les "hasher"....
Pour se faire, on va utiliser les fonctions de php : password_hash() et pour le vérifier : password_verify()
http://php.net/manual/fr/function.password-hash.php
https://www.php.net/manual/fr/function.password-verify.php

try{
  $password = password_hash($mdp, PASSWORD_DEFAULT);
  $insertmbr=$bdd->prepare("INSERT INTO tables(email,mdp)VALUES(?,?)");
  if( $insertmbr->execute(array($mail,$password))){
    header('location:verif.php');
    exit();
  }
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
}


et quand tu voudras vérifier si l'utilisateur peut se connecter un truc du genre :
$sql = "SELECT mdp 
        FROM tables 
        WHERE email = ?";
$datas = array($mail);
 
try{
  $prep = $bdd->prepare($sql);
  $prep->execute($datas);
  $result = $reqmail->fetch(); 
  
  $mdp_frombdd = !empty($result) ? $result['mdp'] : NULL;
  
  if(password_verify($mdp, $mdp_frombdd){
    echo "Password valide.";
  }
  
}catch(Exception $e){
  // en cas d'erreur :
   echo " Erreur ! ".$e->getMessage();
   echo " Les datas : " ;
  print_r($datas);
}


0