Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 09h12   #1
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
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 :
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 !
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h25   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 174
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 174
Points : 6 460
Points : 6 460
on peut vois la structure de TABLE ?
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h32   #3
Membre du Club
 
Inscription : mai 2010
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 97
Points : 53
Points : 53
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 :
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.
nightfall59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h33   #4
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Voici la structure :
Code :
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.
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h36   #5
Membre du Club
 
Inscription : mai 2010
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 97
Points : 53
Points : 53
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 :
1
2
3
 
$reqdp = "DELETE FROM TABLE WHERE Repr_id = $id";
$resdp = mysql_query($reqdp);
nightfall59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h38   #6
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 174
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 174
Points : 6 460
Points : 6 460
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
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h41   #7
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
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 ^^
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h46   #8
Membre du Club
 
Inscription : mai 2010
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 97
Points : 53
Points : 53
tu as essayé un UPDATE au lieu de supprimer et re inserer apres?
nightfall59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h48   #9
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
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 !
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 09h52   #10
Membre du Club
 
Inscription : mai 2010
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 97
Points : 53
Points : 53
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...
nightfall59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 10h31   #11
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
Bon ça ne fonctionne toujours pas, même avec un UPDATE. Je vais essayer de changer ma logique voir si ça fonctionne mieux ...
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 10h36   #12
Membre du Club
 
Inscription : mai 2010
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 97
Points : 53
Points : 53
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 ^^
nightfall59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 10h55   #13
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
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)
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 10h58   #14
Membre du Club
 
Inscription : mai 2010
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 97
Points : 53
Points : 53
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 ^^
nightfall59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h06   #15
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
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à !
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h06   #16
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
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 : 951
Points : 1 063
Points : 1 063
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 Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h08   #17
Membre du Club
 
Inscription : mai 2010
Messages : 97
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 97
Points : 53
Points : 53
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.
nightfall59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h08   #18
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
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 : 951
Points : 1 063
Points : 1 063
utilise le general query log.

http://techchorus.net/enable-mysql-g...slow-query-log
http://dev.mysql.com/doc/refman/5.0/en/query-log.html
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 11h25   #19
Membre confirmé
 
Avatar de baggie
 
Inscription : octobre 2007
Messages : 676
Détails du profil
Informations personnelles :
Âge : 23
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2007
Messages : 676
Points : 225
Points : 225
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 !!
baggie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h12.


 
 
 
 
Partenaires

Hébergement Web