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 :

Ecriture dans la base de données en php avec une clé étrangère


Sujet :

PHP & Base de données

  1. #21
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Code php : 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
    ("connexion.php");
    //requete preparées
    $requete_insertion_definition = $bdd->prepare('INSERT INTO dictionnaire(contexte, definition, categorie, synonyme, exemple)
            VALUES(?,?,?,?,?)');
    $requete_insertion_mot = $bdd->prepare('INSERT INTO mot(iddico, ortographe) VALUES(?,?)');
     
     
    //Execution des requêtes préparées
    $requete_insertion_definition->execute(array($_POST['contexte'], $_POST['definitiondumot'], $_POST['cat'], $_POST['synonyme'], $_POST['exemple']));
     
     
     
     
    $iddico = $bdd->lastInsertId();
    $requete_insertion_mot->execute(array($iddico, $_POST['orthographe']));
     
     
    //toujours terminer le traitement de la requête
    $requete_insertion_definition->closeCursor();
    $requete_insertion_mot->closeCursor();
     
     
    //redirection vers la page d'accueil
    header('Location:index.php');
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  2. #22
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    En débboguant avec le print_r(), ça m'affiche bel et bien l'id qui vient d'être auto_incrémenté, mais l'insertion ne marche toujours pas dans la table "mot". Y a-t-il pas un problème avec l'encodage, ou avec la requête d'insertion ou sur la table "mot" car je récupère bien l'id mais je répète que c'est uniquement l'insertion dans la table "mot" qui échoue.

    1000 fois merci pour vos aides mes amis. J'y arriverais avec votre aide à résoudre ce problème.

  3. #23
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    J'ai même vidé la cache du navigateur, toujours rien dans la table "mot". Que dois-je faire ?

  4. #24
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Il fallait juste voir que dans le code que je t'ai envoyé, il y'avait un problème d'espace après VALUES au lieu de de . Il en est de même après dictionnaire et mot.
    Code final
    Code php : 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
     
    include_once("connexion.php");
     
     
    //Préparation de la requête pour insertion du dictionnaire
    $req = $bdd->prepare("INSERT INTO dictionnaire (contexte, definition, categorie, synonyme, exemple) 
             VALUES (:contexte, :definition, :categorie, :synonyme, :exemple)");
     
     
     
     
    $req->bindParam(':contexte', $_POST['contexte']);
    $req->bindParam(':definition', $_POST['definition']);
    $req->bindParam(':categorie', $_POST['categorie']);
    $req->bindParam(':synonyme', $_POST['synonyme']);
    $req->bindParam(':exemple', $_POST['contexte']);
     
     
     
     
    //exécution de la requête pour insertion du dictionnaire
    $req->execute();
     
     
     
     
    $iddico = $bdd->lastInsertId(); //recuperation de l'id de la table dictionnaire dont je viens d'insérer les données
    //Préparation de la requête pour insertion du mot
    $req = $bdd->prepare("INSERT INTO mot (iddico, ortographe) 
             VALUES (:iddico, :ortographe)");
    $req->bindParam(':iddico', $iddico);
    $req->bindParam(':ortographe', $_POST['ortographe']);
     
     
     
     
    //exécution de la requête pour insertion du mot
    $req->execute();
     
     
     
     
    // Fermeture de la connexion
    $req->closeCursor();
     
     
     
     
    //redirection vers la page d'accueil
    header('Location:index.php');
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  5. #25
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Ouvre un peu les yeux! Tu allais constater que le code que j' ai posté en premier demandait juste de mettre un espace après les mots "dictionnaire", "VALUES" et "mot". j'ai tout fais pour toi.
    Code php : 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
    include_once("connexion.php");
     
    //Préparation de la requête pour insertion du dictionnaire
    $req = $bdd->prepare('INSERT INTO dictionnaire (contexte, definition, categorie, synonyme, exemple) 
            VALUES (:contexte, :definition, :categorie, :synonyme, :exemple)');
     
     
    $req->bindParam(':contexte', $_POST['contexte']);
    $req->bindParam(':definition', $_POST['definition']);
    $req->bindParam(':categorie', $_POST['categorie']);
    $req->bindParam(':synonyme', $_POST['synonyme']);
    $req->bindParam(':exemple', $_POST['contexte']);
     
     
    //exécution de la requête pour insertion du dictionnaire
    $req->execute();
     
     
    $iddico = $bdd->lastInsertId(); //recuperation de l'id de la table dictionnaire dont je viens d'insérer les données
    //Préparation de la requête pour insertion du mot
    $req = $bdd->prepare('INSERT INTO mot (iddico, ortographe) 
            VALUES (:iddico, :ortographe)');
    $req->bindParam(':iddico', $iddico);
    $req->bindParam(':ortographe', $_POST['ortographe']);
     
     
    //exécution de la requête pour insertion du mot
    $req->execute();
     
     
    // Fermeture du curseur
    $req->closeCursor();
     
     
    //redirection vers la page d'accueil
    header('Location:index.php');
    rassures toi juste de la cohérence entre $_POST['categorie'] et le name de l'input du formulaire
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  6. #26
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Je vais peut-être dire une khônerie mais est-ce que ça ne pourrait pas être dû au fait qu'il y a deux prepare sur la même connexion bdd en même temps ?
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  7. #27
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    est-ce que ça ne pourrait pas être dû au fait qu'il y a deux prepare sur la même connexion bdd en même temps ?
    Je ne le pense pas @bazade car, il y'a un
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //exécution de la requête pour insertion du mot
    $req->execute();
    avant le prochain prepare à la ligne 16.
    @milanais dit:
    En débboguant avec le print_r(), ça m'affiche bel et bien l'id qui vient d'être auto_incrémenté, mais l'insertion ne marche toujours pas dans la table "mot"
    celà signifie qu'il y'a bien insertion dans dictionnaire et récupération du dernier id inséré. Quant à mot, l'insertion ne se réalise pas, ce qui selon moi, pourrait provenir de la cohérence entre les variables POST, leurs name dans le formulaire, et leurs champs dans la BDD.
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  8. #28
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    En informatique il faut aussi être bon en orthographe !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $requete_insertion_mot = $bdd->prepare('INSERT INTO mot(iddico, ortographe) VALUES(?,?)');
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  9. #29
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous et merci à vous qui avez tout fait pour m'aider.

    Coup de tonnerre: curieusement mon code marche, il y insertion dans les 2 tables. Voici le code:
    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
     
    <?php
    	include_once("connexion.php");
    	//requete preparées pour l'insertion dans la table "dictionnaire"
    	$requete_insertion_definition = $bdd->prepare("INSERT INTO dictionnaire (contexte, definition, categorie, synonyme, exemple)
    			VALUES(?,?,?,?,?)");
    	$requete_insertion_definition->execute(array($_POST['contexte'],$_POST['definitiondumot'],$_POST['categorie'],$_POST['synonyme'],$_POST['exemple']));			
     
    	//Execution des requêtes préparées pour l'insertion dans la table "mot"	 
    	$iddico = $bdd->lastInsertId();	
    	$requete_insertion_mot = $bdd->prepare("INSERT INTO mot (iddico, orthographe) VALUES(?,?)");
    	$requete_insertion_mot->execute(array($iddico,$_POST['orthographe'])); 
     
    	//toujours terminer le traitement de la requête
    	$requete_insertion_definition->closeCursor();
    	$requete_insertion_mot->closeCursor();	 
     
    	//redirection vers la page d'accueil
    	header('Location:index.php');
    ?>
    J'ai juste fait insérer un espace entre mot et la parenthèse, puis cela a marché. Curieusement encore, j'ai volontairement supprimé cet espace pour confirmer que l'erreur venait peut-être de là, quelle n'a pas été ma surprise de voir que le code fonctionnait toujours.

    Je me demande toujours où était le problème.

  10. #30
    Membre averti
    Homme Profil pro
    Autres
    Inscrit en
    Mai 2017
    Messages
    279
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Autres

    Informations forums :
    Inscription : Mai 2017
    Messages : 279
    Points : 421
    Points
    421
    Par défaut
    Passer le sujet à résolu. @bazade l'a dit plus haut tu avais
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete_insertion_mot = $bdd->prepare("INSERT INTO mot (iddico, ortographe) VALUES(?,?)");
    au lieu de
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete_insertion_mot = $bdd->prepare("INSERT INTO mot (iddico, orthographe) VALUES(?,?)");
    L’appétit vient en mangeant.
    Pourquoi compliquer quand on peut faire plus simple?
    Une réponse vous a été utile? pensez à
    Vous avez eu la réponse à votre question? marquez votre discussion
    Faites un tour aux FAQs et aux tutoriels et cours.

  11. #31
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    @Nazoïde, merci pour tes propositions, mais aucune d'elles ne marchait chez moi. @bazade, merci également à toi mais le fait qu'il y ait 2 prepare sur la variable $bdd ne causait aucun problème.

    Le code: parfois ça fait mal à la tête.

  12. #32
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Tu avais écrit ortographe au lieu d'orthographe.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  13. #33
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Non @badaze, c'est plutôt @Nazoïde qui l'avait fait. Vérifie bien mon code depuis ma question et tu verras que je n'avais fait aucune erreur sur "orthographe".

  14. #34
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    CQFD

    Nom : 2017052_000.JPG
Affichages : 367
Taille : 81,0 Ko
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  15. #35
    Futur Membre du Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juillet 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Toutes mes excuse @badaze, je viens de relire mes premiers posts, tu as parfaitement raison. Dans le "prepare" j'avais écris "ortographe" et écris "orthographe" dans $_POST. C'était donc là l'erreur.

    MAIS je t'assures qu'en vous lisant, j'avais fait un copier-coller de la valeur du 'name' dans le formulaire pour le remplacer dans le fichier 'traitement.php'. Sûrement, j'avais oublié d'actualiser le navigateur avant de tester l'application et ça ne marchait toujours pas. Ce matin quand je me suis relancé sur ce code, j'ai commencé par actualiser le navigateur et c'est là que j'ai constaté que l'insertion marchait.

    Merci encore pour vos éclairages.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [MySQL] Update d'une table dans la base des données mysql php
    Par glodybiss4 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/02/2012, 16h51
  2. Réponses: 5
    Dernier message: 28/02/2011, 21h42
  3. Réponses: 1
    Dernier message: 19/08/2009, 21h20
  4. Réponses: 0
    Dernier message: 20/05/2009, 20h29
  5. affichage dans la base de donnée en php
    Par hadjiphp dans le forum Langage
    Réponses: 2
    Dernier message: 26/04/2009, 00h06

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