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 :

Formulaire et insertion des donnees dans des tables différentes


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut Formulaire et insertion des donnees dans des tables différentes
    Salut,

    J'ai un petit soucis, j'ai un message d'erreur de type :
    PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails
    que je n'arrive pas à résoudre.
    Voici le code et les captures de ma bdd. Je souhaiterai simplement enregistrer les données dans ma bdd ce qui fonctionnait (très mal ) avant que je mette en place les clés étrangères. J'ai tenté plusieurs solutions mais rien n' y fait. Si vous avez une idée ? c'est avec plaisir :-)

    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
    <?php
    //gestion des erreurs
    try{
    //Connection à la base de données
    $bdd = new PDO('mysql:host=localhost; dbname=xxxxx; charset=utf8',  'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    }catch (Exception $e){
    	die('Erreur : '.$e->getMessage());
    }
     
    //Enregistrement des données saisies dans la table client
    $req = $bdd -> prepare('INSERT INTO client(civilite, nom, prenom, adresse, codePostal, ville) VALUES (?, ?, ?, ?, ?, ?)');
    $req->execute(array($_POST['civilite'], 
    					$_POST['nom'], 
    					$_POST['prenom'], 
    					$_POST['adresse'], 
    					$_POST['codePostal'], 
    					$_POST['ville']));
     
    // enregistrement des données saisies dans la table devis
    $req = $bdd -> prepare('INSERT INTO devis(dateDevis, typeChantier, adresseChantier, villeChantier) VALUES (?, ?, ?, ?)');
    $req->execute(array($_POST['dateDevis'], 
    					$_POST['typeChantier'], 
    					$_POST['adresseChantier'], 
    					$_POST['villeChantier']));
     
    // Enregistrement des données saisies dans la table typetravaux
    $req = $bdd -> prepare ('INSERT INTO typetravaux(detail1, designation1, montantTotal, quantite1, quantite2, quantite3, quantite4, quantite5) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
    $req->execute(array($_POST['detail1'],
    					$_POST['designation1'],
    					$_POST['montantTotal'],
    					$_POST['quantite1'],
    					$_POST['quantite2'],
    					$_POST['quantite3'],
    					$_POST['quantite4'],
    					$_POST['quantite5']));
     
    //redirection visiteur
    header ('Location: index.php');
     
     
    ?>
    Nom : Capture.PNG
Affichages : 444
Taille : 43,2 Ko
    Nom : Capture1.PNG
Affichages : 410
Taille : 44,2 Ko

  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,

    Je pense que la colonne idClient dans la table devis ne devrait pas être null (NOT NULL) sans valeur par défaut or que tu ne lui insères pas de valeurs. Tu dois récupérer l'idClient du précédent insertion et la mettre dans devis.

    A+.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut
    Bonjour andry.aime,

    Merci pour ta réponse. J'ai modifier la colonne idClient à (NOT NULL) cependant, après quelques essais, je vois vois pas comment syntaxiquement je dois m'y prendre pour mettre l'idClient de l'insertion précédent et le mettre dans devis... Aurais tu un exemple pour que je puisse comprendre la syntaxe ? Ma table client est en auto incrément est ce que je dois l'enlever sur l'id des deux autres tables ?

    @+

  4. #4
    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
    Ce que tu dois faire c'est de mettre l'id du client dans les autres tables. Peut-on voir les structures de ces tables?

    A+.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut
    Oui bien sûr !

    Nom : tableClient.PNG
Affichages : 392
Taille : 31,8 Ko
    Nom : tableDevis.PNG
Affichages : 385
Taille : 28,8 Ko
    Nom : tableTypetravaux.PNG
Affichages : 392
Taille : 47,2 Ko

    J'ai enlevé l'auto incrément sur l'id des tables devis et typeTravaux... Je suis un p eu perdu la

    Encore merci

    @+

  6. #6
    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
    La structure de tes tables ne sont pas bonne. Tu dois voir quelle table doit être liée avec quelle table, comment utiliser une clé étrangère. Regarde ici https://cyril-gruau.developpez.com/merise/

    A+.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut
    Effectivement ! J'ai modifié ma base de données !
    Maintenant j'ai une erreur de type :
    Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1364 Field 'idClient' doesn't have a default value in C:\wamp64\www\ ...
    Est ce que tu aurais une idée ? Est ce lié au transfert d'idClient vers idDevis ?

    Encore merci andry !

  8. #8
    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
    Citation Envoyé par Cedflam Voir le message
    Est ce lié au transfert d'idClient vers idDevis ?
    Pourquoi mettre la valeur d'idClient dans idDevis? Tu n'as pas compris le concept d'une clé étrangère, après les colonnes quantite1, 2, 3 indiquent une mauvaise conception de ta base, commence par lire le tutoriel.

    A+.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut
    Oui en effet quelque chose m'échappe !
    Je vais regarder ça de plus près.

    Merci @+

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 25
    Par défaut
    Salut,

    Tout est ok et foonctionne parfaitement, effectivement ma bdd n'était pas nickel.

    Encore merci pour ton aide

    @+

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

Discussions similaires

  1. [Débutant] Insertion de donnees dans 2 tables [acces]
    Par kevan dans le forum VB.NET
    Réponses: 5
    Dernier message: 22/12/2015, 11h23
  2. Insert de donnees dans une table
    Par vinczente dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 20/04/2009, 15h39
  3. Insertion de données dans 2 tables différentes.
    Par anthony_rexis dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/07/2007, 10h29
  4. Réponses: 2
    Dernier message: 17/10/2006, 11h25
  5. Réponses: 7
    Dernier message: 12/10/2004, 16h43

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