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 :

Verification doublon avant validation du formulaire


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut Verification doublon avant validation du formulaire
    Bonjour,
    Je début en BDD et je rencontre un soucis au sujet de la verification d'un doublon afin de valider un formulaire.
    Le formulaire comporte deux champs : "Nom" et "Prenom".
    Une fois le formulaire "Valider", il verifie que le "Nom" et Prenom" n'existe pas de facon binaire. Si les deux valeurs se retrouve à 1, il ne valide pas le formulaire :

    Donc quand je valide il se produit la chose suivante :

    ***Formulaire***
    Nom = Toto
    Prenom = Jean-Pierre
    ***Verification après validation***
    "Toto" existe-t-il dans la collone nom ? "NON" donc "0"
    "Jean-Pierre" existe-t-il dans la collone prenom ? "NON" donc "0"
    Je valide le formulaire


    ***Formulaire***
    Nom = Toto
    Prenom = Olivier
    ***Verification après validation***
    "Toto" existe-t-il dans la collone nom ? "OUI" donc "1"
    "Olivier" existe-t-il dans la collone prenom ? "NON" donc "0"
    Je valide le formulaire


    ***Formulaire***
    Nom = Dupuis
    Prenom = Jean-Pierre
    ***Verification après validation***
    "Dupuis" existe-t-il dans la collone nom ? "NON" donc "0"
    "Jean-Pierre" existe-t-il dans la collone prenom ? "OUI" donc "1"
    Je valide le formulaire

    Et le probleme est ICI :

    ***Formulaire***
    Nom = Dupuis
    Prenom = Olivier
    ***Verification après validation***
    "Dupuis" existe-t-il dans la collone nom ? "OUI" donc "1"
    "Olivier" existe-t-il dans la collone prenom ? "OUI" donc "1"
    Je valide le formulaire

    Effectivement, il existe bien un "Dupuis" et un "Olivier" dans la collone "Nom" et "Prenom" de la base de donnée mais le "Dupuis" correspond à "Dupuis Jean-Pierre" et "Olivier" à "Toto Olivier".

    Ma solution pour résoudre ceci est que si l'on obtient "1" pour le nom et "1" pour le prenom, c'est de verifier que l'ID du "Nom" et du "Prenom" ne soit pas identique. Dans le cas contraire, effectivement, il y a un doublon !

    J'espere avoir été claire...

    Voici un schema de la base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    |  idClient  |  nomClient  |  prenomClient  ||  Binaire Nom  |  Binaire Prenom|
    |_________|__________|_____________||____________|_____________|
    |      1      |    Toto      |   Jean-Pierre    ||           0       |         0          |
    |_________|__________|_____________||___________________________
    |      2       |   Toto       |    Olivier         ||          1       |            0        |
    |_________|__________|_____________||___________________________
    |      3       |   Dupuis    |   Jean-Pierre    ||          0       |             1      |
    |_________|__________|_____________||__________________________
    |     4        |     Dupuis   |    Olivier        ||          1            |          1     |
    |_________|__________|_____________||___________________________

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $vernom = "SELECT * FROM client WHERE nomClient='$nomClient'";
    $verprenom = "SELECT * FROM client WHERE prenomClient='$prenomClient'";
    $nom=mysql_query($vernom);
    $prenom=mysql_query($verprenom);
    if  ((mysql_num_rows($nom) != 0) && (mysql_num_rows($prenom) != 0))
         {
    echo "<H1>Attention, une fiche client existe deja avec le même nom et prenom.</H1>";
    }else{
    echo "<H1>Je rentre les informations dans la base."</H1>
    En attente d'un retour.

    Cordialement

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    fais un seule requête qui vérifie le nom et le prénom en même temps...

  3. #3
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Hello

    Je pense que tu dois implémenter cette sécurité à deux niveaux:
    - au niveau de la bdd en mettant une clé unique sur les deux champs concernés (attention, c'est le couple qui est unique)
    - au niveau de PHP avant de faire la requête, tu fais un rapide select de ces deux champs pour vérifier qu'ils n'existent pas

    Le comportement de ton script doit donc être:
    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
     
    function exist ($prenomClient, $nomClient) {
    	$query = "SELECT `nomClient`,`prenomClient` FROM `client` WHERE `nomClient`='$nomClient' AND `prenomClient`='$prenomClient'";
    	if ($results = mysql_query($query)) {
    		return mysql_num_rows($results);
    	}
    	else {
    		die('QUERY ERROR');
    	}
    }
     
    // EG
    if (!exist('Roland','Dupont'))
    {
      // Faire l'insert
    }
    Pour simplifier j'ai mis ça dans une fonction, adapte la en fonction de tes besoins.

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut
    Merci pour vos réponses.
    Pour la clé unique, j'ai un "idClient" qui s’incrémente automatiquement a chaque ajout dans la base. C'est ce que tu as voulu dire?

    Ensuite, je vais essayé ton code.


    Cordialement

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut
    Helas, je peux créer deux "Jean-Pierre", "Toto" et je n'ai pas d'erreur...
    Je creuse.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    commence par créer l'index unique pour les deux champs, mais n'oublie pas que les homonymes existes...

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Pour la clé unique, j'ai un "idClient" qui s’incrémente automatiquement a chaque ajout dans la base. C'est ce que tu as voulu dire?
    Non pas du tout. idClient c'est ta clé primaire.

    Fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE `client`ADD UNIQUE INDEX (`nomClient`,`prenomClient`);
    pour ajouter l'index unique sur le couple nom / prénom (attention aux homonymes comme l'a justement rappellé stealth35)

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 10
    Par défaut
    Problème résolu !!!

    En revanche, j'ai effectué la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `client`ADD UNIQUE INDEX (`nomClient`,`prenomClient`);
    Mais je ne connais pas du tout son utilité. Peux-tu m'expliquer simplement son utilité ?

    Merci encore.

  9. #9
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Cette commande SQL permet de mettre un index unique sur le couple nom/prénom de ta table client. Cela empêche les doublons au niveau des insertions: si on tente d'en insérer un, ça échoue et une erreur sera levée par mysql.

    ça ne te fera pas de mal de lire ça
    http://dev.mysql.com/doc/refman/5.0/...l-indexes.html

Discussions similaires

  1. [MySQL] calcul de deux champs avant validation du formulaire
    Par laure07 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/04/2011, 12h15
  2. [MySQL] Verification doublon avant creation enregistrement
    Par idamarco dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 07/02/2009, 17h08
  3. Obliger un visiteur de cliquer sur un liens avant validation du formulaire
    Par mathias59 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 04/12/2008, 11h45
  4. demander saisi avant validation formulaire en javascript
    Par calitom dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/10/2006, 15h33
  5. Réponses: 7
    Dernier message: 11/02/2006, 15h32

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