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 :

Champs identique + Fusion ID [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Points : 55
    Points
    55
    Par défaut Champs identique + Fusion ID
    BOnjour à tous,

    Dans le cadre de mon stage dans une compagnie d'assurance, je dois effectuer un petit travail dans une table, je m'explique:

    Pour mon test, j'ai créer un formulaire simple avec 3 champs [nom/prénom/email]
    en pdo....

    la consigne est la suivante: Lorsque une personne rentre un nom de famille, et un prenom identique à un nom et prénom existant, ce dernier doit recevoir le même ID....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Exemple :     Table: test
     
                     ID              Nom             Prenom            Email
     
                     1                toto             tata               aaa@aaa.com
                     2                mama           mimi               bbb@bbb.com
                     3                toto             tata               ccc@bbb.com
    Au vue de l'exemple ci-dessus je voudrais que l'ID 3 reçois le 1 car même nom et prenom que l'ID 1

    J'espère que j'ai été clair et que c'est compréhensible

    Merci de vos réponses


    COrdialement

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    si (comme c'est généralement le cas) ID est un champ "index auto-incrémenté", ce n'est pas possible, car il doit rester unique.

    1/ Une méthode permettant d'associer plusieurs email à un seul client :
    faire 2 tables : les 2 tables sont liées via le champ "id_client".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    table CLIENTS :
    id_client (int) auto-incrément,
    nom (varchar 150),
    prenom (varchar 150)
     
    table EMAILS :
    id_email (int) auto-incrément,
    id_client (int),
    email (varchar 150)
    2/ Sinon, avec une seule table : plusieurs champs "email1", "email2", "email3"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    table CLIENTS :
    id_client (int) auto-incrément,
    nom (varchar 150),
    prenom (varchar 150),
    email1 (varchar 150),
    email2 (varchar 150),
    email3 (varchar 150)
    3/ 3ème méthode, Lorsque une personne rentre un nom de famille, et un prenom identique à un nom et prénom existant :
    Vérifier si ce couple nom/prenom existe déjà en Bdd, et mettre un message d'alerte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Oups ! Ces nom et prénom sont déjà enregistrés !"

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Par définition, ton id doit être unique.

    De plus pourquoi deux personnes ayant le même nom serait rassemblées sous un même identifiant ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Points : 55
    Points
    55
    Par défaut
    En faite la vrai table de la base de données se nomme Utilisateur....

    un Utilisateur est un marin avec des dates d'entrée et de sorties
    et le seul problème c'est que ce marin peut être modifié ou bien affecter sur un autre bateau.

    Donc l'ID de ce dernier change alors qu'il ne faut pas car il est affecté à des assurances bien précise avec des ID propres.

    Et si le marin change d'ID il devra être réaffecter aux mêmes assurances donc doublons

  5. #5
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Points : 55
    Points
    55
    Par défaut
    Oui Jreaux c'est ça qui me tracassais, c'est que le champs ID est en Auto-Incrément, si je le désactive et que je le met en unique je ne sais pas ce que ça donnerai =s

  6. #6
    Invité
    Invité(e)
    Par défaut
    La bonne question est donc :
    - ID est-il le champ "index auto-incrémenté" de la table ?,
    - ou simplement un IDENTIFIANT du marin (comme un numéro de sécu, par exemple) ?
    [EDIT] Oups, Tu as répondu en même temps (cf ci-dessus).

  7. #7
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Points : 55
    Points
    55
    Par défaut
    Non Non c'est bien un champ INDEX AUTO INCREMENTE

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par corv0 Voir le message
    ... ce marin peut être modifié ou bien affecter sur un autre bateau.
    Donc l'ID de ce dernier change alors qu'il ne faut pas car il est affecté à des assurances bien précise avec des ID propres....
    On a ici une problématique de CONCEPTION des TABLES en BdD.

    1/ la table "utilisateur"
    LE MARIN : il est unique (!)
    -> l'ID est unique aussi,
    -> la table "utilisateur" ne doit contenir QUE des informations sur CE MARIN (noms, coordonnées, date de naissance, num de sécu,...)

    3/ une table "BATEAU"
    idem : que les infos sur CE BATEAU
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    table "BATEAU" :
    ID_bateau (auto-incrément => UNIQUE)
    nom_bateau
    ...
    3/ Pour ses AFFECTATIONS => MISE EN RELATION des marins et des bateaux :
    il faut créer une TABLE RELATIONNELLE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    table "AFFECTATIONS" :
    id_affectation (auto-incrément => UNIQUE)
    id_marin (ON PEUT AVOIR PLUSIEURS LIGNES AVEC CET id_marin !!)
    id_bateau (ON PEUT AVOIR PLUSIEURS LIGNES AVEC CET id_bateau !!)
    date_entree
    date_sortie
    - UN marin => PLUSIEURS affectations
    - UN bateau => PLUSIEURS affectations
    Dernière modification par Invité ; 25/07/2013 à 16h43.

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    On en revient à ce que te disais Jreaux : la même personne ne doit pas pouvoir s'inscrire deux fois.

    Ton problème est maintenant dans la gestion et non plus dans le developpement : tu ne peux pas différencier avec les seuls éléments que tu nous as présenté, un marin qui veut s'inscrire deux fois avec deux emails différents, de deux marins avec le même nom.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Points : 55
    Points
    55
    Par défaut
    La table Utilisateur contient justement tout ces champs....

    Pour t'aider je t'envoi un petit screen de la table utilisateur =)


    Nom : tab_uti.png
Affichages : 64
Taille : 12,5 Ko

    Nom : uti.png
Affichages : 48
Taille : 67,1 Ko

  11. #11
    Invité
    Invité(e)
    Par défaut
    On a bien compris cette table.

    Par contre, tu n'as pas compris la problématique (ou c'est nous ?!? )

    Sois plus précis dans l'énoncé des "VRAIES consignes".
    En évitant une "simplification extrême", qui ne fait qu'embrouiller.

    Normalement, s'il s'agit d'AFFECTER un MARIN à un BATEAU :
    1/ Formulaire :
    - on met un <select> (liste déroulante) avec les nom/prénom pour sélectionner LE marin
    - idem pour le bateau
    - puis les autres <input> relatifs à CETTE affectation en particulier (date d'entrée, de sortie,...).

    2/ Traitement :
    - On récupère les données du formulaire : [id_marin + id_bateau + infos...] => les IDS suffisent alors à IDENTIFIER de façon UNIQUE les marin/bateau.
    - On enregistre alors [ces infos + id_marin + id_bateau] dans la table que j'ai nommée : table "AFFECTATIONS"
    Dernière modification par Invité ; 25/07/2013 à 16h44.

  12. #12
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Points : 55
    Points
    55
    Par défaut
    Pour ça je suis exactement d'accord avec toi y'a aucun problème la dessus,

    On va dire le marin à un id= id_uti : 20
    Le problème est que lorsque un marin est sorti d'un bateau avec l'id 20,
    il est possible de le réactivé et de le rentrer sur un autre bateau qui à pour effet de lui affecter un autre ID:

    Ex id_uti : 20 est passer à id_uti:258

    Et ça on veux pas =/

    PS : Merci de prendre du temps pour me répondre

  13. #13
    Invité
    Invité(e)
    Par défaut
    Justement non :
    c'est l'intérêt de la table relationnelle "AFFECTATIONS".

    Pour UN seul et même marin (donc un ID_marin unique), on peut avoir plusieurs affectations

    L'ERREUR (ou la CONFUSION) que tu fais est de vouloir enregistrer la NOUVELLE AFFECTATION dans la table "utilisateur" !

    Relis ce que j'ai écrit ci-dessus.

  14. #14
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Points : 55
    Points
    55
    Par défaut
    Voilà il faut faire en sorte de ne pas toucher a l'ID du marin et lors d'une affectation mettre ceci dans la table "affectation ou juste les infos et l'id du bateau change

  15. #15
    Invité
    Invité(e)
    Par défaut
    C'est bien ça.

    Et certains champs de la table "utilisateur" doivent être supprimés et mis dans la table "affectation".
    Je pense par exemple à :
    - mission_start_date
    - mission_end_date

    Bref, il faut revoir la CONCEPTION DES TABLES, et leurs RELATIONS.

  16. #16
    Membre du Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2013
    Messages : 116
    Points : 55
    Points
    55
    Par défaut
    Merci Beaucoup Jérome =)

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

Discussions similaires

  1. [XL-2007] fusion deux feuille ont un champ identique
    Par abdelaaziz dans le forum Excel
    Réponses: 1
    Dernier message: 10/12/2012, 11h30
  2. [MySQL] deux champs identiques
    Par Shredder dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 26/06/2006, 13h22
  3. XSD : champs identiques
    Par grumff dans le forum Valider
    Réponses: 3
    Dernier message: 08/02/2006, 16h23
  4. Requete croisant deux champs identiques
    Par sabotage dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/08/2005, 11h59
  5. plusieurs champs identiques en ligne
    Par viviking dans le forum Langage SQL
    Réponses: 12
    Dernier message: 18/06/2004, 11h25

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