inserer l'id d'un user dans une autre table comme foreign key

Default
,

Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

je chercher à inserer l'id d'un utilisateur dans une autre table, où il sera foreign key avec une requête sql .
plus bas , je colle la classe dans laquelle je fait ma requête .
j'ai essayé de recupérer l'îd de la personne avec la session et l'inserer ensuite en base de données. mais j'arrive pas du tout . deux jours que je cherche la solution . merci de votre reponse .

class DeclarationModel {

        private $iddeclareEnfantFamille;
        private $last_name_par_enfant ;
        private $first_name_par_enfant;
        private $date_naissance_par_enfant;
        private $sexeEnfant;
        private $medecin_traitant_par;
        private $scolariseEnfantPar;
        private $commentaire;
        private $date_inserted;
        private $idfamily;


        // Constante attachée à ma classe
        const TABLE_NAME = 'declareEnfantFamille';

        /* méthode qui vérifie si l'id existe ou non et utilise la méthode appropriée
          Permet de gérer la sauvegarde en BDD et elle va détecter si elle insère ou met à jour
        */

        public function save(){
          if ($this->iddeclareEnfantFamille > 0) {
            $retour = $this->update();
            return $retour;
          }
          else{
            $retour = $this->insert();
            return $retour;
          }
        }

        private function insert() {
          $sql = "
            INSERT INTO ".self::TABLE_NAME." (last_name_par_enfant, first_name_par_enfant, date_naissance_par_enfant, sexeEnfant, medecin_traitant_par, scolariseEnfantPar, commentaire, date_inserted, idfamily)
            VALUES (
              :last_name_par_enfant,
              :first_name_par_enfant,
              :date_naissance_par_enfant,
              :sexeEnfant,
              :medecin_traitant_par,
              :scolariseEnfantPar,
              :commentaire,
              NOW(),
              :idfamily

              )
          ";

          // Je prépare ma requête
          $pdoStatement = Database::getPDO()->prepare($sql);

          // je fais mes binds
          $pdoStatement->bindValue(':last_name_par_enfant', $this->last_name_par_enfant, PDO::PARAM_STR);
          $pdoStatement->bindValue(':first_name_par_enfant', $this->first_name_par_enfant, PDO::PARAM_STR);
          $pdoStatement->bindValue(':date_naissance_par_enfant', $this->date_naissance_par_enfant, PDO::PARAM_STR);
          $pdoStatement->bindValue(':sexeEnfant', $this->sexeEnfant, PDO::PARAM_STR);
          $pdoStatement->bindValue(':medecin_traitant_par', $this->medecin_traitant_par, PDO::PARAM_STR);

          $pdoStatement->bindValue(':scolariseEnfantPar', $this->scolariseEnfantPar, PDO::PARAM_STR);
          $pdoStatement->bindValue(':commentaire', $this->commentaire, PDO::PARAM_STR);
          $pdoStatement->bindValue(':idfamily', $this->idfamily, PDO::PARAM_INT);


          // Exécution de la requête avec execute car il n' y a aucun retour hormis le nombre de ligne insérées
          $affectedRows = $pdoStatement->execute();


          return $affectedRows;

        }

Ce que je veux

Ce que j'obtiens

j'ai une erreur comme quoi $idfamily est vide dans la table

3 Réponse

Default
,

Bonjour,

Comme ça le code me paraît correct mais ton problème se situe au niveau de la valeur d'une variable et dans le code que tu donnes on n'a rien concernant la récupération de cette valeur justement.
Si tu fait afficher les valeurs enregistrées dans la session, tu as bien l'ID que tu souhaites?

43736
,

A priori, si tout le code est là, $idfamily est effectivement instancié nulle part.
Il est bien défini en private mais ça s'arrête là. Ensuite, tu l'utilises dans ta requête mais sans qu'il ait de valeur définie au préalable.
Il en va de même pour toutes les autres variables de ta requête ceci-dit.

Donc il manque du code pour que l'on puisse t'aider...

Default
,

Merci pour les réponses . j'ai finalement fini par utiliser les sessions et ça marche super bien . thanks guys