Aller au contenu

Pb à l'insertion de données et champ session


Sujets conseillés

Posté

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 autoincrement
session
ref
prix
soustotal

Si 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 nickel

Mais 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 ??????

Posté

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

Posté

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 :sick:

Posté

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

.

Posté

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....

Posté

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 ! :nonono:

J'y ai passé ma journée sur ce foutu truc, alors si vous avez un début d'explication, je prends :unsure: sinon je crois que je vais faire comme si ça ne m'étais pas arrivé tellement c'est hallucinant.

Posté

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...

Posté

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

Posté (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 :P

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 :rolleyes:

/edit/ Euh du coup, ce post aurait peut-être plus sa place sur une section php...

Modifié par cktoon

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...