Comportement zarb de mon code. Un grand merci d'avance.

Résolu
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005 - 25 mai 2005 à 12:22
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005 - 26 mai 2005 à 14:22
Bonjour,

Dans le cadre d'un projet de vente en ligne, j'ai un comportement bizarre de mon code, lors de l'enregistrement de la commande dans notre Base de Données.
Voici ce que je fais :

- Je teste que toutes les variables de session sont présentes avant de débuter la transaction.
- Je récupère les infos importantes sur le client, les produits, etc...
- Je parcours mon caddie et j'enregistre ligne par ligne dans la base
- Une fois le caddie parcouru, j'enregistre l'entête de ma commande
- Si tout se passe bien, je valide la transaction
- J'efface toutes les variables de session pour éviter les doublons (voir pb plus bas)
- Je fais une redirection vers une page de confirmation

Au niveau du système, la commande s'engistre correctement.
Le gros problème, c'est au niveau de l'affichage dans le navigateur.
On dirait que la page se charge deux fois, et ne redirige pas vers la page de confirmation. Du coup, la commande s'engistre donc correctement, la transaction est validée, les variables de session sont effacées, la page est rechargée, et du coup ça m'affiche sur ma page "aucune variable de session, impossible de continuer" au lieu de rediriger vers la confirmation.

Aurais-je oublié un détail, une propriété ? Ou alors si quelqu'un connait un tutoriel sur la façon dont est exécuté l'asp par IIS 6.0 je sais pas...

Merci d'avance pour votre précieuse aide !

y(oYo)

15 réponses

lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005
26 mai 2005 à 11:57
Re re re re,

J'AI TROUVE UNE SOLUTION !
Une solution de bidouillage, - mais bon, la prog c'est aussi ça parfois :-p

Voici donc ce que j'ai fait :
Au moment où je valide l'enregistrement de ma commande dans ma base :
- Juste avant cette fameuse redirection qui marche une fois sur 10, je déclare une variable de session "confirmationok", et je lui affecte "OK".
- Je laisse ma redirection, pour le cas ou ça lui prendrait de marcher tout seul...
- En tout début de page, et avant de faire quoi que ce soit, je teste la présence de la variable de session "confirmationok". Si elle est à OK, je la supprime, puis je fais ma redirection.

Cela ne m'explique toujours pas pourquoi le code est exécuté deux fois la plupart du temps, mais au final, tout se passe comme je le veux....
Si quelqu'un aurait un éclair de génie pour corriger le problème initial je suis preuneur, sinon ma solution me convient...

Merci à ceux qui ont participé à ce topic.

y(oYo)
3
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
25 mai 2005 à 14:08
salut,



il faudrait voir le code, parce que sinon...on peut pas faire grand chose



Tu peux mettre un petit extrait...







Nurgle
C'est une grande folie que de vouloir être sage tout seul !
0
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005
25 mai 2005 à 14:44
Hum, je ne voulais pas rentrer dans les détails, pour avoir des avis plutôt théoriques concernant l'interprétation de l'asp par le serveur, mais bon, voici une version light :

<%@ Language=VBScript %>
<!--#include virtual="/commun/ctrl_acces/ctrl.asp"-->
<!--#include virtual="/commun/libs/inscription.asp"-->
<%
Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
OBJdbConnection.Open Application("DSN")
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>toto</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="langue" content="français">
<!--#include virtual="/commun/css/style_menus.css"-->
<!--#include virtual="/commun/js/lib_standard.js"-->
</head>



<!--#include virtual="/commun/pages/menuhaut.htm"-->
<!--#include virtual="/commun/pages/menugauche.htm"-->,
<table width="100%" border="0" cellspacing="0" cellpadding="0">
----, </td>
,
<table width="100%" border="0" cellspacing="0" cellpadding="0">
----,
&nbsp;&nbsp;
</td>

<% ' Gestion de panier


' Définition du nombre d'articles dans le panier
' 20 c'est le nombre maximal d'articles que l'on peut mettre dans le panier
' pour le deuxième chiffre, voici les colonnes :
' 0 : Code de l'article
' 1 : Designation de l'article
' 2 : Prix de vente HT
' 3 : Le poids de l'article
' 4 : La quantité pour cet article
' 5 : Référence Feeder
' 6 : Référence constructeur
' 7 : Warning sur la quantité. Valeur : oui/non
Dim pdt(20,8)
Dim nombreArti, poids, total
poids = 0
total = 0


' Au chargement de la page, on déclare un tableau en local, que l'on alimente avec la variable de session correspondante, et que l'on enregistre à nouveau en fin de fichier
' Cela permet de facilement détecter si le produit est toujours en stock et en quantité, ou de supprimer un produit vide si besoin est
if session("nbArt") > 0 then
Dim sortir
nombreArti = session("nbArt")
for i = 0 to nombreArti-1 ' On parcourt les produits un par un
sortir = "non"
' On interroge à la volée les articles rentrés pour voir s'il sont tjs dispo en quantité voulue
Set rs_dispo_art = server.createobject("ADODB.Recordset")
rs_dispo_art.Open "***REQUETE DE RECUP DES INFOS PRODUIT***", OBJdbConnection , 3, 3
if rs_dispo_art.recordcount=1 then ' Si l'article est trouvé dans la bdd
' On teste si la quantité dispo n'est pas inférieure à la quantité sélectionnée dans le caddie, variation qui peu se produire en temps réel...
if (rs_dispo_art("stomag")<session("pdt")(i,4)) then
response.Redirect "panier.asp"
sortir="oui"
end if


if sortir="non" then
' On ajoute normalement
pdt(i,0)=Session("pdt")(i,0) : pdt(i,1)=Session("pdt")(i,1) : pdt(i,2)=Session("pdt")(i,2) : pdt(i,3)=Session("pdt")(i,3) : pdt(i,4)=Session("pdt")(i,4) : pdt(i,5)=Session("pdt")(i,5) : pdt(i,6)=Session("pdt")(i,6) : pdt(i,7)=Session("pdt")(i,7)
poids = poids + (CDbl(pdt(i,3))*CDbl(pdt(i,4)))
total = total + (CDbl(pdt(i,2))*CDbl(pdt(i,4)))
end if
end if
rs_dispo_art.close
set rs_dispo_art = nothing
next
else ' Sinon, on se contente d'initialiser à 0 la valeur du nombre d'articles
nombreArti = 0
end if


' Ajout du DROPSHIPMENT
if session("dropship")="OUI" then
Set rs_info_prod = server.createobject("ADODB.Recordset")
rs_info_prod.Open "***REQUETE DE RECUP DES INFOS PRODUIT***", OBJdbConnection , 3, 3
If rs_info_prod.Recordcount = 1 then ' On teste s'il faut afficher le tableau de produits
nombreArti = nombreArti + 1 ' On incrémente le nombre d'articles tout court
pdt(nombreArti-1,0)=rs_info_prod("codea") : pdt(nombreArti-1,1)=rs_info_prod("designation") : pdt(nombreArti-1,2)=rs_info_prod("pvente") : pdt(nombreArti-1,3)=0 : pdt(nombreArti-1,4)=1 : pdt(nombreArti-1,5)=rs_info_prod("codea") : pdt(nombreArti-1,6)=rs_info_prod("reffou") : pdt(nombreArti-1,7)="non"
total = total + CDbl(pdt(nombreArti-1,2))
end if
rs_info_prod.close
set rs_info_prod = nothing
end if


' Mémorisation des nouveaux paramètres : produits, nombre de produits, quantité des produits
session("pdt") = pdt
session("nbArt") = nombreArti


' On teste maintenant si nous disposons de toutes les variables nécessaires à la transaction :
' Infos sur le guguss, infos sur le panier, infos sur les adresses de livraison et de facturation.
if request.cookies("codeclifeeder")<>"" and request.Cookies("codeguguss")<>"" and session("nbArt")<>"" and CInt(session("nbArt"))>0 and session("poids_commande")<>"" and session("poids_commande")<200 and session("prix_livraison")<>"" and request.form("select_fac")<>"" and request.form("select_fac")<>"" and session("totalHT_commande")<>"" then
Dim cref
Dim ctpiece
ctpiece = "CE"


Dim livrephone
Dim numadr
Dim nom
Dim adr1
Dim adr2
Dim adr3
Dim cp
Dim ville
Dim pays
Dim adrlivraison
Dim lnom
Dim ladr1
Dim ladr2
Dim ladr3
Dim lcp
Dim lville
Dim lpays
Dim karti
Dim ktotdep
Dim ktotarr
Dim kpump
Dim kfrmp1
Dim kfrmp2
Dim kfrmp3
Dim kfrmp4
Dim kprixpub
Dim kbla
Dim kdev
Dim kcours
Dim kdpachat
Dim pvente
Dim commercial_client


' On récupère les infos sur le Client
Set rs_infos_client = server.createobject("ADODB.Recordset")
rs_infos_client.Open "***REQUETE DE RECUP DES INFOS CLIENT***", OBJdbConnection , 3, 3
if rs_infos_client.recordcount = 1 then
commercial_client = rs_infos_client("commercial")
end if
rs_infos_client.close
set rs_infos_client = nothing


' On récupère toutes les infos sur l'adresse de facturation
Set rs_adresse_fac = server.createobject("ADODB.Recordset")
rs_adresse_fac.Open "***REQUETE DE RECUP DES INFOS ADRESSE FACTURATION***", OBJdbConnection , 3, 3
if rs_adresse_fac.recordcount = 1 then
numadr = rs_adresse_fac("numadr")
nom = rs_adresse_fac("nom")
adr1 = rs_adresse_fac("adr1")
adr2 = rs_adresse_fac("adr2")
adr3 = rs_adresse_fac("adr3")
cp = rs_adresse_fac("cp")
ville = rs_adresse_fac("ville")
pays = rs_adresse_fac("pays")
end if
rs_adresse_fac.close
set rs_adresse_fac = nothing


' On récupère toutes les infos sur l'adresse de livraison
Set rs_adresse_liv = server.createobject("ADODB.Recordset")
rs_adresse_liv.Open "***REQUETE DE RECUP DES INFOS ADRESSE LIVRAISON***", OBJdbConnection , 3, 3
if rs_adresse_liv.recordcount = 1 then
adrlivraison = rs_adresse_liv("numadr")
lnom = rs_adresse_liv("nom")
ladr1 = rs_adresse_liv("adr1")
ladr2 = rs_adresse_liv("adr2")
ladr3 = rs_adresse_liv("adr3")
lcp = rs_adresse_liv("cp")
lville = rs_adresse_liv("ville")
lpays = rs_adresse_liv("pays")
livrephone = rs_adresse_liv("phone")
end if
rs_adresse_liv.close
set rs_adresse_liv = nothing


' On peut commencer les enregistrements ;)
OBJdbConnection.Begintrans

' Réservation du numéro de la commande
incnum("CDK")
selnum_CDK = selnum("CDK")


' On récupère la référence de facture personnalisée, sauf s'il ne l'a pas spécifié. Dans ce cas on enregistre le num de facture dans cref
if request.form("txt_cref")<>"" then
cref = request.form("txt_cref")
else
cref = selnum_CDK
end if


nombreArti = session("nbArt") ' On récupère le nombre d'articles
for i = 0 to nombreArti-1
' Puis on insère ligne par ligne

' Il faut récupérer les infos sur le produit courant
Set rs_infos_produit = server.createobject("ADODB.Recordset")
rs_infos_produit.Open "***REQUETE DE RECUP DES INFOS PRODUIT***", OBJdbConnection , 3, 3
if rs_infos_produit.recordcount = 1 then
karti = rs_infos_produit("codea")
ktotdep = rs_infos_produit("pretact")
ktotarr = rs_infos_produit("vendu")
kpump = rs_infos_produit("pump")
kfrmp1 = rs_infos_produit("frmp1")
kfrmp2 = rs_infos_produit("frmp2")
kfrmp3 = rs_infos_produit("frmp3")
kfrmp4 = rs_infos_produit("frmp4")
kprixpub = rs_infos_produit("prixpub")
kbla = rs_infos_produit("designation")
kdev = rs_infos_produit("devise")
kcours = rs_infos_produit("fixing")
kdpachat = rs_infos_produit("dpachat")
pvente = rs_infos_produit("pvente")
end if
rs_infos_produit.close
set rs_infos_produit = nothing


' Réservation du numéro de ligne
incnum("LCK")
selnum_LCK = selnum("LCK")
SQL_INSERT_LCK = "***REQUETE D INSERTION DE LA LIGNE DE COMMANDE***", OBJdbConnection, 3, 1
next


' Une fois les lignes enregistrée, on insert l'entête de la commande.
SQL_INSERT_CDK = "***REQUETE D INSERTION D UNE COMMANDE***"
Set rs_insert_cdk = server.createobject("ADODB.Recordset")
rs_insert_cdk.Open SQL_INSERT_CDK,OBJdbConnection, 3, 1

if err.number <> 0 then ' On teste les erreurs, pour commiter ou rollbacker (ouais, je sais ça se dit pas, mais bon on est entre nous...)
OBJdbConnection.RollbackTrans %>
Une erreur s'est produite, il n'est pas s&ucirc;r de continuer cette transaction.

Si le probl&egrave;me persiste, contactez nous &agrave; l'adresse webmaster@toto.fr.

<% else ' Tout est OK
if Ucase(lpays)="FRANCE" or Ucase(lpays)="FR" then ' Mais on regarde quand même si on doit livrer en France ou à Monaco
OBJdbConnection.CommitTrans
Session.Contents.RemoveAll ' On vide le contenu de toutes les variables de session, panier, etc ...
response.redirect "confirmation-ok.asp"
else %>
Nous livrons uniquement la France ou &agrave; Monaco, d&eacute;sol&eacute;.

&lt; Retour

<% end if
end if
else %>
Une erreur s'est produite, il n'est pas s&ucirc;r de continuer cette transaction.

Plus aucune variable de session disponible.

<% end if %>
</td>
<td width="1" bgcolor="#053B93"></td>
<td width="2"></td>
</tr>
<tr>
<td height="1"></td>
<td height="1" bgcolor="#053B93"></td>
<td height="1" bgcolor="#053B93"></td>
<td height="1" bgcolor="#053B93"></td>
<td height="1"></td>
</tr>
</table></td>
<td width="140" valign="top"><!--#include virtual="/commun/pages/menudroite.asp"--></td>
</tr>
</table>
<!--#include virtual="/commun/pages/frisebas.htm"-->

</html>
<% OBJdbConnection.close %>

Voilà je sais pas si ça vous aide à comprendre...
Tout se passe comme si le serveur exécute deux fois ce code, puis renvoie le code html généré par la deuxième exécution...
Comprends pas, snif !!

Merci.

y(oYo)
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
25 mai 2005 à 15:02
il y a quelques petites choses bizarres :



déjà ça :

if (rs_dispo_art("stomag")<session("pdt")(i,4)) then
response.Redirect "panier.asp"
sortir="oui"
end if



ton 'sortir = "oui" ' ne sera jamais exécuté vu que tu rediriges l'utilisateur juste avant !! donc je vois pas trop l'intérêt...

(et si j'ai bien vu il n'y a aucun autre endroit dans ton code à tu
mets à "oui" cette valeur, pourtant tu fais un 'if' sur la valeur de
cette variable )



je vais encore regarder mais je crois que tout le reste ce ne sont que des problèmes d'optimisations pas très importants... (qu'on verra plus tard)




Nurgle
C'est une grande folie que de vouloir être sage tout seul !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005
25 mai 2005 à 15:14
Très juste :)
J'éai du rajouter le redirect après coup, et j'ai eu la flemme d'enlerver les tests...

Toujours est-il que mon redirect suivant :
OBJdbConnection.CommitTrans
Session.Contents.RemoveAll ' On vide le contenu de toutes les variables de session, panier, etc ...
response.redirect "confirmation-ok.asp"

N'est pas exécuté lui, car la commande est enregistrée en base, mais la page n'est pas redirigée à cet endroit...
Space...

y(oYo)
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
25 mai 2005 à 15:25
la page que tu viens de me montrer ne s'appellerais pas "panier.asp" par hasard ?

car dans ce cas la redirection que je t'ai montré fait se recharger la page mais sans les résultats des formulaires.



Donc ta condition :

if
request.cookies("codeclifeeder")<>"" and
request.Cookies("codeguguss")<>"" and session("nbArt")<>""
and CInt(session("nbArt"))>0 and session("poids_commande")<>""
and session("poids_commande")<200 and
session("prix_livraison")<>"" and
request.form("select_fac")<>"" and
request.form("select_fac")<>"" and
session("totalHT_commande")<>"" then
Dim cref

...

...

n'est pas validée et donc jamais ta transaction n'est effectuée,
et jamais tu n'auras la redirection vers la page de confirmation.



(en tout cas c'est de là que viens le problème : la page est rechargée
pour une raison ou une autre et ça supprime ce que renvoi les
formulaires (du genre Request.Form("select_fac")) non ? )




Nurgle
C'est une grande folie que de vouloir être sage tout seul !
0
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005
25 mai 2005 à 15:38
Non non, ce n'est pas la page panier.asp, mais la page de validation de la commande.
La redirection vers le panier est activée dans le cas ou un produit ne serait plus dispo au moment ou l'on charge la page...

y(oYo)
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
25 mai 2005 à 15:44
ta condition, là :

if
request.cookies("codeclifeeder")<>"" and
request.Cookies("codeguguss")<>""

and session("nbArt")<>""
and CInt(session("nbArt"))>0 and session("poids_commande")<>""


and session("poids_commande")<200 and
session("prix_livraison")<>"" and
request.form("select_fac")<>""

and
request.form("select_fac")<>"" and
session("totalHT_commande")<>"" then



mets plutôt :



if
request.cookies("codeclifeeder")<>"" and
request.Cookies("codeguguss")<>""
and CInt(session("nbArt"))>0 and session("poids_commande")<>""


and CInt(session("poids_commande"))<200 and
session("prix_livraison")<>"" and
request.form("select_fac")<>""
and
session("totalHT_commande")<>"" then





et réessaye...








Nurgle
C'est une grande folie que de vouloir être sage tout seul !
0
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005
25 mai 2005 à 15:53
Non, ça marche toujours pas.
De toute façon, je ne pense pas que ce test soit incréminé, c'est autre chose.
Mon problème est plutôt vicieux, car la redirection marche une fois sur deux...

Des fois ça redirige convenablement, et des fois le code asp est exécuté deux fois sur le serveur pui il me retourne le résultat de la 2eme execution...

Grrr

y(oYo)
0
cs_Nurgle Messages postés 1642 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 28 avril 2011 4
25 mai 2005 à 16:16
dans ce cas il faut plutôt voir du côté de la "transaction"...



les

OBJdbConnection.Begintrans

et les autres trucs dans ce genre là...



j'y connais pas grand chose mais je vais me renseigner...




Nurgle
C'est une grande folie que de vouloir être sage tout seul !
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
25 mai 2005 à 22:14
Salut,

ton test
if Ucase(lpays)="FRANCE" or Ucase(lpays)="FR"

essayes:
if Trim("" & Ucase(lpays)="FRANCE") or Trim("" & Ucase(lpays)="FR")

De plus, tu ne fermes pas ta connection:

OBJdbConnection.CommitTrans
OBJdbConnection.close
Session.Contents.RemoveAll ' On vide le contenu de toutes les variables de session, panier, etc ...
set OBJdbConnection = nothing
response.redirect "confirmation-ok.asp"

faire de même en cas d'erreur (fermer la connection et la setter à nothing.)

Tu peux également essayer de renommer ton fichier confirmation-ok.asp en confirmationok.asp (pas sûr qu'il aime les "-").

Pour tester, tu peux également enlever ton response.redirect, et mettre un response.write "toto" pour voir si ton code arrive jusque là...

yopyop
0
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005
26 mai 2005 à 09:37
Remarque très pertiente sur la fermuture de la connexion !
Malheureusement, j'avais essayé avant d'afficher juste "commande enregistrée avec succès", et ça ne marchait pas.
C'est pourquoi je pensais que la redirection serait une solution plus radicale !
Je vais tout de même modifier le problème de la fermeture partout où ça peut se produire ;) Merci au passage !

Je vais quand même tester, ainsi que le nom de la page sans le tiret...

Grumph !

y(oYo)
0
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005
26 mai 2005 à 09:49
Hélas, marche po !

Comment c'est possible ça.
Et un réglage sur IIS ? ça peut pas faire ça ?
Il me manque peut être une instruction à déclarer en début de fichier, ou je ne sais quoi !

Je résume encore une fois mon problème pour raffraichir la mémoire :
Le code s'exécute deux fois côté serveur, et me renvoie l'html de la deuxième fois...
Donc, la commande s'enregistre bien dans ma BDD (première exécution), mais l'utilisateur voit à l'écran le message d'erreur (de la deuxième exécution) comme quoi y'a plus de variables de sessions, vu qu'elles ont été effacées à la première exécution...

Si c'est pas chelou comme problème ça...

Dans tous les cas, encore merci pour vos remarques.

y(oYo)
0
cs_Yopyop Messages postés 586 Date d'inscription lundi 7 janvier 2002 Statut Membre Dernière intervention 10 février 2010 1
26 mai 2005 à 14:02
salut,

petits commmentaires qui j'espère seront utiles:

1/
Apparemment tu ne livres pas en france mais tu laisses le choix du pays lors de la commande ... pourquoi ?
De plus, si le pays n'est pas FR - FRANCE, tu 'annules' la commande sans faire de rollback.

2/
Tu as un ENORME code et une gestion des erreurs à la fin de celui-ci (il me semble)

Celle-ci va te retourner la dernière erreur rencontrée (si je ne me trompe pas).
Tu devrais faire des check erreur à chaque étape importante de ton code.
Tu peux mettre On Error Goto 0 tout en haut de ta page pour voir s'il n'a pas d'autre erreur que tu ne catch pas avec ton code.
Ceci pourrait expliquer le comportement zarbi de ton applic.

Typiquement, pour une raison ou pour une autre, une erreur peut survenir entre ton (cf code en rouge)
If Err.Number <> 0
....
Else
If UCase(lPays)="FRANCE" or UCASE(lPays) = "FR" Then
objConnection.CommitTrans
Session.Contents.RemoveAll
Response.redirect "confirmation-ok.asp"
....

As-tu une response.buffer = true tout en haut de ta page ?

Pour ton problème de redirect il y a certainement une explication logique... mais pas facile de voir comme ca, sans être devant la machine de dév.
Je te suggère de mettre des response.write un peu partout pour voir ce qui cloche... NE LAISSE PAS TOMBER ...

3/
Tu testes le nombre d'articles commandés en haut de ta page
If Session("nbArt") > 0 Then
..
End If

Et ensuite tu poursuis l'enregistrement ...
Pourquoi ? Si le nombre d'article est 0 tu ne dois rien enregistrer, donc pas besoin de continuer non ?

4/
Ton dernier ELSE (affichage de l'erreur indiquant "Plus aucune variable session...") n'est pas exacte ...
En effet, tu peux également arriver au ELSE lorsque
Session("nbArt")<= 0
ou Session("poids_commande")>=200...
et bien d'autres raisons ....
Dans ces cas tu devrais indiquer un autre message.

Bref... pas facile de voir ce qui se passe comme ca....

Dernier conseil, lorsque tu récupères des valeurs, que ce soit en post ou en get, fais toujours un trim:
ex:
Dim sValue
sValue = Trim("" & Request.Form("maValeur"))
C'est très utile pour les comparaison de string ("TOTO" est différent de "TOTO " et de " TOTO")
et les conversions en valeurs numériques

Dim iValue
iValue = CInt(Trim("" & Request.Form("maValeur")))

a+
yopyop
0
lioledingue Messages postés 21 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 28 septembre 2005
26 mai 2005 à 14:22
D'ac, je vais optimiser tout ça....
Il y a pas mal de choses qui effectivement me semblent importantes dans tes remarques.
Je reviendrai alimenter ce topic si je trouve une solution definitive.

Merci !

y(oYo)
0
Rejoignez-nous