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 :

Deux requêtes à la suite, non exécution de la première [MySQL]


Sujet :

PHP & Base de données

  1. #1
    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 Deux requêtes à la suite, non exécution de la première
    Bonjour,

    je copie une ligne d'une table "TABLE" dans une table temporaire "TABLETEMP".
    Ensuite, je modifie la ligne dans ma table temporaire via une requête.

    Je souhaite enfin supprimer la ligne de ma table "TABLE" et insérer dans la table "TABLE" la ligne de la table temporaire pour avoir les modifications dans la bonne table.

    Je fais donc ces requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $reqdp = 'DELETE FROM TABLE WHERE Repr_id = '.$id;
    $resdp = mysql_query($reqdp);
     
    // On insère les nouvelles données
    $reqip = 'INSERT INTO TABLE
    		SELECT * FROM TABLETEMP WHERE Repr_id ='.$id;
    $resip = mysql_query($reqip);
    Problème : à l'insertion j'ai l'erreur de duplication de la clé. Ma ligne ne s'est apparemment pas supprimée (1ère requête) dans ma table TABLE et donc aucune copie de TABLETEMP vers TABLE n'est faite.

    J'ai essayé de faire mes requêtes une à une dans phpmyadmin, aucun problème. J'ai fait des echo de chaque requête, elles sont bonnes. Aucune erreur n'est détectée.

    Est-ce que vous avez une idée ? Merci !

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    on peut vois la structure de TABLE ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 82
    Points
    82
    Par défaut
    Si ta requete 1 ne fonctionne pas c'est etrange c'est qu'il doit y avoir un probleme dans les noms de colonnes :

    essaye ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $reqdp = 'DELETE FROM TABLE WHERE Repr_id = '.$id;
    $resdp = mysql_query($reqdp) or die('Erreur SQL !<br />'.$reqdp.'<br />'.mysql_error());
    il devrait te donner un indice sur le probleme rencontré, sinon c'est que la requete s'effectue mais que $id n'est pas bon essaye un echo $id aussi pour voir ce qu'il contient.

  4. #4
    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
    Voici la structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE `TABLE` (
      `idx_retour` int(11) NOT NULL AUTO_INCREMENT,
      `Repr_id` int(11) NOT NULL,
      `Rtpd_id` int(11) NOT NULL,
      `Repr_num_bon` int(11) NOT NULL ,
      `Repr_date_generation` date NOT NULL ,
      `Clie_nom` varchar(50) NOT NULL,
      `Clie_id` int(11) NOT NULL,
      PRIMARY KEY (`idx_retour`),
      UNIQUE KEY `Repr_id` (`Repr_id`),
      KEY `Rtpd_id` (`Rtpd_id`)
    ) ;
    EDIT : j'ai déja fait ces tests, aucune erreur sur ma requête et $id contient bien l'id que je veux.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 82
    Points
    82
    Par défaut
    Ce que je comprend pas trop c'est que tu supprime la ligne en 1er et que tu l'insert apres ? Sinon ton code n'a pas l'air de contenir d'erreur vraiment flagrante ^^

    Perso le code je l'ecrit comme ca dans la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $reqdp = "DELETE FROM TABLE WHERE Repr_id = $id";
    $resdp = mysql_query($reqdp);

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    tu peux aussi faire un requête sur la table en vérifiant que tu n'aurais quand même pas des doublons sur Repr_id

  7. #7
    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 nightfall59 Voir le message
    Ce que je comprend pas trop c'est que tu supprime la ligne en 1er et que tu l'insert apres ? Sinon ton code n'a pas l'air de contenir d'erreur vraiment flagrante ^^
    En fait, les deux lignes (une dans la TABLE et une dans la TABLETEMP) sont identiques au niveau des clés. Seulement, dans TABLETEMP je fais des modifications sur le contenu. Une fois que ces modifications sont finies, il faut que je les mette dans ma TABLE. Donc que je copie/colle ma ligne de TABLETEMP dans TABLE.

    Les lignes étant identiques par les clés, je dois d'abord supprimer la ligne de TABLE pour ensuite insérer la copie de TABLETEMP dans TABLE et avoir ma ligne avec ses modifications. Si je ne la supprime pas, j'aurai une erreur de "duplicate key".

    MaitrePylos > juste pour vérifier dans ma table maintenant ou dans mon programme ? Si c'est maintenant : je n'ai aucun doublon. Si c'est dans le programme : j'en ai un, c'est pour ça que je veux le supprimer avant l'insertion ^^

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 82
    Points
    82
    Par défaut
    tu as essayé un UPDATE au lieu de supprimer et re inserer apres?

  9. #9
    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
    Pour faire un update il faudrait que je récupère chaque valeur de ma table TABLETEMP pour ensuite y insérer dans ma table TABLE non ?

    Je pensais que la suppression + l'insertion était plus simple mais en fait peut-être pas. Je vais essayer !

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 82
    Points
    82
    Par défaut
    dit moi ce que ca donne . Mais oui tu doit recuperer ta ligne complete, mais ca tu le fait dans un array qui sera $resdp['nom_de_la_colonne']

    en gros t'aura quand meme 2 requete :

    1) select...

    2) update...

  11. #11
    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
    Bon ça ne fonctionne toujours pas, même avec un UPDATE. Je vais essayer de changer ma logique voir si ça fonctionne mieux ...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 82
    Points
    82
    Par défaut
    alors là a part un detail d'apostrophe, de virgule ou une galere de ce genre je vois pas si les variables contiennent les bonnes valeur etc...

    encadre tes noms de tables et de champs etc... par des ` (altGr+ 7^^)

    genre DELETE FROM `TABLE`.`TABLE` ...


    EDIT : tu modifie bien le bon fichiers ? ca m'arrive souvent de modifier le fichier sur ma clé usb et de me rendre compte apres 30min de galere que j'oublie de remplacer le fichier php dans wamp par le nouveau ^^

  13. #13
    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 nightfall59 Voir le message
    EDIT : tu modifie bien le bon fichiers ? ca m'arrive souvent de modifier le fichier sur ma clé usb et de me rendre compte apres 30min de galere que j'oublie de remplacer le fichier php dans wamp par le nouveau ^^
    Oui oui c'est bien le bon. Je fais des echo de mes requêtes, elles sont toutes bonnes, mon id est toujours le bon et quand j'exécute ces requêtes dans phpmyadmin, tout fonctionne ... ça devient chiant là x)

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 82
    Points
    82
    Par défaut
    sinon execute dans phpmyadmin copie et colle les requetes, tu test comme ca et apres tu modifie pour remplacer les champs voulu par les variables que tu as.

    si ca marche pas quand tu remplace, c'est tes variable, sinon bha... formate ton pc ca pourrais marcher ^^

  15. #15
    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
    J'ai exécuté dans phpmyadmin puisque les deux requêtes fonctionnent.
    J'ai copié collé dans mon code avec des valeurs en dur (celles fonctionnant dans phpmyadmin).
    Et ça ne fonctionne pas. u_u je sèche là !

  16. #16
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    au lieu de faire DELETE / INSERT est_ce qu'un INSERT... ON DUPLICATE UPDATE... ne serait pas mieux indiqué?
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Points : 82
    Points
    82
    Par défaut
    Citation Envoyé par gene69 Voir le message
    au lieu de faire DELETE / INSERT est_ce qu'un INSERT... ON DUPLICATE UPDATE... ne serait pas mieux indiqué?
    ca pourrait etre pas mal comme idee x) a part ca je vois pas trop quoi faire d'autre.

  18. #18
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  19. #19
    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
    Je pense savoir d'où vient le problème : une requête qui s'exécute avant celles ci dessus et qui du coup fait foirer mes valeurs. J'essaie de modifier ça pour voir si ça vient de là !

    EDIT : problème résolu !!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/11/2010, 19h01
  2. Réponses: 6
    Dernier message: 01/09/2009, 13h01
  3. Exécuter plusieurs requêtes à la suite
    Par FrenchFrogger dans le forum Sql*Plus
    Réponses: 2
    Dernier message: 14/10/2008, 19h16
  4. exécuter deux requêtes SQL à partir d'un bouton de commande
    Par Platon93 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 05/12/2006, 17h57
  5. [MySQL] Requête non exécutée
    Par harlock59 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 03/05/2006, 15h42

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