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 :

Requête d'insertion dans une table avec une clé étrangère [PDO]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Requête d'insertion dans une table avec une clé étrangère
    Bonjour à tous ! j'espère que vous allez bien ?

    Alors mon problème se présente de la manière suivante : petite précision,je travaille sur windows

    J'ai deux classes mère(Personne) et fille(Employer), du coup j'ai deux tables dans ma base mais la classe fille a des attributs en plus et la clé de la table Personne migre vers la table personne.

    En utilisant le mode de connexion PDO, j'essai de faire une insertion dans les deux tables, celle-ci se passe bien dans la table Personne mais pour la table Employer il y'a une erreur qui se produit qui la suivante :

    Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`rdv_medical`.`employer`, CONSTRAINT `employer_ibfk_1` FOREIGN KEY (`id_perso`) REFERENCES `personne` (`id_perso`)) in C:\xampp\htdocs\mesprojets\appRDVmedical\Model\EmployerManager.php on line 20
    Voici mes tables :

    table Personne
    Nom : table-personne.PNG
Affichages : 1894
Taille : 18,3 Ko
    table Employer
    Nom : Employer.PNG
Affichages : 1929
Taille : 20,5 Ko

    voici mes comment j'ai exécuté mes requêtes :

    add() Personne :

    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
    class PersonneManager {
     
        private $db; // Instance de PDO
     
        public function __construct($db)
        {
          $this->db = $db;
        }
     
        public function add(Personne $perso)
        {
            $q = $this->db->prepare('INSERT INTO personne(nom, prenom, genre) VALUES(:nom, :prenom, :genre)' );
     
            $q->bindValue(':nom', $perso->nom());
            $q->bindValue(':prenom', $perso->prenom());
            $q->bindValue(':genre', $perso->genre());
     
            $q->execute();
     
            $perso->hydrate([ 'id_perso' => $this->db->lastInsertId() ]);
        }
    add() Employer :

    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
    class EmployerManager {
     
        private $db; // Instance de PDO
     
        public function __construct($db)
        {
          $this->db = $db;
        }
     
        public function add(Employer $emp)
        {
            $q = $this->db->prepare('INSERT INTO employer(email, pass, types)  VALUES(:email, :pass, :types)');
     
            $q->bindValue(':email', $emp->email());
            $q->bindValue(':pass', $emp->pass());
            $q->bindValue(':types', $emp->types());
     
            $q->execute();
     
            $emp->hydrate([ 'id_emp' => $this->db->lastInsertId() ]);
        }

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 423
    Points : 4 897
    Points
    4 897
    Par défaut
    C'est normal, parce que tu n'as pas ajouté le champ id_perso et sa valeur correspondante dans la requête de la classe EmployerManager.

    Montre la partie du code dans laquelle tu instancies PersonneManager et EmployerManager.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    ça c'est le fichier où je récupère mes données provenant du formulaire.
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <?php
    require_once 'test.php';
    require_once '../Model/Personne.php';
    require_once '../Model/PersonneManager.php';
    require_once '../Model/Employer.php';
    require_once '../Model/EmployerManager.php';
    require_once '../Model/Medecin.php';
    require_once '../Model/MedecinManager.php';
     
    // session_start();
     
    try {
      $db = new PDO('mysql:host=localhost;dbname=rdv_medical', 'root', '');
      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    } catch (PDOException $e) {
      die('Erreur : ' . $e->getMessage());
    }
     
    $empManager = new EmployerManager($db);
    $persoManager = new PersonneManager($db);
    $medManager = new MedecinManager($db);
     
    if (isset($_POST['ajout'])) // Si on a voulu créer un personnage.
    {
     
     
      if ($_POST['types'] === "Medecin") {
     
        $med = new Medecin([
     
          'tel' => $_POST['tel'],
          'sp' => $_POST['types']
        ]);
     
      }else {
     
        $message = 'Le type du personnage est invalide.';
     
      }
     
      $perso = new Personne([
     
        'nom'    => $_POST['nom'],
        'prenom' => $_POST['prenom'],
        'genre'  => $_POST['genre']
      ]);
     
      $emp = new Employer([
     
        'email' => $_POST['email'],
        'pass'  => $_POST['pwd'],
        'types' => $_POST['types']      
      ]);
     
      $persoManager->add($perso);
      $empManager->add($emp);
      $medManager->add($med);
     
    }

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 423
    Points : 4 897
    Points
    4 897
    Par défaut
    Il te faut utiliser la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $perso->hydrate([ 'id_perso' => $this->db->lastInsertId() ]);
    qui est à la fin de add(Personne $perso), parce que hydrateinitialise les propriétés de la classe selon les valeurs existantes dans le tableau passé en paramètre.

    Le code doit ressembler à ça :
    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
     
     $perso = new Personne([
        'nom'    => $_POST['nom'],
        'prenom' => $_POST['prenom'],
        'genre'  => $_POST['genre']
      ]);
     
      $persoManager->add($perso);//ajoute Personne ici
     
      $lastIdPerso=$perso->getIdperso();//récupérer le dernier id inséré avec la méthode getIdperso() de la classe Personne !
     
      $emp = new Employer([
        "id_perso"=>$lastIdPerso,//donne la valeur du dernier id à id_perso de l'objet Employer 
        'email' => $_POST['email'],
        'pass'  => $_POST['pwd'],
        'types' => $_POST['types']      
      ]);
     
     
      $empManager->add($emp);
      $medManager->add($med);
    La deuxième solution consiste à utiliser une nouvelle méthode que tu dois ajouter dans PersonneManager :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public function getDb(){
         return $this->db;
    }
    Et après tu ajoutes la personne :
    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
     
    $perso = new Personne([
        'nom'    => $_POST['nom'],
        'prenom' => $_POST['prenom'],
        'genre'  => $_POST['genre']
      ]);
     
      $persoManager->add($perso);//ajoutes l'objet Personne ici.
     
      $emp = new Employer([
        "id_perso"=>$persoManager->getDb()->lastInsertId(),//donne la valeur du dernier id à id_perso de l'objet Employer 
        'email' => $_POST['email'],
        'pass'  => $_POST['pwd'],
        'types' => $_POST['types']      
      ]);
     
      $empManager->add($emp);
      $medManager->add($med);

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    J'ai une autre erreur toujours liée à l'hydratation dont j'ai passé toute la journée à déboguer mais sans succès du coup le mieux c'est de montre toutes mes classes :
    l'erreur :
    Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_perso' cannot be null in C:\xampp\htdocs\mesprojets\appRDVmedical\Model\EmployerManager.php on line 26

    Warning: PDOStatement::execute(): SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'id_emp' cannot be null in C:\xampp\htdocs\mesprojets\appRDVmedical\Model\MedecinManager.php on line 21
    table Personne :
    Nom : table-personne.PNG
Affichages : 1775
Taille : 15,6 Ko
    table Employer :
    Nom : Employer.PNG
Affichages : 1777
Taille : 19,4 Ko
    table Medecin :
    Nom : medecin.PNG
Affichages : 1765
Taille : 12,5 Ko
    classe Personne :
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    <?php
     
    class Personne {
     
        private $id_perso;
        private $nom;
        private $prenom;
        private $genre;
     
        public function __construct(array $donnees) {
     
            $this->hydrate($donnees);
        }
     
        public function hydrate(array $donnees) {
     
            foreach ($donnees as $key => $value)  {
     
                $method = 'set'.ucfirst($key);
     
                if (method_exists($this, $method)) {
     
                    $this->$method($value);
                }
            }
     
        }
     
        public function nomValide(){
     
            return !empty($this->nom);
        }
     
        // GETTERS //
     
        public function nom()  {
            return $this->nom;
        }
     
        public function prenom()
        {
            return $this->prenom;
        }
     
        public function genre()
        {
            return $this->genre;
        }
     
        public function id()
        {
            return $this->id_perso;
        }
     
        // SETTERS //
        public function setNom($nom)
        {
            $this->nom = $nom;
        }
     
        public function setPrenom($prenom)
        {
     
            $this->prenom = $prenom;
        }
     
        public function setGenre($genre)
        {
            $this->genre = $genre;
        }
     
        public function setId($id){
     
            $id = (int)$id;
            $this->id_perso = $id;
        }
    }
    classe PersonneManager
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    <?php
     
    class PersonneManager {
     
        private $db; // Instance de PDO
     
        public function __construct($db)
        {
          $this->db = $db;
        }
     
        public function db(){
     
            return $this->db;
        }
        public function add(Personne $perso) {
     
            $q = $this->db->prepare('INSERT INTO personne(nom, prenom, genre) VALUES(:nom, :prenom, :genre)' );
     
            $q->bindValue(':nom', $perso->nom());
            $q->bindValue(':prenom', $perso->prenom());
            $q->bindValue(':genre', $perso->genre());
     
            $q->execute();
     
        }
     
        public function count()
        {
            return $this->db->query('SELECT COUNT(*) FROM personne')->fetchColumn();
        }
     
        public function delete(Personne $perso)
        {
            $this->db->exec('DELETE FROM personne WHERE id_perso = ' . $perso->id_perso());
        }
     
        public function exists($info)
        {
            if (is_int($info)) // On veut voir si tel personne ayant pour id $info existe.
            {
                return (bool) $this->db->query('SELECT COUNT(*) FROM personne WHERE id_perso = ' . $info)->fetchColumn();
            }
     
            // Sinon, c'est qu'on veut vérifier que le nom existe ou pas.
     
            $q = $this->db->prepare('SELECT COUNT(*) FROM personne WHERE nom = :nom');
            $q->execute([':nom' => $info]);
     
            return (bool) $q->fetchColumn();
        }
     
    }
    classe Employer
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
    <?php
     
    class Employer extends Personne {
     
        private $id_emp;
        private $id_perso;
        private $email;
        private $pass;
        private $types;
     
        public function __construct(array $donnees){
     
            $this->hydrate($donnees);
     
        }
     
        public function hydrate(array $donnees) {
     
            foreach ($donnees as $key => $value)  {
     
                $method = 'set'.ucfirst($key);
     
                if (method_exists($this, $method)) {
     
                    $this->$method($value);
                }
            }
     
        }
     
        // GETTERS //
     
        public function idp(){
            return $this->id_perso;
        }
     
        public function ide(){
            return $this->id_emp;
        }
     
        public function email()  {
            return $this->email;
        }
     
        public function pass()
        {
            return $this->pass;
        }
     
        public function types()
        {
            return $this->types;
        }
     
        // SETTERS //
        public function setEmail($email)
        {
            $this->email = $email;
        }
     
        public function setPass($pass)
        {
     
            $this->pass = $pass;
        }
     
        public function setTypes($types)
        {
            $this->types = $types;
        }
     
        public function setIde($ide){
     
            $id = (int)$ide;
            $this->id_emp = $ide;
        }
     
        public function setIdp($idp){
     
            $id = (int)$idp;
            $this->id_perso = $idp;
        }
    }
    classe EmployerManager
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?php
     
    class EmployerManager {
     
        private $db; // Instance de PDO
     
        public function __construct($db)
        {
            $this->db = $db;
        }
     
        public function db(){
     
            return $this->db;
        }
     
        public function add(Employer $emp)
        {
            $q = $this->db->prepare('INSERT INTO employer(id_perso, email, pass, types)  VALUES(:id_perso, :email, :pass, :types)');
     
            $q->bindValue(':id_perso', $emp->idp());
            $q->bindValue(':email', $emp->email());
            $q->bindValue(':pass', $emp->pass());
            $q->bindValue(':types', $emp->types());
     
            $q->execute();
        }
     
        public function count()
        {
            return $this->db->query('SELECT COUNT(*) FROM employer')->fetchColumn();
        }
     
        public function delete(Employer $emp)
        {
            $this->db->exec('DELETE FROM employer WHERE id = '.$emp->id_emp());
        }
     
        public function exists($info)
        {
            if (is_int($info)) // On veut voir si tel employer ayant pour id $info existe.
            {
                return (bool) $this->db->query('SELECT COUNT(*) FROM employer WHERE id_emp = '.$info)->fetchColumn();
            }
     
            // Sinon, c'est qu'on veut vérifier que le nom existe ou pas.
     
            $q = $this->db->prepare('SELECT COUNT(*) FROM personne p, employer e  WHERE p. id_perso = e.id_perso AND p.nom = :nom');
            $q->execute([':nom' => $info]);
     
            return (bool) $q->fetchColumn();
        }
     
    }
    classe Medecin
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    <?php
     
    class Medecin extends Employer {
     
        private $id_emp;
        private $tel;
        private $sp;
     
        public function __construct(array $donnees){
     
            $this->hydrate($donnees);
        }
     
        public function hydrate(array $donnees) {
     
            foreach ($donnees as $key => $value)  {
     
                $method = 'set'.ucfirst($key);
     
                if (method_exists($this, $method)) {
     
                    $this->$method($value);
                }
            }
     
        }
     
        // GETTERS //
        public function tel(){
     
            return  $this->tel;
        }
     
        public function sp(){
     
            return $this->sp;
        }
     
        public function id(){
     
            return $this->id_emp;
        }
     
        // SETTERS //
        public function setTel($tel){
     
            $this->tel = $tel;
        }
     
        public function setSP($sp){
     
            $this->sp = $sp;
        }
     
        public function setId($id){
     
            $id = (int)$id;
            $this->id = $id;
        }
    }
    classe MedecinManager
    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
     
    <?php
     
    class MedecinManager {
     
        private $db; // Instance de PDO
     
        public function __construct($db)
        {
          $this->db = $db;
        }
     
        public function add(Medecin $med)
        {
     
          $q = $this->db->prepare('INSERT INTO medecin(id_emp, tel, sp) VALUES(:id_emp, :tel, :sp)');
     
          $q->bindValue(':id_emp', $med->id());
          $q->bindValue(':tel', $med->tel());
          $q->bindValue(':sp', $med->sp());
     
          $q->execute();
     
        }
     
        public function count()
        {
            return $this->db->query('SELECT COUNT(*) FROM medecin')->fetchColumn();
        }
     
        public function delete(Medecin $med)
        {
          $this->db->exec('DELETE FROM medecin WHERE id_emp = '.$med->id_perso());
        }
     
    }

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Toufik ! Merci pour ta solution.

    Mais je ne sais pas où est ce que je commets une erreur.

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 423
    Points : 4 897
    Points
    4 897
    Par défaut
    Salut,

    Tout d'abord regarde ce qui est écrit dans la méthode hydrate de Employer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ...
    $method = 'set'.ucfirst($key);
    ...
    Cette méthode prend les noms des clés du tableau associatif passé en paramètre puis elle met la première lettre en majuscule de chaque clé pour chercher sa méthode correspondante, donc quand tu instancies l'objet Employer avec le tableau associatif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $emp = new Employer([
        "id_perso"=>$persoManager->db()->lastInsertId(),
        'email' => $_POST['email'],
        'pass'  => $_POST['pwd'],
        'types' => $_POST['types']      
     ]);
    La méthode hydrate() cherchera les fonctions suivantes : setId_perso(),setEmail(),setPass(),setTypes(), les 3 dernières méthodes c'est OK, par contre celle de "id_perso" si on met la première lettre en majuscule ça devient setId_perso() alors que cette méthode n'existe pas dans la classe Employer, c'est plutôt setIdp() qui existe et c'est pour ça que tu es obliger de respecter l'orthographe des clés du tableau associatif.

    Pour corriger ça, remplace "id_perso"=>... par "idp"=>...

    Puis après l'ajout des objets doit être d'une façon imbriquée :
    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
     
    $perso = new Personne([
        'nom'    => $_POST['nom'],
        'prenom' => $_POST['prenom'],
        'genre'  => $_POST['genre']
      ]);
      $persoManager->add($perso);//on ajoute la personne
      $idLastPerso=$persoManager->db()->lastInsertId();
      if($idLastPerso>0){//On insert l'objet Employer si et seulement si y'a bien eu une insertion d'un objet Personne.
            $emp = new Employer([
                      "idp"=>$idLastPerso,//donne la valeur du dernier id à id_perso de l'objet Employer 
                      'email' => $_POST['email'],
                      'pass'  => $_POST['pwd'],
                      'types' => $_POST['types']      
             ]);
             $empManager->add($emp);//ajout de l'objet employer
             $lastIdEmp=$empManager->db()->lastInsertId();//ne pas oublier d'ajouter la méthode db() en public dans la classe EmployerManager
             if($lastIdEmp>0){//On insert l'objet Médecin si et seulement si y'a bien eu une insertion d'un objet Employer.
                     $med = new Medecin([
                             'id'=>$lastIdEmp,//ici c'est "id" tel qu'il l'est, voir la méthode setter setId() de la classe Medecin
                             'tel' => $_POST['tel'],
                             'sp' => $_POST['types']
                     ]);
                     $medManager->add($med);
             } 
      }

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Désolé les gars si je l'ai pas fais plus mais ça va j'ai réglé mon problème. Particulièrement à toi Toufik, Merci !

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 423
    Points : 4 897
    Points
    4 897
    Par défaut
    as-tu résolu le sujet en suivant ce que je t'ai montré ou bien autrement ?

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Oui justement, en suivant ce que tu m'as montré.

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 423
    Points : 4 897
    Points
    4 897
    Par défaut
    D'accord si c'est le cas, tu peux donc cliquer sur le bouton en bas de page.

    Juste une remarque concernant la première méthode dans ton premier message, je pense qu'elle est beaucoup mieux que la deuxième méthode, parce que tu n'es plus obliger d'ajouter les fonctions db() dans les managers.

    Je ne l'ai pas testé, mais ça me parait correcte aussi.

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2018
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    OK pour le bouton mais j'ai du mal à le retrouvé mais je penses que c'est déjà puisque devant le sujet c'est marqué


    Pour la méthode, OK, je ramènerai la fonction lastInsertId() dans la classe manager.

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

Discussions similaires

  1. [MySQL] Requête d'insertion dans une table
    Par Qadeer dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 23/07/2015, 13h02
  2. [MySQL] insertion dans deux tables avec une clé étrangère
    Par reseau.reseau dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 23/03/2014, 13h04
  3. Requête d'insertion dans une base de données
    Par Kalion dans le forum VB.NET
    Réponses: 5
    Dernier message: 25/02/2009, 13h45
  4. [SQL] Problème de requête d'insertion dans une base SAGE
    Par Swapyyy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 04/07/2008, 10h14
  5. Requête d'insertion dans une base ACCESS
    Par kurul1 dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/11/2006, 17h41

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