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 :

insérer sans écraser les données déjà existantes d'une table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut insérer sans écraser les données déjà existantes d'une table
    bonjour,
    j'ai un problème d'insertion, j'ai créer trois pages en php. La première où il y a une liste déroulante avec laquelle je récupère le numéro à modifier.
    Dans la 2eme mon formulaire déjà rempli avec les champs à modifier (pour ces deux pages aucun problème)
    Le problème c'est dans la 3eme je veux modifier juste quelques champs mais sans les écraser dans la table, j'ai fait un insert into mais le problème est qu'on ne peut pas faire un where, en plus c'est une jointure, j'ai voulu récupérer les id et faire des insert into mais j'ai une erreur lors de l'insertion il connait pas le id récupéré pour l'insérer.
    j'espère que j'ai été clair,
    et merci d'avance
    Ne pensez pas trop

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Salut, il faut que tu utilises la commande update. Mais je pense qu'un totriel de SQL serait encore mieux. Dans la section faq et tuto de dvp tu devrais pouvoir trouver cela.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    le update va écraser mes données moi je veux qu'il garde les anciennes valeurs
    Ne pensez pas trop

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    Citation Envoyé par brajae85 Voir le message
    le update va ecraser mes donnees moi je veux qu'il garde les anciens valeur
    dans ce cas, t'a plus qu'a créer une table intermediaire qui se chargera de contenir pour chaque ligne modifier l'ancienne valeur. en ce moment dans ta table principale, tu peux ecraser les valeurs actuelles avec les nouvelles que l'utilisateur vient de saisir. tout ceci sachant que les valeurs qui tu es entrain d'ecraser ont été préalablement sauvegardé dans ta table de backup
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    merci bien pour ta reponse. Mais est ce que c'est pas possible de le faire avec insert into Table1(champ1,champ2) select champ3,champ2 from table2,table3

    si oui ,quelle est la forme exacte d'une tel requete.
    et merci
    Ne pensez pas trop

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par brajae85 Voir le message
    je veux modifier juste kelk champs mais sans les ecraser dans la table
    Je veux bien un exemple avec :
    1. Contenu du champ avant modif
    2. Saisie de l'utilisateur
    3. Contenu du champ après modif
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    oui c'est possible. c'est une requte du genre
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into matable(champ1,champ2)
    (select champ3,champ4 from t1,T2 where T1.id=T2.id)

    verifie la syntaxe. en plus j'ai jamais fais ça avec mysql (avec oracle oui). je parle donc sous reserve de controle
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 217
    Points
    8 217
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par brajae85 Voir le message
    est ce que c'est pas possible de le faire avec insert into Table1(champ1,champ2) select champ3,champ2 from table2,table3

    si oui ,quelle est la forme exacte d'une tel requete.
    Oui c'est possible, toutes les infos et des exemples sont dispos dans la DOC MySQL : http://dev.mysql.com/doc/refman/5.1/...rt-select.html
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    merci bien pour vos aides, et pour le liens. je vais essayer la requete
    Ne pensez pas trop

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    re Salut
    j'ai fait cette requete là:
    $reponse= mysql_query("INSERT INTO materiel (id_mat,num_inventaire, categorie_mat,id_emplacement)
    (SELECT id_mat,num_inventaire,categorie_mat, id_emplacement
    FROM materiel,emplacement
    where emplacement.id_emplacement=materiel.id_emplacement
    and
    num_inventaire='$num_inventaire')")or die(mysql_error());
    $donnees=mysql_fetch_array($reponse);

    Mais il me donne cette erreur :
    Champ: 'id_emplacement' dans field list est ambigu
    je sais pas ou est le probleme exactement
    Ne pensez pas trop

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    fallait juste mettre le nom de la table devant id_emplacement. comme ceci

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $reponse= mysql_query("INSERT INTO materiel (id_mat,num_inventaire, categorie_mat,id_emplacement)
    (SELECT id_mat,num_inventaire,categorie_mat, materiel.id_emplacement
    FROM materiel,emplacement
    where emplacement.id_emplacement=materiel.id_emplacement
    and
    num_inventaire='$num_inventaire')")or die(mysql_error());
    $donnees=mysql_fetch_array($reponse);
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    encore une erreur: Duplicata du champ '1' pour la clef 1

    je croix que j'ai fais la mauvaise conception pour resoudre le probleme de modification sans ecrasement. Je vai refaire mes calculs
    merci en tt cas
    Ne pensez pas trop

  13. #13
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    Citation Envoyé par brajae85 Voir le message
    encore une erreur: Duplicata du champ '1' pour la clef 1

    je croix que j'ai fais la mauvaise conception pour resoudre le probleme de modification sans ecrasement. Je vai refaire mes calculs
    merci en tt cas
    c'est ce q je t'ai dit dans mon premier post. il faut q ça soit une table intermediaire. tu p pas inserer dans la meme table (materiel) sachant q il existe dans cette table des contraintes de clé primaire. meme si tu sautes les contraintes d'integrité de cette table, la conception reste pas bonne.
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  14. #14
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    je sais pas comment faire pour une table intermediaire est ce que tu peux me donner le fil de debut pour commencer juste un tt petit exemple si c'est possible.

    g une petite idee c'est de selectionner le dernier id (max_id) et l'incrementer mais en cour de reflexion.
    merci pour ton aide
    Ne pensez pas trop

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    recapitulons. le pbm c'est koi???
    on est dans une situation ou des données existe dans une table (matériel par exemple); on affiche ces données en modification a un utilisateur. Seulement la contrainte c'est que on veut garder une trace des données qui existait, et garder egalement la trace des modif de l'utilisateur. c'est bien ça la problématique???

    si c'est le cas, la solution c'est :
    1. 1°) creer une table disons old_data_materiel(id_mat,num_inventaire, categorie_mat,id_emplacement)
    2. 2°) lorsque l'utilisateur modifie les données, au lieu d'ecraser les données (connaissant le id), on commence par
    3. 2-1) inserer les anciennes valeurs dans la table old_data_materiel. tu pourras donc utiliser ta requete
      Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
      INSERT INTO old_data_materiel(id_mat,num_inventaire, categorie_mat,id_emplacement)
    4. (SELECT id_mat,num_inventaire,categorie_mat, materiel.id_emplacement ....
  16. 2-2) updater ta table materiel avec les données que l'utilisateur a modifier

voila un peu l'idée.
Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  • #16
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    c'est exactement ça le probleme mais ma table maetriel doit recuperer 3 id d'autre 3 tables
    Ne pensez pas trop

  • #17
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    je vais creer ma table par exemple historique elle doit recuperer le id dune table emplacement et le id dune table fournisseur un autre dune table achat
    je doi garder cette relation avec les autre tables comment faire??
    Ne pensez pas trop

  • #18
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    lors de la creation de ma table historique je dois mentionner les clés id_emplacement, id_achat,id_fournisseur ,id_materiel comme des cles etrangeres,et id_historique cle primaire autoincrement.
    mon probleme que la saisi se fait selon un formulaire ou chak champs va vers une table.
    Alors d'apres ce que vous m'avez expliqué c'est d'inserer les donnees dans la table historique,et mettre à jour la table materiel.
    donc faire une requette insert into historique (mes donnees)
    et une requete update materiel.
    qui doit etre faite la premiere insert ou update ?
    Ne pensez pas trop

  • #19
    Nouveau membre du Club
    Inscrit en
    Décembre 2006
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 109
    Points : 35
    Points
    35
    Par défaut
    Je te remercie infiniment Ouatmad la solution de creer une nouvelle table intermediaire fonctionne bien merci encore une fois
    Ne pensez pas trop

  • #20
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    Citation Envoyé par brajae85 Voir le message
    Je te remercie infiniment Ouatmad la solution de creer une nouvelle table intermediaire fonctionne bien merci encore une fois
    bêh je t'en prie. N'oublie pas de marquer resolu
    Les hommes naissent et demeurent libres et egaux en dignité et en droit. Les distinctions sociales ne peuvent etre fondées que sur l'utilité commune. Article 1 droits et de l'homme et du citoyen. 1789

  • + Répondre à la discussion
    Cette discussion est résolue.
    ActualitésFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPLaravelSymfonyZend Framework

    Discussions similaires

    1. [MySQL] Requêtes sql sans écraser les données
      Par Arkodath dans le forum PHP & Base de données
      Réponses: 5
      Dernier message: 17/06/2015, 09h02
    2. Réponses: 10
      Dernier message: 08/12/2014, 15h11
    3. [AC-2007] enregistrer les données sur état dans une table
      Par ouahab dans le forum Access
      Réponses: 1
      Dernier message: 14/05/2012, 15h12
    4. Réponses: 1
      Dernier message: 11/03/2009, 11h52
    5. Réponses: 3
      Dernier message: 04/10/2007, 12h00

    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