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 :

Eviter doublon lors enregistrement dans mysql


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Par défaut Eviter doublon lors enregistrement dans mysql
    Bonsoir,

    J'aimerai savoir s'il est possible d'interdire un enregistrement dans une base de données avec un retour message " ce nom et prénom sont déjà existants dans la base de données".

    Les contrôles se feraient sur le nom et le prénom (voire date de naissance).

    j'ai cherché sur les forums et souvent constaté qu'on proposait d'utiliser "UNIQUE" mais si je comprends bien je ne pourrai pas enregistrer deux personnes avec le même nom (homonyme).

    je pense que cela se fera en php pour interroger la bdd et avant de soumettre mon formulaire.

    Avez-vous des pistes ou codes sur lesquelles je peux orienter mes recherches.

    Merci d'avance

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    1- Tu peux faire une requête select pour voir s'il existe déjà en base et d'afficher le message d'erreur, sinon tu fais l'insert. Dans ce cas tu devras faire deux requêtes (vérification et insertion)
    2- Tu peux faire en une seule requête et selon le nombre de ligne inséré (1 ou 0), tu sauras si ça a existé déjà en base
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO personne (nom, prenom, date_naissance) 
    SELECT :nom, :prenom, :dateNaissance FROM DUAL
    WHERE NOT EXISTS (SELECT 1 FROM personne   WHERE nom=:nom AND prenom=:prenom and date_naissance=:dateNaissance)

    A+.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par bricoreur Voir le message
    ... d'interdire un enregistrement ... (si) nom et prénom sont déjà existants...
    ...
    ... je ne pourrai pas enregistrer deux personnes avec le même nom (homonyme)...
    C'est contradictoire !
    Tu veux l'interdire.... mais pouvoir quand même le faire !

    On ne peut pas empêcher 2 personnes d'avoir les même nom et prénom.
    On l'a vu aux J.O. avec Frédéric François ! (j'avais aussi un copain au collège qui s'appelait comme ça !)

    La date de naissance peut être un critère, mais à quoi bon ??

    Ce n'est pas pour rien qu'on utilise un champ id auto-incrementé (UNIQUE),
    ou un login * et mot de passe pour identifier un membre/client de façon certaine.

    * souvent, c'est l'email

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    J'ai lu une fois d'un parent qui ne pouvait inscrire ses deux jumeaux au centre de loisirs, car le programme utilisait nom de famille + date de naissance comme clé d'unicité

    En fait, l'homonymie peut être plus poussée. Une petite recherche internet m'a permis de trouver le témoignage d'une brave dame qui a une homonyme parfaite : nom, prénom, date ET lieu de naissance, et qui se déplace avec son acte de naissance et celui de son homonyme pour trouver qu'elle n'est pas l'autre

    Bref, on applique la Loi de Murphy : si ça peut arriver, ça arrivera.

    @jreaux : Cela dit, il peut avoir une raison valide de tester sans interdire. Par exemple, si il ya un identifiant généré de la forme <prénom.nom> et qu'il faut vérifier si il n'existe pas déjà, pour pouvoir créer <prénom.nom2> à la place.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Celira Voir le message
    @jreaux : Cela dit, il peut avoir une raison valide de tester sans interdire....
    Citation Envoyé par bricoreur Voir le message
    ...J'aimerai savoir s'il est possible d'interdire...

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2015
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2015
    Messages : 262
    Par défaut
    Bonjour,

    effectivement je veux pouvoir informer (alert ?) l'utilisateur qu'un même nom + prénom existent déjà dans la bdd.
    => il est possible qu'il y ait un homonyme + exceptionnellement un prénom commun

    en revanche, les probabilités qu'il y ait nom + prénom + date de naissance identiques dans une même région (et pratiquant le même sport) sont, avec tout le respect que j'ai pour M. Murphy, quasiment nul.
    => donc interdire la saisie

    Enfin, 100% des gagnants ont tenté leur chance au loto, la loi de Murphy est donc vérifée. Murphy trop fort


    Plus sérieusement, je vais continuer à comprendre comment faire, si vous avez un peu plus d'explications ?



    Code html : 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
     
     
    <body>
     
     
    <form action="f_saisie_post.php" method="POST">
     
    <p> NOM : <input type="text" name="nomF" id="nomF"></p>
    <p> PRENOM : <input type="text" name="prenomF" id="prenomF"></p>
    <p> DATE : <input type="date" name="dateN" id="dateN"></p>
     
    <p> <input type="submit" value="envoyer"></p>
     
    </form>
     
    </body>


    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
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?php
     
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    ?>
     
     
     
    <?php
     
    $nom = $_POST['nomF'];
    $prenom = $_POST['prenomF'];
    $date = $_POST['dateN'];
     
    $req = $bdd->prepare('INSERT INTO t_doublon(nomF, prenomF, dateN) VALUES (:nomF, :prenomF, :dateN)');
     
    $req->execute(array(
    'nomF' => $nom,
    'prenomF' => $prenom, 
    'dateN' => $date
    ));	
     
     
    ?>

    j'y retourne

  7. #7
    Invité
    Invité(e)
    Par défaut
    andry.aime t'a déjà montré une façon de faire.

    Peux-tu répondre à cette question :
    • une fois la personne inscrite, il se passe quoi ?

    Plus concrètement :
    • il a un compte perso ?
    • il peut se connecter à un espace privé via un login et mot de passe ?
    • ...

    ou RIEN de tout ça ? (il est juste enregistré en BDD, pour "mémoire")

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par bricoreur Voir le message
    les probabilités qu'il y ait nom + prénom + date de naissance identiques dans une même région (et pratiquant le même sport) sont, avec tout le respect que j'ai pour M. Murphy, quasiment nul.
    => donc interdire la saisie
    C'est sûr que si on parle des amateurs de course à cloche-pied nocturne dans le Cantal, c'est pas la même chose que si on parle du registre de la Banque de France.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Il te faut définir une contrainte d'unicité dans ta base.
    Tu procèdes ainsi dans ton PHPmyadmin.

    Créer un index sur 3 champs, puis sélectionner nom,prenom,naissance, puis mettre l'index à "unique" et le nommer "unicite". Et le tour est joué.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

Discussions similaires

  1. Formulaire ajout enregistrement dans MySQL
    Par dahu17 dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2008, 13h07
  2. Enregistrer dans Mysql multiples cases a cocher
    Par didiweby dans le forum Langage
    Réponses: 2
    Dernier message: 05/01/2008, 17h42
  3. Détection d'enregistrement dans MySQL
    Par fabou3377 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/11/2006, 18h33
  4. Réponses: 10
    Dernier message: 21/06/2006, 14h50
  5. [Efficacite/Redondance] Millions d'enregistrement dans MySQL
    Par nico33307 dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/07/2005, 21h21

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