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 :

insertion dans une table avec clés étrangères [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut insertion dans une table avec clés étrangères
    j'ai besoin de faire une insertion suivant le schéma conceptuel suivant:
    Nom : formationsMLD.jpg
Affichages : 624
Taille : 24,2 Ko
    je veux faire une inscription en ligne, donc j'ai besoin d'insérer dans étudiant et inscrire au même temps, j'ai essayé ce code mais il a effectué juste l'insertion de l'étudiant et a retourné une erreur pour la deuxième table "inscrire", violation constraint foreign key

    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
     
    //Etudiant
    $stmt = $con->prepare("INSERT INTO etudiant"
                    . "(matricule,nom,prenom,ddn,lieu,sexe,email,phone,adr,commune,wilaya,niveau,specialite) "
                    . "VALUES(:matricule,:nom,:prenom,:ddn,:lieu,:sexe,:email,:phone,:adr,:commune,:wilaya,:niveau,:specialite)");
    $stmt->execute(array(
                'matricule' => $matricule,
                'nom' => $nom,
                'prenom' => $prenom,
                'ddn' => $ddn,
                'lieu' => $lieu,
                'sexe' => $sexe,
                'email' => $email,
                'phone' => $phone,
                'adr' => $adr,
                'commune' => $commune,
                'wilaya' => $wilaya,
                'niveau' => $niveau,
                'specialite' => $specialite
    ));
     //Inscription
    $stmt = $con->prepare("INSERT INTO inscrire(date_ins,valide,matricule,code) "
                    . "VALUES(:date_ins,:valide,:matricule,:code)");
     $stmt->execute(array(
                'date_ins' => $date_ins,
                'valide' => $valide,
                'matricule' => $matricule,
                'code' => $code
    ));
    merci

  2. #2
    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
    Si tu donnais l'erreur entière exacte ça serait plus clair.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    voici l'erreur complète

    Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`formations`.`inscrire`, CONSTRAINT `FK_inscrire_code` FOREIGN KEY (`code`) REFERENCES `formation` (`code`) ON DELETE CASCADE ON UPDATE CASCADE)' in C:\xampp\htdocs\G_Formation\inscription.php:112 Stack trace: #0 C:\xampp\htdocs\G_Formation\inscription.php(112): PDOStatement->execute(Array) #1 {main} thrown in C:\xampp\htdocs\G_Formation\inscription.php on line 112
    la ligne 112 indiquée est la dernière ligne du code

    le code je l'ai récupéré depuis la session de la page d'inscription avec le matricule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $matricule = $_SESSION['etudiant'];
    $code = $_SESSION['formation'];

  4. #4
    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
    Et tu as vérifier ce que valait $code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    je viens de l'afficher, le code je l'envoi en GETdans le lien (dès que l'étudiant choisi la formation il est redirigé vers l'inscription avec le code en GET) après je l'affecte à la session avec le matricule

  6. #6
    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
    Et la valeur $code que tu as au moment de l'insertion existe bien dans ta table formation ?

    Remarque que c'est une question rethorique : si Mysql proteste, c'est forcement que la valeur n'existe pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    j'en suis certaine, car je la récupère par une autre requête sql quand l'étudiant fait son choix, je récupère la clé de ce qu'il a choisi, et je l'ai affiché, elle est exacte, et même dans l'URL je la voie
    en voici un exemple
    Nom : 2017-03-29_20-04-07.jpg
Affichages : 421
Taille : 15,8 Ko

  8. #8
    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
    La tu nous la montres dans l'URL mais c'est dans la session que tu la lis dans ton code.
    Donc tu n'as pas contrôlé $code en fait ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    voilà comment je récupère et j'envoi dans la session
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $code = isset($_GET['code']) && is_numeric($_GET['code']) ? intval($_GET['code']) : 0;
    $_SESSION['formation'] = $code;

  10. #10
    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
    Je redis toujours pareil : que vaut $code au moment de la requête d'insertion ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    ça m'a donné 0 , d'où vien ce ZERO !!! au début quand je le récupère ça m'affiche 2, après insertion de l'étudiant je trouve 0

  12. #12
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    j'ai trouvé l'erreur je croix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $code = isset($_GET['code']) && is_numeric($_GET['code']) ? intval($_GET['code']) : 0;
    c'est cette ligne qui le transforme en 0, surement l'une des conditions dans cette condition n'est pas valide

  13. #13
    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
    Il y a deux conditions, ça ne devrait pas être trop dur de trouver laquelle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  14. #14
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    mais les deux sont justes, j'arrive pas à comprendre, vous avez vu le lien vous même dans la figure
    ?code=2
    il existe donc isset() retourne vrai et il est numérique
    voici le code où je mets le lien, les données récupérés depuis la base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<h3><a href="inscription.php?code=' . $form['code'] . '">' . $form['titre'] . '</a></h3>';
    après cela je le récupère par GET ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $code = isset($_GET['code']) && is_numeric($_GET['code']) ? intval($_GET['code']) : 0;
    et je le mets dans la session

  15. #15
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    j'ai affiché les deux conditions: isset() retourne vrai mais is_numeric ne retourne rien, ni 1 ni 0
    j'ai supprimé la deuxième condition et ça donne la même erreur

  16. #16
    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
    Debuguer ça demande seulement d'y aller pas à pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var_dump($_GET['code']);
    var_dump(isset($_GET['code']));
    var_dump(is_numeric($_GET['code']);
    var_dump(isset($_GET['code']) && is_numeric($_GET['code']));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  17. #17
    Membre habitué Avatar de Hind4Dev
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2014
    Messages : 428
    Points : 140
    Points
    140
    Par défaut
    j'ai résolu le problème, en fait il le $code était bien réceptionné au début mais après avoir confirmer l'envoi du formulaire, dans le nouveau lien y'a pas de code il appelait deux fois cette ligne de code donc il trouve pas il donne 0 suivant la condition
    merci beaucoup

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

Discussions similaires

  1. Insertion dans une table avec IBDataSet
    Par mehdiing dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/12/2009, 11h16
  2. Réponses: 6
    Dernier message: 14/05/2009, 11h01
  3. Erreur lors d'insertion dans une table avec Indentity
    Par rad_hass dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/03/2008, 15h22
  4. Réponses: 3
    Dernier message: 24/04/2006, 21h03
  5. Réponses: 3
    Dernier message: 10/02/2006, 15h48

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