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. #21
    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,

    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 ....
    Bon je reprends tout depuis le début parce que là je suis en train de me couler tout seul

    Alors j'ai une table collab avec les champs suivants :
    ID (unsigned, auto_increment et primaire), agence, prenom, nom, mail, telephone et date.

    Date dans toutes mes tables correspond à la fonction éponyme PHP pour avoir une trace du moment de l'enregistrement dans la table.

    Ensuite un table formateur, identique à celle des collabs.

    Une table module :
    ID (idem) module et date.

    Une table session :
    Idem que module mais le nom est remplacé par session.

    Je pense faire le même type de table pour les agences (pour le moment il y'en a deux écris en dur dans le code XHTML).

    Pour terminer j'ai une table qui récupère donc les enregistrements des collabs où ils choisissent la formation, écrive un commentaire et attribu une note (plus choix d'agence, nom du collab pour savoir qui s'enregistre, le nom du prof...)

    Donc :
    ID (idem), collab (où le nom et prénom et donc écris ici, récupéré par une liste déroulante qui elle-même récupère de l'autre table), session (idem que collab), module (idem), formateur (idem), description (le champs textarea est enregistré ici) et date.

    Notice :
    Un collab ce rends sur cette page pour donner ces impressions de la formation, choisi son agence, son nom/prénom, la session, le module, le prof, sélectionne une note et entre une description.

    Si dans la table y'a personne qui correcpond avec le même module c'est une nouvelle entrée, dans le cas contraire c'est un update...

    Erf, je crois ne rien oublier.

    Et merci pour vos réponses,


    EDIT : A oui, dans la table principale, (qui récupère donc les enregistrements du collab) j'ai passé l'entrée module à UNIQUE. Je sais pas si c'est bon...

  2. #22
    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
    Et bien tu fais comme dans un de tes premiers post cad:

    Tu as ta table (tu as pas donner le nom) mais celle ou tu as:
    ID , collab , session , module , ....
    Je vais l'appeller T_XXX.

    Sur cette table tu testes le couple (collab, module) si il existe par une requête du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    "SELECT module, collab FROM T_XXX WHERE module='".$module."' AND collab='".$collab."'"
    avec $module et $collab qui proviennent de la page pour donner ses impressions, etc, ....

    Puis je sais pas si tu utilises MySql ou Postgres mais en sql tu fais le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $result = mysql_query("le select");
    $data = mysql_fetch_array ( $result );
    if( $data) { UPDATE } else { INSERT}
    C un exemple (tu avais fais avec le nombre de ligne, ...)

    Voilà.
    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. #23
    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
    Fench,

    au lieu d'améliorer les choses c'est de pire en pire...

    Est-ce que je peux t'envoyer le code par MP avec la structure de la BDD en fichier texte ?
    (enfin je fais un export).

    Désolé de demander ca mais vraiment je bloque complet...

  4. #24
    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
    Si tu veux, j'ai un peu de temps cette après-midi

    Parceque pourtant celà ne me parrait pas trop dur (j'ai du aussi rater des infos)
    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. #25
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Qu'est-ce que tu ne comprends pas avec le code que Fench t'a donné ?

    Dans quelle table faire le INSERT ou l'UPDATE ? Quoi mettre dans le INSERT ou l'UPDATE ?

    Tu fais ton test sur ta table où module et personne sont liées et tu devrais obtenir ce que tu cherches.

    Si j'ai bien compris :
    tu devrais avoir des enregistrements comme ceci :
    (module1, personne1)
    (module2, personne1)
    (module3, personne3)
    etc ...

    Essaie de donner des enregistrements de cette table pour que l'on voit mieux.

    Citation Envoyé par Fench
    Parceque pourtant celà ne me parrait pas trop dur (j'ai du aussi rater des infos)
    +1, ça doit être le ratage d'infos aussi ^^

  6. #26
    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 GoodWear ...

    Alors j'ai eu le temps de ragarder ton code ce matin, et tu y étais presque

    Pour finir dans ton fichier formation.php, tu remplaces le bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    De (faute sur le $result et non $restult)
    $restult = mysql_query ("SELECT module, collab ....
     
    A
    fin du IF
    Par:
    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
     
    // Attention $query sur une ligne, ex de teste avec num_rows
    // $query peut ne pas être utilisé, c pour la lisibilté dans la fenêtre du forum
    $query = "SELECT module, collab FROM otl_formation 
           WHERE module='".$module."' AND collab='".$collab."' ";
    $result = mysql_query ( $query );
    $data = mysql_num_rows ($result);
    if ($data == 0){
      echo 'le couple n'existe pas donc insertion';
      $query = "INSERT INTO otl_formation ( collab, session, module, formateur, note, description, date) ";   // Sur 1 ligne
      $query .= "VALUES ('".$collab."', '".$module."', '".$formateur."', '".$note."', '".$description."', '".$date."' )";  // Sur 1 ligne
      mysql_query ( $query );
    } else{
       echo 'le couple existe donc update';
       $query = "UPDATE otl_formation ";
       $query .= "SET collab='".$collab."', session='". /// je te laisse finir
       mysql_query( $query );			
    }
     
    mysql_close ();
    ça devrait être bon, à toi de tester
    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. #27
    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
    Bonjour et UN GRAND MERCI Fench...

    Mais ca ne marche toujours pas

    Enfin c'est presque ca...

    Donc le truc c'est que si il n'y a aucune entrée, ca rentre bien dans la boucle if et si il y'a déjà une entrée ca rentre dans le else.

    MAIS rien est écris dans la BDD... et donc rien n'est modifié.
    (j'ai quand même réussis à mettre un enregistrement, le premier...)

    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
     
    		$result = mysql_query ("SELECT module, collab FROM otl_formation WHERE module='".$module."' AND collab='".$collab."'");
     
    		$query = "SELECT module, collab FROM otl_formation WHERE module='".$module."' AND collab='".$collab."'";
    		$result = mysql_query ($query);
     
    		$data = mysql_num_rows ($result);
    		if ($data == 0) {
    			echo 'test if';
    			$query = "INSERT INTO otl_formation VALUES ('', '".$collab."', '".$session."', '".$module."', '".$formateur."', '".$note."', '".$description."', '".$date."')";
    			mysql_query ($query);
    			}
    		else {
    			echo 'test else';
    			$query = "UPDATE otl_formation SET (module='".$module."', formateur='".$formateur."', note='".$note."', description='".$description."', date='".$date."')";
    			mysql_query ($query);
    			}
     
    		mysql_close ();

  8. #28
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Essaie d'utiliser des noms de variables différents, pas deux fois $result ou deux fois $query.

  9. #29
    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 baggie Voir le message
    Essaie d'utiliser des noms de variables différents, pas deux fois $result ou deux fois $query.
    Idem


  10. #30
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Au fait, pourquoi il y a deux fois la même requête dans ton code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $result = mysql_query ("SELECT module, collab FROM otl_formation WHERE module='".$module."' AND collab='".$collab."'");
     
    $query = "SELECT module, collab FROM otl_formation WHERE module='".$module."' AND collab='".$collab."'";
    $result = mysql_query ($query);
    Tu mets soit le premier $result, soit $query+$result, pas les deux.

  11. #31
    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
    Hum... C'est exact...

    Je viens de faire la modif mais toujours le même résultat... Désolé... Je sens que je vais prendre un tir...


  12. #32
    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
    ça c le copier/coller qui a merdouillé ....

    @goodwear: Pourquoi dans le insert into, tu as modifié la requête que je t'avais donné ?
    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. #33
    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
    ça c le copier/coller qui a merdouillé ....

    @goodwear: Pourquoi dans le insert into, tu as modifié la requête que je t'avais donné ?
    Euh je viens de vérifier ma BDD et j'avais mis en 'UNIQUE' le module et collab du coup le INSERT INTO fonctionne mais pas le UPDATE...
    (j'avais fais ca pour le KEY et j'ai oublié de le virer)

    Fench, je regarde ca et je reviens...

  14. #34
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    A tout hasard, peut-être renseigner le nom des champs que l'on va utiliser ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "INSERT INTO otl_formation(collab,session,module ...) VALUES ('', '".$collab."', '".$session."', '".$module."', '".$formateur."', '".$note."', '".$description."', '".$date."')";
    Et du coup enlever le '' du début.
    Et fais un die(mysql_error()), des fois qu'il y ait une erreur dans ta requête.

  15. #35
    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
    ET LE UPDATE : MANQUE LE WHERE : COMMENT VEUX TU QUI SACHE OU FAIRE LE UPDATE

    @baggie, c ce que j'avais mis au départ dans son code
    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)

  16. #36
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Citation Envoyé par Fench Voir le message
    ET LE UPDATE : MANQUE LE WHERE : COMMENT VEUX TU QUI SACHE OU FAIRE LE UPDATE

    @baggie, c ce que j'avais mis au départ dans son code
    Pour le where, gniiiii on aurait pu le voir plus tôt xD

    Pour le code : arf ... il a mal copité x)

    Bon je crois bien que son problème va être résolu

  17. #37
    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
    Je pense que ça va bientôt le faire

    @Baggie, j'ai modifié ton code, je vais te l'envoyé (euh parcontre j'ai fait bq en algo, va falloir que tu codes)
    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)

  18. #38
    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 baggie Voir le message
    A tout hasard, peut-être renseigner le nom des champs que l'on va utiliser ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = "INSERT INTO otl_formation(collab,session,module ...) VALUES ('', '".$collab."', '".$session."', '".$module."', '".$formateur."', '".$note."', '".$description."', '".$date."')";
    Et du coup enlever le '' du début.
    Et fais un die(mysql_error()), des fois qu'il y ait une erreur dans ta requête.
    Quand tu dis 'enlever le premier "' tu veux dire faire ca ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $query = INSERT INTO otl_formation(collab,session,module ...) VALUES ('', '".$collab."', '".$session."', '".$module."', '".$formateur."', '".$note."', '".$description."', '".$date."');
    Sinon je rame grave j'y arrive pas...

    J'ai rajouté le WHERE mais à tous les coups c'est pas écris correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query_else = "UPDATE otl_formation SET (module='".$module."', formateur='".$formateur."', note='".$note."', description='".$description."', date='".$date."') WHERE (formateur='".$formateur."', note='".$note."', description='".$description."', date='".$date."')";
    Merci pour votre réactivité les gars...

  19. #39
    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


    Ecoutes regardes un peu sur le WEB avant d'écrire .....

    Bon je te charrie, j'arrête:

    Alots le Update comme pour le premier SELECT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE module='".$module."' AND collab='".$collab."' ";
    C bien ce que tu cherches à faire, 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)

  20. #40
    Membre actif Avatar de baggie
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 755
    Points : 262
    Points
    262
    Par défaut
    Quand tu dis 'enlever le premier "' tu veux dire faire ca ???
    Je vois aucune différence entre la requête de base et ce que tu étais censé enlever.

    Merci pour votre réactivité les gars...
    Pour les filles ça compte aussi ?

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

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