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 :

INSERT INTO avec JOINTURE avec un formulaire [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut INSERT INTO avec JOINTURE avec un formulaire
    Bonjour à tous,

    Voila je veux insérer des données dans ma BDD grace à un formulaire le problème c'est que j'ai mit des clés étrangères pour que la table "Probleme" regroupe plusieurs table de différentes catégories, par exemple "Salle"

    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
     
    CREATE TABLE `Probleme` (
      `idProb` int(11) NOT NULL,
      `idSalle` int(11) NOT NULL,
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
     
    ALTER TABLE `Probleme`
      ADD PRIMARY KEY (`idProb`),
      ADD KEY `FK_salleProb` (`idSalle`),
     
    ALTER TABLE `Probleme`
      MODIFY `idProb` int(11) NOT NULL AUTO_INCREMENT;
     
     
     
     
    CREATE TABLE `Salle` (
      `idSalle` int(11) NOT NULL,
      `numSalle` int(11) NOT NULL,
      `lettreBatimentSalle` varchar(50) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
     
    ALTER TABLE `Salle`
      ADD PRIMARY KEY (`idSalle`);
     
     
    ALTER TABLE `Salle`
      MODIFY `idSalle` int(11) NOT NULL AUTO_INCREMENT;
     
     
    ALTER TABLE `Salle`
      ADD CONSTRAINT `FK_salleProb1` FOREIGN KEY (`idSalle`) REFERENCES `declarationProbleme` (`idSalle`);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     $bdd  = include 'conne.php';
     
        $sql = 'INSERT INTO Salle(numSalle,lettreBatimentSalle)
                SELECT :numSalle, :lettre
                FROM Probleme AS dP
                INNER JOIN Salle AS sP ON dP.idSalle = sP.idSalle';
     
    //la ligne qui lance la requête préparée
        $stmt = $bdd->prepare($sql);
        $stmt->execute(array(
            ':numSalle' => $numSalle,
            ':lettre' => $lettre,
        ));
    Je pense que cela vient de mon code avec la requête mais je ne suis pas sur

    N'hésiter pas à me demander plus d'information
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  2. #2
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Je confirme, ta requête est bizarre Tu essayes d'insérer quoi dans quelle table exactement ?
    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]

  3. #3
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    J'essais de rentrer un nombre et des données dans un select qui seront inséré dans la table "salle" et donc l'idSalle dans la table "Probleme" viendra chercher les données.

    En gros pour ce mettre dans le contexte j'ai un formulaire qui ce suit sur plusieurs page et pour chaque page du formulaire je le fait correspondre à une table pour bien organiser les choses et donc tous ça je voudrais appeler qu'une seule table (Probleme) pour afficher ça dans un tableau
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Si tu veux insérer dans Salle, il faut insérer dans Salle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sql = 'INSERT INTO Salle(numSalle,lettreBatimentSalle) values (:numSalle, :lettre)';
     
    //la ligne qui lance la requête préparée
        $stmt = $bdd->prepare($sql);
        $stmt->execute(array(
            ':numSalle' => $numSalle,
            ':lettre' => $lettre,
        ));
    A moins que tu ne veuilles vérifier que les données existent dans la table Problème d'abord ?
    Au passage, tu es sûr du sens de tes contraintes ? Est-ce qu'une salle peut appartenir à plusieurs problèmes ? ou est-ce qu'une salle est créé pour chaque problème ?
    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
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Enfaite j'arrive deja à insérer les données de la salles. ce que je voudrais faire c'est regrouper la table "salle" et d'autre table du même type dans la table problème (la même salle peut être dans plusieurs problème) donc la table problème j'aimerais que par exemple elle a un id = 1 et que idSalle( dans la table problème) appelle toutes les données dans la table salle donc j'ai mis des clés étrangère
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  6. #6
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bon, donc tu veux c'est une clé étrangère sur Problème qui pointe vers Salle et non le contraire.
    Donc pour faire l'insertion dans Probleme, tu vas chercher l'id de la Salle cible et tu l'insères dans Probleme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO Probleme (idSalle)
    SELECT idSalle
    FROM Salle 
    WHERE numSalle = :numSalle AND lettreBatimentSalle = :lettre
    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]

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par IamKanagawa Voir le message
    ...Je sais pas si tu m'as compris ?...
    Non.
    On ne vis pas dans ta tête.


    @Celira
    A partir du moment où on doit "bidouiller" une requête, c'est qu'il y a un souci au niveau de la récupération des données du formulaire, non ?...

    Pourquoi récupérer "numSalle" et "lettre", alors qu'on pourrait récupérer "idSalle" directement depuis le formulaire ?

  8. #8
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Non.
    On ne vis pas dans ta tête.
    C'est vrai que je n'ai pas trop réussi à bien formuler mon problème

    J'ai testé ton code @Celira les données ne s'insèrent pas dans ma BDD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ADD CONSTRAINT `FK_salleProb` FOREIGN KEY (`idSalle`) REFERENCES `salle` (`idSalle`),
    J'ai bien fait ce que tu m'as demandé ?
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  9. #9
    Invité
    Invité(e)
    Par défaut
    Explique-nous déjà pourquoi tu connais "numSalle" et "lettre", et pas "idSalle" ?

  10. #10
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Je connais "numSalle" et "lettre" car je l'ai saisi dans une page du formulaire et le "idSalle" et en auto increment
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  11. #11
    Invité
    Invité(e)
    Par défaut
    OK...

    1- tu fais l'INSERT comme indiqué par Celira.

    2- Pour récupérer l'd_salle généré :
    Voir PDO - lastInsertId;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $salle_id = $bdd->lastInsertId();

  12. #12
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Je suis bien d'accord avec toi mais ça servirait a quoi ?

    Je ne comprends pas trop l'utilité de récupérer salle_id

    désolé je ne suis pas assez expérimenté
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  13. #13
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Tu as besoin de idSalle pour faire l'insertion dans Probleme. Si tu insères dans Salle juste avant d'insérer dans Probleme, tu peux récupérer l'id par lastInsertId.
    Si tu utilises une salle existante et que tu n'as que les informations de la salle (par exemple, si tu pars d'un formulaire de recherche), soit tu fais une requête qui fait une jointure du style de celle que j'ai indiqué, soit tu fais deux requêtes : une pour récupérer l'id de la salle à partir des infos dont tu disposes, puis une 2e pour faire l'insertion en utilisant la valeur récupérée.
    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]

  14. #14
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    D'accord d'accord donc j'ai écris votre code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $sql = 'INSERT INTO salle(numSalle,lettreBatimentSalle) values (:numSalle, :lettre)';
     
    //la ligne qui lance la requête préparée
        $stmt = $bdd->prepare($sql);
        $stmt->execute(array(
            ':numSalle' => $numSalle,
            ':lettre' => $lettre,
        ));
     
        $salle_id = $bdd->lastInsertId();
    mais la ligne de @jreaux62 j'ai pas trop compris

    j'ai compris qu'on doit avoir "l'idSalle" de la table "salle" pour l'insérer dans la table "Probleme" mais je vois pas quoi faire avec ça dans mon code l'insertion se fait bien dans la table "salle" mais pas dans la table problème
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par IamKanagawa Voir le message
    ...mais pas dans la table problème
    Normal : maintenant que tu connais l'id_salle, il faut écrire la requête !


    BON.
    A mon avis, tu es en train de BIDOUILLER, sans vraiment savoir ce que tu fais.
    Nous non plus.

    Reprends depuis le début :
    • EXPLIQUE CLAIREMENT, depuis le début, ce que tu essaie de faire.
    • MONTRE le formulaire (avec des explications)

  16. #16
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Ce que j'essais de faire c'est d'insérer des données dans ma base de données grâce à un formulaire qui à plusieurs pages

    Pour cela j'aimerais insérer les données d'une page dans une table qui lui appartient et distincte par exemple: "page 1 du formulaire" => table "type" ; "page 2 du formulaire" => table "salle"

    Puis à la fin du formulaire les données seront inséré dans les différentes tables "type","salle" et leurs ID seront inséré dans la table "Problème" qui regroupera toutes les tables qui seront en rapport avec le formulaire. Ce qui permettra de n'avoir qu'une seule table pour tout le formulaire.
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  17. #17
    Invité
    Invité(e)
    Par défaut
    Je pense que tu te compliqués la vie.

    Puisque tu enregistres les données dans des variables de $_SESSION, alors on ne fais l'enregistrement en bdd qu'à la toute fin, après clic sur le bouton "enregistrer" du formulaire.

  18. #18
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Je pense que tu te compliqués la vie.
    J'ai tendance

    oui c'est ce que je fais deja non ? car toutes mes données seront envoyé a la fin de la 3 ème étape

    mais enfaite ce que je veux faire avec la BDD n'est pas possible ?
    peut etre avec une autre méthode

    quelle est le moyen le plus simple de faire en sorte pour que j'appelle le moins de table, enfaite mon but c'est d'enregistrer tous ça sous une même table car toutes les données correspondes à un "problème" que je devrais traité individuellement

    PS: Je viens d'apprendre le fonctionnement de $Session donc je connais pas encore tous ses secrets
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

  19. #19
    Invité
    Invité(e)
    Par défaut
    Si, mais il faut mettre de l'ordre dans tes idées.

    Il faut bien réfléchir, pour faire une conception correcte des tables (nécessaires et suffisantes).

    Prends un papier et un crayon.

  20. #20
    Membre du Club Avatar de IamKanagawa
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

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

    Informations forums :
    Inscription : Juin 2018
    Messages : 114
    Points : 54
    Points
    54
    Par défaut
    D'accord je vais faire une refonte de ma BDD tu as raison, je cherche vraiment trop compliqué

    merci
    Il faut se tromper dans la vie, pour apprendre et s'améliorer.

    Etudiant BTS-SIO option SLAM

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

Discussions similaires

  1. INSERT INTO avec jointure
    Par bip-bip dans le forum SQL
    Réponses: 4
    Dernier message: 28/05/2015, 13h27
  2. [AC-2007] Problème de jointure dans INSERT INTO avec INNER JOIN
    Par andy331 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 16/03/2010, 15h59
  3. [AC-2007] Insert into avec paramètre depuis un formulaire
    Par ZeDave dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 17/01/2010, 22h21
  4. [MySQL] Php et INSERT INTO, avec variables
    Par Djwaves dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 20/02/2006, 13h53
  5. INSERT INTO avec une valeur numéroauto
    Par priest69 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 08/11/2005, 15h39

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