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 :

Vérifier E-mail et identifiant


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 80
    Par défaut Vérifier E-mail et identifiant
    Bonjour à tous, je galère depuis quelques jours à trouver une solution

    Si j'envoi le formulaire, et que l'identifiant est déjà pris, il met une erreur, sinon il insert dans la BDD.

    Ce que je voudrais maintenant, c'est faire pareil pour l'e-mail, mais je sais pas comment m'y prendre pour le PHP...

    Pouvez vous m'aider ?

    Cordialement.


    (Voici mon code)

    HTML:
    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
    <div class="registerForm">
        <div class="containerInputLabelRegister">
                <label>Identifiant <span style="color: red;">*</span></label>
                <input type="text" name="identifiantRegister" id="identifiantRegister"/>
                <div class="errorRegister"></div>
                <div class="errorEmailRegister"></div>
            </div>
        </div>
        <div class="containerInputLabelRegister">
            <label>E-mail <span style="color: red;">*</span></label>
            <input type="email" name="emailRegister" id="emailRegister"/>
        </div>
     
        <div class="containerRegisterSubmit">
            <button id="submitRegister" class="submitRegister"><i class="fas fa-sign-in-alt"></i></button>
        </div>
    JQUERY:
    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
            $('#submitRegister').click(function(){
     
     
     
                var identifiantRegister = $("#identifiantRegister").val();
                var emailRegister = $("#emailRegister").val();
     
     
                    if(identifiantRegister == "" || emailRegister == "") {
     
                    } else {
     
                        $.ajax({
                            url: "register/checkIdentifiant.php",
                            method: "POST",
                            data: {identifiantRegister:identifiantRegister, emailRegister:emailRegister},
                            dataType: "text",
                            success:function(html) {
     
                                $(".errorRegister").html(html);
                            }
     
                        });
     
                    }
            });
    PHP:

    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
    <?php 
    $bdd = new PDO("mysql:host=127.0.0.1;dbname=login;charset=utf8", "root", "");
     
     
    if(isset($_POST["identifiantRegister"])) {
     
    	$identifiantRegister = $_POST["identifiantRegister"];
     
    	$sql = $bdd->query("SELECT * FROM users WHERE identifiant = '$identifiantRegister'");
    	$result = $sql->rowCount();
    	var_dump($result);
     
    	if($result == 1) {
    		echo "Username not available";
    	} else {
    		$sql = $bdd->prepare("INSERT INTO users (identifiant) VALUES ('$identifiantRegister')");
    		$sql->execute();
    		echo "<div style='color: green'>Insert success</div>";
    	}
     
    }
     
     
    ?>

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Salut,

    Ben tu as déjà fait la moitié du boulot, il te faut seulement quelques modifications afin de préparer correctement tes requêtes mysql.

    Au lieu de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql = $bdd->query("SELECT * FROM users WHERE identifiant = '$identifiantRegister'");//requête non préparée !
    tu mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = $bdd->prepare("SELECT * FROM users WHERE identifiant = ?");
    $sql->execute([$identifiantRegister ]);
    Maintenant si tu veux ajouter le champ email dans la requête, tu peux faire comme ceci :
    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
     
    if(isset($_POST["identifiantRegister"]) && isset($_POST["emailRegister"]) && !empty($_POST["identifiantRegister"]) && !empty($_POST["emailRegister"])) {//vérifier aussi que les valeurs ne sont pas vide avec !empty()
     
    	$identifiantRegister = $_POST["identifiantRegister"];
            $emailRegister=$_POST["emailRegister"];
     
    	$sql = $bdd->prepare("SELECT * FROM users WHERE identifiant = ? or email= ?"); /*avec "or", on vérifie si l'identifiant OU l'email existe dans chaque enregistrement de la table
                                                                                                           ,et  avec "and" s'ils existent les deux dans le même enregistrement*/
            $sql->execute(array($identifiantRegister ,$emailRegister));
    	$result = $sql->rowCount();
    	var_dump($result);
     
    	if($result == 1) {
    		echo "Username OU Email existe déjà";
    	} else {
    		$sql = $bdd->prepare("INSERT INTO users (identifiant,email) VALUES (?,?)");
    		$sql->execute(array($identifiantRegister ,$emailRegister));
    		echo "<div style='color: green'>Insert success</div>";
    	}
     
    }
    Comme il est possible aussi de vérifier la validité du format de l'email avec filter_var.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 80
    Par défaut
    Ah !!! merci beaucoup ! ça marche niquel... je vois ou sont mes erreurs maintenant ! si jamais j'ai d'autres questions je reviendrai vers toi..
    Pour le filter_var yes ça marche aussi, j'ai rajouté :

    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["identifiantRegister"]) && isset($_POST["emailRegister"]) && !empty($_POST["identifiantRegister"]) && !empty($_POST["emailRegister"])) {//vérifier aussi que les valeurs ne sont pas vide avec !empty()
     
    	if(filter_var($_POST["emailRegister"], FILTER_VALIDATE_EMAIL)) {
     
    	$identifiantRegister = htmlspecialchars($_POST["identifiantRegister"]);
        $emailRegister = htmlspecialchars($_POST["emailRegister"]);
     
    	$sql = $bdd->prepare("SELECT * FROM users WHERE identifiant = ? or email= ?"); 
    	/*avec "or", on vérifie si l'identifiant OU l'email existe dans chaque enregistrement de la table, et avec "and" s'ils existent les deux dans le même enregistrement*/
        $sql->execute(array($identifiantRegister,$emailRegister));
    	$result = $sql->rowCount();
     
    		if($result == 1) {
    			echo "L'identifiant ou l'e-mail existe déjà";
    		} else {
    			$sql = $bdd->prepare("INSERT INTO users (identifiant,email) VALUES (?,?)");
    			$sql->execute(array($identifiantRegister ,$emailRegister));
    			echo "<div style='color: green'>Votre compte à bien été créer</div>";
    		}
     
    	} else {
    		echo "L'email est invalide (format@email.fr)";
    	}
     
    }

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 80
    Par défaut
    Ah ben si j'ai une petite question...

    Sachant que j'aurai les champs : Identifiant, Email, Mot de passe, Confirmer le mot de passe.

    Est il possible de personnaliser le message pour chaque input ? genre pour l'identifiant, on met un message en dessous de l'input identifiant et pour l'email un message en dessous de l'input email, car là ça ne précise pas vraiment si c'est l'identifiant ou l'email qui existe déjà dans la BDD... et pour le mot de passe et confirmation du mot de passe, 1 seul message seulement en dessous de l'input confirmation.... tu comprends ce que je veux dire ?

    Par exemple pour l'email dans l'écho de if($result == 1) { si je met "test" et que je rajoute dans le success function(html) de mon jquery, et que je met ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                                if(html == "test") {
                                    $(".errorRegister").html("L'identifiant ou l'e-mail existe déjà");
                                }
    J'ai bien le message qui s'affiche, mais pour personnaliser l'email, et le pseudo séparement je vois pas trop comment... ou alors il faut faire un fetch au lieu du rowcount ?

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Oui, j'ai compris, tu voulais gérer les erreurs..

    Mais pour ça je te recommande d'utiliser "json", tu modifies dataType:"text" en dataType:"json" dans ajax, et dans le fichier php tu mets un seul echo json_encode($reponse); à la fin du fichier (pas d'autres echo) sachant que $reponse est un tableau dans lequel tu stockes toutes les données, y compris les erreurs.

    Exemple :
    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
     
    $reponse=array();//déclaration de la variable $reponse qui sera renvoyer par ce fichier
    $identifiantRegister = isset($_POST["identifiantRegister"])?htmlspecialchars($_POST["identifiantRegister"]):"";
    $emailRegister = isset($_POST["emailRegister"])?htmlspecialchars($_POST["emailRegister"]):"";
    $passwordRegister= isset($_POST["passwordRegister"]) ?htmlspecialchars($_POST["passwordRegister"]):"";
    $confirmPasswordRegister= isset($_POST["confirmPasswordRegister"])?htmlspecialchars($_POST["confirmPasswordRegister"]):"";
    if( !empty($identifiantRegister) && !empty($emailRegister) && !empty($passwordRegister) && !empty($confirmPasswordRegister)
          && filter_var($emailRegister, FILTER_VALIDATE_EMAIL) 
          && $passwordRegister==$confirmPasswordRegister ) {
                       $sql = $bdd->prepare("SELECT * FROM users WHERE identifiant = ?"); //on vérifie d'abord l'identifiant
                       $sql->execute(array($identifiantRegister));
    	           $result = $sql->rowCount();
                       if($result >0) {
    		          $reponse["erreur"]['identifiant_exist']="L'identifiant existe déjà";//on stocke l'erreur "identifiant_exist" dans l'item "erreur" de notre variable $reponse;
    	           }
                       $sql = $bdd->prepare("SELECT * FROM users WHERE email= ?"); //on vérifie maintenant l'email
                       $sql->execute(array($emailRegister ));
                       $result = $sql->rowCount();
                       if($result>0){
                                $reponse["erreur"]["email_exist"]="Cet email existe déjà";//stockage de l'erreur "email_exist"
                       } 
    }
    else {
        if(empty($identifiantRegister)) $reponse["erreur"]["identifiant_vide"]="Un identifiant ne peut pas être vide";
        if(empty($emailRegister)) $reponse["erreur"]["email_vide"]="Un email ne peut pas être vide";
        if(empty($passwordRegister)) $reponse["erreur"]["password_vide"]="Un mot de passe ne peut pas être vide";
        if($passwordRegister!=$confirmPasswordRegister) $reponse["erreur"]["password_non_identique"]="Le mot de passe et la confirmation ne sont pas les mêmes.";
        if(!filter_var($emailRegister, FILTER_VALIDATE_EMAIL)) $reponse["erreur"]["email_invalide"] ="L'email est invalide, format : (format@email.fr)";
    }
    if(!isset($reponse['erreur'])){//s'il n y a aucune erreur, on fais l'insertion et on stocke un message dans l'item "success" de $reponse.
       $sql = $bdd->prepare("INSERT INTO users (identifiant,email,password) VALUES (?,?,?)");
       $sql->execute(array($identifiantRegister ,$emailRegister ,$passwordRegister));
       $reponse["success"]="<div style='color: green'>Insertion avec succès</div>";
    }
    echo json_encode($reponse);// on renvoi la réponse en tant que "json"
    Puis tu mets un console.log dans le success d'ajax pour voir la réponse dans l'onglet console de l'outil de développement.
    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
     
    dataType: "json",
    success:function(data) {
         console.log("Data :"+JSON.stringify(data));
         //il ne te reste plus qu'à parcourir cette data avec $.each par exemple pour gérer tes erreurs.
        if(data.success){
            //traitement lors d'un succès...
        }
        else if(data.erreur){
            if(data.erreur.identifiant_exist){ 
                    //traitement à faire si l'identifiant existe, par exemple $(".erreur_identifiant").html(data.erreur.identifiant_exist);
            }
            if(data.erreur.email_exist){
                   //traitement à faire si l'email existe...
            }
            //...ainsi de suite avec les autres variables erreur....
         }
    }
    Je n'ai pas testé le code, mais je pense que ça devrait fonctionner.

    J'ai juste oublié un truc, c'est que le mot de passe doit être hacher (encoder) au moment de l'insertion avec password_hash() et vérifié au moment de la sélection avec password_verify()

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 80
    Par défaut
    Oui désolé j'ai trouvé entre temps... :-) mais je n'ai pas reçu de notification du site me donnant ta réponse!

    Encore une petite question, quand je me connecte, il me créer une $_SESSION, le problème c'est que mon formulaire LOGIN/REGISTER et en ajax/jquery.... du coup quand je réussi à me connecter, il m'ouvre une popup me disant que je suis bien connecté, et en principe me changer l'icone pour acceder au menu LOGIN/REGISTER en un autre icone pour le menu ou il va y avoir l'onglet LOGOUT...., mais le problème c'est que pour faire ce changement (et donc que la session soit bien active, il faudrait recharger la page après la connexion....hors moi je veux bien un formulaire en AJAX/JQUERY pour qu'il ne recharge pas la page après la connexion... c'est un peu contradictoire je sais... mais du coup après ma connexion, je n'ai pas accés à mon menu ou il y a le LOGOUT, sauf si je recharge la page.... et si je met un location.reload dans le success de mon jquery, il me recharge bien la page mais je n'ai pas le popup "vous avez bien été connecté..." y a t"il un moyen de lancer ma popup juste après un location.reload ou pas ?

    Revoila mon jquery pour que tu vois un peu (.mask c'est le popup qui me dit que je suis bien connecté quand on rentre dans le success):

    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
    40
    41
        $(document).ready(function() {
     
            $('#submitLogin').click(function(){
     
                var emailLogin = $("#emailLogin").val();
                var passLogin = $("#passLogin").val();
     
                    if(emailLogin == "" || passLogin == "") {
     
                    } else {
     
                        $.ajax({
                            url: "login/login.php",
                            method: "POST",
                            data: {emailLogin:emailLogin, passLogin:passLogin},
                            dataType: "text",
                            success:function(html) {
     
                                if(html == "islog") {
     
                                    $(".containerInputLabel :input").val("");
                                    $(".loginBox").toggle('scale');
                                    $(".mask").addClass("active");                    
     
                                    // location.reload("index.php");
     
     
     
     
     
                                }
                                if(html == "errorLog") {
                                    $(".errorLogin").html("<div style='color: red'>Identifiant ou mot de passe incorrect</div>");
                                }
     
                            }
     
                        });
     
                    }
            });

Discussions similaires

  1. vérifier si mail et pseudo existe deja dans bdd
    Par endelium dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 20/01/2012, 11h54
  2. Réponses: 9
    Dernier message: 16/04/2010, 20h56
  3. Vérifier si mail valide ’@.’ dans un formulaire
    Par Chansonnette dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/06/2006, 14h09
  4. [MySQL] Envoi identifiant d'une zone membre par mail
    Par vinche999 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/01/2006, 23h12
  5. Vérifier si mail valide
    Par simoryl dans le forum Web & réseau
    Réponses: 16
    Dernier message: 09/11/2004, 18h56

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