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 :

Update dans une BDD [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut Update dans une BDD
    Bonjour,

    Voilà, grosse question car je ne sais absolument pas comment faire ça.

    J'ai donc une base de donnée et une page avec un formulaire.

    On choisi un module, une personne, on donne une note et une description.
    Clic sur le bouton 'Enregistré' et là hop ca enregistre dans la base de données.

    Jusque là, aucun problème.

    Maintenant si la personne choisis le même module et qu'elle entre une autre description ou bien une autre note j'aimerais à l'enregistrement du formulaire non pas avoir une nouvelle entrée dans la BDD mais un 'update' de l'entrée déjà existante.

    Autrement dis je ne sais pas comment faire pour tester si par apport à tel ou telle personne le champ 'Module' héberge déjà tel module ou pas.

    Est-ce que je suis asser clair ? si oui, comment dois-je procéder ?

    Merci pour vos réponses...

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Salut,

    Donc le couple (module, personne) est unique si j'ai bien compris ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Fench Voir le message
    Salut,

    Donc le couple (module, personne) est unique si j'ai bien compris ?
    Alors en fait il y'a 13 modules au total.
    Niveau personnes, en fait je dois récupérer leur Nom/Prénom (soit avec Joomla soit avec une nouvelle interface, je dois voir ce qui est le mieux).
    Et donc forcement les personnes sont uniques.

    Par contre j'ai un champ ID auto-incrémenter aussi dans la BDD.

  4. #4
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    En fait je ne comprends pas:
    si par apport à tel ou telle personne le champ 'Module' héberge déjà tel module
    J'ai besion de savoit pour le teste ?
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    En fait monsieur X choisis le module 1, donne une note de 3 et entre une description.
    Entregistrer : nouvelle entrée dans la BDD.

    Toujours monsieur X choisis le module 2, donne une note de 2 et entre une description.
    Enregistrer : nouvelle entrée dans la BDD.

    Maintenant si monsieur X choisis le module 1 (déjà enregistré donc) donne la même note mais entre une nouvelle description, dans ce cas j'aimerais ne pas créer une nouvelle entrée dans la BDD mais un update du module 1 sur le champ description qui as donc déjà était enregistré.
    (et donc remplacer la nouvelle entrée par l'ancienne)

    Idem avec les monsieurs Y Z & co.

    C'est vrai que je ne savais pas trop comment l'expliqué, là ca devrait aller, dis moi si tu veux savoir d'autres choses, je reste en stand by
    (et merci pour tes réponses)

  6. #6
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Non non je pense avoir compris

    Donc dans ta base de données, tu testes toujours l'existance du couple (module X, monsieur X). Si il existe pas alors INSERT sinon UPDATE.

    Donc pour,
    Autrement dis je ne sais pas comment faire pour tester si ....
    tout dépends de tabase mais immaginons une table de personnes et une table des modules .... pour les couples, une autre table( intermédiaire ).
    Et tu testes sur cette table, non !
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Fench Voir le message
    Non non je pense avoir compris

    Donc dans ta base de données, tu testes toujours l'existance du couple (module X, monsieur X). Si il existe pas alors INSERT sinon UPDATE.

    Donc pour,

    tout dépends de ta base mais immaginons une table de personnes et une table des modules .... pour les couples, une autre table( intermédiaire ).
    Et tu testes sur cette table, non !
    "Donc dans ta base de données, tu testes toujours l'existance du couple (module X, monsieur X). Si il existe pas alors INSERT sinon UPDATE."
    C'est exactement ça

    Par contre je n'ai qu'une seulle table avec (de mémoire) :
    ID, module, note, description et date.

    En ce qui concerne le nom et prénom, pour le moment je met les miens (juste pour le test). Après ta remarque effectivement il risque d'y avoir une nouvelle table avec les noms / prénoms (sauf peut-être si je récupère les login et donc infos via Joomla)...

  8. #8
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Faut bien que tu fasses la liaison entre les modules et les personnes sinon comment tu vas savoir qui a écrit quoi comme description et note

    Et même si pour l'insant tu es seul: comment table (Id, module, note, ..) peut savoir si tu as noté sauf sur l'existance (mais ça marchera plus qd il y a aura plusieurs personnes).
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Fench Voir le message
    Faut bien que tu fasses la liaison entre les modules et les personnes sinon comment tu vas savoir qui a écrit quoi comme description et note

    Et même si pour l'insant tu es seul: comment table (Id, module, note, ..) peut savoir si tu as noté sauf sur l'existance (mais ça marchera plus qd il y a aura plusieurs personnes).
    Oui, effectivement, alors dans ce cas je fais une deuxième table avec les personnes.
    Donc j'aurais bien Nom et Prénom (plus d'autres infos sans doutes.

    Mais dans ce cas je fais comment alors pour vérifier si ils ont remplis tel ou tel module ?
    Avec deux tables ca me perds encore plus

  10. #10
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Tu as la table intermédiaire qui remplira cette fonction

    à chaque nouvelle description ou note, tu vérifies si le couple (module, personne) existe:
    Si oui, alors update la table module sinon insert
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Fench Voir le message
    Tu as la table intermédiaire qui remplira cette fonction

    à chaque nouvelle description ou note, tu vérifies si le couple (module, personne) existe:
    Si oui, alors update la table module sinon insert
    Euh... En termes de code, tu l'écris comment en PHP ???

  12. #12
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Tu ouvres la table intermédiaire (par my_sql ou postgres ou autre)
    Tu fais un select avec les deux paramètres 'module' et 'personne'

    et tu testes le résulat.

    C pas trop dur, regardes dans le forum, commences un début de code et on verra bien (moi de mon côté je connais pas toutes les données de ton application)
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Fench Voir le message
    Tu ouvres la table intermédiaire (par my_sql ou postgres ou autre)
    Tu fais un select avec les deux paramètres 'module' et 'personne'

    et tu testes le résulat.

    C pas trop dur, regardes dans le forum, commences un début de code et on verra bien (moi de mon côté je connais pas toutes les données de ton application)
    Salut Fench,

    Alors d'après ce que j'ai pu voir, j'ai fais quelque chose qui ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $var = mysql_query ("SELECT module, collab FROM baseOUsontMESdonnées WHERE module='.$module.' AND collab='.$collab.' ");
    $n = mysql_num_rows($var);
     
    if ($n == 2)
     je fais un UPDATE
    else
     je fais un INSERT INTO
    Et quand je clic sur mno bouton 'enregistré' je me retrouve avec une page blanche et rien de plus dans ma BDD.

    Merci de m'aider

  14. #14
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Je pense pas que cela soit bon

    1) En ecrivant 'baseOUsontMESdonnées', tu veux dire le nom de la table contenant les couples (module, personne).

    2) La table sera du genre (id, module, personne)

    2) ta requête devrait s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT module, collab FROM baseOUsontMESdonnées WHERE module='".$module."' AND collab='".$collab."'"
    3) Si tu fais un $n = mysql_num_rows($var); alors c si == 1 alors Update sinon Insert into (mais perso je n'aurais peut être pas fait comme celà)
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  15. #15
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Citation Envoyé par GoodWear Voir le message
    Bonjour,
    Autrement dis je ne sais pas comment faire pour tester si par apport à tel ou telle personne le champ 'Module' héberge déjà tel module ou pas.
    un INSERT INTO ... ON DUPLICATE KEY UPDATE ... ne conviendrait t'il pas pour ton problème ?
    En gros si pas d'enregistrement cela le crée sinon cela le modifie.

    cf :
    http://dev.mysql.com/doc/refman/5.1/en/insert.html
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par grunk Voir le message
    un INSERT INTO ... ON DUPLICATE KEY UPDATE ... ne conviendrait t'il pas pour ton problème ?
    En gros si pas d'enregistrement cela le crée sinon cela le modifie.

    cf :
    http://dev.mysql.com/doc/refman/5.1/en/insert.html
    Grunk, voici ce que j'ai écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Au début je récupère mes variables de mon form avec des addslashes et htmlspecialchars.
     
    mysql_query ("INSERT INTO baseDONNEES VALUES ('', '$collab', '$session', '$module', $formateur, $'note', '$description', '$date') ON DUPLICATE KEY UPDATE module='$module' ");
    Alors ca fonctionne dans le sens où si je rentre des infos dans mon formulaire, ca enregistre dans la BDD.

    Par contre si je choisis un module déjà inscrit dans la base ca ne fais pas de UPDATE mais ca enregistre une nouvelle entrée.

    Voilà, ca a l'air moins compliqué avec cette commande, encore faut-il que je sache comment l'écrire correctement.

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par Fench Voir le message
    Bonjour,

    Je pense pas que cela soit bon

    1) En ecrivant 'baseOUsontMESdonnées', tu veux dire le nom de la table contenant les couples (module, personne).

    2) La table sera du genre (id, module, personne)

    2) ta requête devrait s'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT module, collab FROM baseOUsontMESdonnées WHERE module='".$module."' AND collab='".$collab."'"
    3) Si tu fais un $n = mysql_num_rows($var); alors c si == 1 alors Update sinon Insert into (mais perso je n'aurais peut être pas fait comme celà)
    Fench, j'ai loupé ta réponse...

    Bon en fait j'ai une table avec les noms / prénoms des collabs qui sert à être récupéré dans une liste déroulante.
    Une autre table qui enregistre les collabs sélectionner dans cette liste avec le formateur, le module etc...

    Je ne vois pas comment faire quand tu me parles de mettre ces tables en relation.

    J'ai essayé le truc ON DUPLICATE KEY UPDATE mais marche pas non plus (cf. plus haut)

    Je suis vraiment bloqué

    Vous aurez pas un bout de code clair ?
    J'ai récupéré des trucs sur le net mais rien y fais...

  18. #18
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Pour que cela fonctionne il faut évidemment que tu est un index d'unicité sur un ou plusieurs champs.
    Si ce n'est pas le cas mysql ne peut detecter que c'est un nouvel enregistrement.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 106
    Points : 23
    Points
    23
    Par défaut
    Citation Envoyé par grunk Voir le message
    Pour que cela fonctionne il faut évidemment que tu est un index d'unicité sur un ou plusieurs champs.
    Si ce n'est pas le cas mysql ne peut detecter que c'est un nouvel enregistrement.
    Euh, désolé mais comment je fais pour avoir un index d'unicité ?

    Je vois pas trop ce que c'est... Merci.

    EDIT : ok, apparemment il y'a une case 'Unique' que l'on peut cliquer dans la structure de la BDD. J'ai rendu Unique mon champ 'Module' mais non seulement ca ne marche pas mais en plus je ne peux pas dépasser les deux enregistrement (avec n'importe quel autre module).

  20. #20
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Salut,

    Donnes moi la structure (réélle) de tes tables genre la clé, les champs etc et je te donnerais le code de comment faire ....

    Je souhaite une table des personnes, une des modules ....
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 5 12345 DernièreDernière

Discussions similaires

  1. Problème avec les update dans une BDD
    Par P.O.K dans le forum ASP.NET
    Réponses: 1
    Dernier message: 13/06/2011, 17h07
  2. Faire un insert ou un update dans une bdd
    Par Aspic dans le forum Développement de jobs
    Réponses: 9
    Dernier message: 08/07/2010, 17h22
  3. [MySQL] Update dans une BDD (la suite)
    Par GoodWear dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 01/12/2009, 11h44
  4. Changements de colonnes dans une BDD MySQL
    Par arnaud_verlaine dans le forum Requêtes
    Réponses: 8
    Dernier message: 07/08/2003, 11h33
  5. Pb d'update dans une DataGrid
    Par bidson dans le forum XMLRAD
    Réponses: 11
    Dernier message: 27/05/2003, 14h11

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