cktoon Posté 11 Juin 2006 Posté 11 Juin 2006 Bonjour à tous, je suis depuis un moment à essayer de comprendre ce qui se passe lorsque j'envoie une commande d'insertion en bdd et que je me retrouve avec des insertions doublées. Voilà mon code: il s'agit d'ajouter des pdts en BDD dans la table panier_temp, qui contient les champs suivants :id indexé avec autoincrementsessionrefprixsoustotalSi je fais ça :if(isset($_GET['ajouter'])) { $req = mysql_query("SELECT id,ref,prix FROM produits WHERE id='".$_GET['ajouter']."'"); if(mysql_num_rows($req)) { $pdt = mysql_fetch_object($req); $req = mysql_query("INSERT INTO panier_temp SET pdt='".$pdt->id."', ref='".$pdt->ref."', prix='".$pdt->prix."', soustotal='".$pdt->prix."'"); }}tout est nickelMais j'ai besoin de conserver également l'identifiant de session dans la table, et si je fais ça :if(isset($_GET['ajouter'])) { [b]$session = session_id();[/b] $req = mysql_query("SELECT id,ref,prix FROM produits WHERE id='".$_GET['ajouter']."'"); if(mysql_num_rows($req)) { $pdt = mysql_fetch_object($req); $req = mysql_query("INSERT INTO panier_temp SET [b]session='".$session."'[/b], pdt='".$pdt->id."', ref='".$pdt->ref."', prix='".$pdt->prix."', soustotal='".$pdt->prix."'"); }}eh bien je me retrouve avec 2 enregistrements identiques en BDD :wacko: J'ai vraiment tourné et retourné tout ça pour essayer de comprendre pourquoi mon insertion se doublait.... Vraiment je ne comprends pas.... En mettant un champ date de type timestamp dans la table, je vois apparaitre une seule différence entre les 2 lignes : un écart d'une seconde entre le premier et le deuxième. Mais qu'est-ce qui se passe ??????
Portekoi Posté 11 Juin 2006 Posté 11 Juin 2006 Bonjour, Un Insert ne peux insérer qu'une seule ligne dans ton cas. il est impossible d'insérer deux lignes en une seule fois (sauf requête imbriquée). Donc, tu dois appeler deux fois ta page, ou ton script. Fais un exit; juste après ta requete et vois si tu en as deux. Si tu en as deux, un script doit faire la même chose Portekoi
cktoon Posté 11 Juin 2006 Auteur Posté 11 Juin 2006 C'est ce que je croyais : mais dans ce cas, et si l'appel se faisait ailleurs aussi, alors je devrais avoir 2 enregistrements en BDD avec ou sans l'identifiant de session... Or là je n'en ai 2 que lorsque je met ce paramètre. Je vais devenir maboule je crois bien
Portekoi Posté 11 Juin 2006 Posté 11 Juin 2006 Essaie de faire ce que t'ai dis : Mais un exit() juste après. Si tu en as 2, c'est que sois tu as réinventer le moteur de Mysql, sois tu es dans une boucle sois tu appelles deux fois ta page. Pas d'autres solutions .
cktoon Posté 11 Juin 2006 Auteur Posté 11 Juin 2006 J'ai isolé ma fonction... seule un seul enregistrement. Je remets le reste du code, j'en ai à nouveau 2. Mais la fonction n'est pas appellée dans ce reste de code. Je continue la traque....
cktoon Posté 11 Juin 2006 Auteur Posté 11 Juin 2006 Apparemment, j'ai vraiment trouvé le truc qui fout la merde.... mais ça reste toujours incompréhensible pour moi là.... J'ai cru que je me mélangeais dans mes objets, vérifié tout... mais en fait à l'affichage, j'utilise une image et pour l'instant je ne me suis pas occupée de son url. Dans mes scripts, j'avais donc une balise image avec src="" vide Et c'est ça qui fout la m.... Mais comment est-ce que ça peut doubler une commande INSERT ??????? en mettant src="#", même phénomène en mettant src="nimportequoi" problème corrigé Je ne comprends pas ! J'y ai passé ma journée sur ce foutu truc, alors si vous avez un début d'explication, je prends sinon je crois que je vais faire comme si ça ne m'étais pas arrivé tellement c'est hallucinant.
Portekoi Posté 11 Juin 2006 Posté 11 Juin 2006 La quote ferme un autre code? Je sais pas mais en tout cas, cela ne pouvais pas provenir de ta requete
cktoon Posté 12 Juin 2006 Auteur Posté 12 Juin 2006 Non non, pas d'autre code appelé, rien que du html... et cette image qui faisait apparemment "relancer la page" ??? Truc de fou, je te l'accorde...
Portekoi Posté 12 Juin 2006 Posté 12 Juin 2006 Bonjour, Un truc très étrange : Créé une page sur tu vas appeler "index.asp" dans un nouveau répertoire. Dedans, tu mets ceci : <?$_SESSION["test"] = "test"; ?> Ensuite, tu créées une autre page que tu vas appeler "test.php" et dedans tu mets ceci : <img src="" /><? ech $_SESSION["test"]; ?> Appele ensuite la page test.asp directement. Au première affichage rien d'anormal mais quand on actualise, le mot "test" apparait à l'écran. Il va chercher la page index par défaut.... Bizarre comme truc. Je n'étais jamais tombé sur ce bug... Portekoi
cktoon Posté 14 Juin 2006 Auteur Posté 14 Juin 2006 (modifié) Salut, je n'ai pas la possibilité de tester en .asp, mais c'est bien le même phénomène que j'ai rencontré ... Tu me "rassures" quelque part : le bug existe, je ne suis pas seule à l'avoir vu Avis à la populace : quand vous testez vos scripts, préférez <img src="nimportequoi" /> à <img src="" /> ou risquez de perdre les pédales. On vous aura prévenus /edit/ Euh du coup, ce post aurait peut-être plus sa place sur une section php... Modifié 14 Juin 2006 par cktoon
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant