[asp]Probleme d'update d'1 champs d'1 ligne dans une table!

Probleme d'update d'1 champs d'1 ligne dans une table! [asp] - ASP - Programmation

Marsh Posté le 23-06-2003 à 19:38:44    

edit:
bon g prefere edité le titre plutot que de crée un nouveau topic
mon prob se trouve tous en bas
 
 
 
 
Salut :hello:
Voila j'ai afficher dans un tableau le contenu d'une table et a droite de chaque ligne , j'y est mis une case a coché (checkbox) ayant pour valeur le CodeProduit (du produit decrit dans la ligne) toutes ses checkbox ont pour nom "sup_prod"
Ce tableau est a l'interieur d'une formulaire  et je renvoie l'action de ce formulaire sur une page asp qui va se chargé de supprimer dans la base de donnée toutes toutes les lignes coché
Seulement voila le prob(sans doute simple mais pas pour moi):
g juste fait un test avec cette requete dans ma page asp apelé apres le submit et j'y est mis ça:

Citation :


req="select * from Produits where CodeProd='"&request.form("sup_prod")&"'  
 
set rs=cnx.execute(req)
 
 while not rs.eof
 response.write rs(2) 'affichage du troisieme champ
 wend
 
rs.close
 


 
et bien sur , rien ne s'affiche sur la page puisque mon request.form("sup_prod" ) contient plusieur valeur ( qd je fais un response.write(request.form("sup_prod" )), voila ce que ça ecrit :

Citation :

014 ,015 ,016

ce qui correspond au CodeProduit des produit que g coché dans mon formulaire
donc si quelqu'un pourrais m'aider  , j'aimerais juste savoir comment faire pour supprimi
er plusieur ligne a partir d'un tel formulaire (checkbox)
 
merci
 
ps:je sens que magicbuzz va encore passer par la :d


Message édité par Zobman le 27-06-2003 à 18:06:55

---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 23-06-2003 à 19:38:44   

Reply

Marsh Posté le 24-06-2003 à 09:21:19    

Bon j'ai trouvé comment recupéré une a une les valeur des case coché et maintenant g un autre probleme:
 
voici mon code:
 

Citation :

<!-- #include file="../connexion.asp" -->
 
 
<%  
dim z 'nombre de case coché
z= request.form("prod_supp" ).count 'denombrement des case coché dans le formulaire
 
'on test si au moins une case a été coché  
 
if  request.form("prod_supp" ).count then
 
 dim i  
 
  for i=1 to z
 
' on récupère la valeur cochée dans la variable "val" pour s'en servir dans la requete
 
   val=request.form("prod_supp" )(i)
 
 
   req=" select *  from Produits where CodeProd='"&val&"' "
 
   set rs=cnx.execute(req)
   
 
   response.write rs(2)'on affiche juste le champ 2 pour tester
   response.write"<br>"
 
 
 
  next
 
 
else response.write "<center>Aucune case n'est cochée!!"
 
end if
 
%>


et qd cette apge est apelé voici l'erreur affiché par IIS:
 

Citation :

ADODB.Field error '80020009'  
 
BOF ou EOF est égal à True ou l'enregistrement actuel a été supprimé. L'opération demandée nécessite un enregistrement actuel.  
 
/3asite/cms/supp_prod.asp, line 0


 
personne ne sait??


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 24-06-2003 à 10:42:05    

vire le "set rs=" devant le cnx.execute.
 
une requête delete est muette dont cnx.execute ne retournera rien.

Reply

Marsh Posté le 24-06-2003 à 12:49:57    

MagicBuzz a écrit :

vire le "set rs=" devant le cnx.execute.
 
une requête delete est muette dont cnx.execute ne retournera rien.


ben g meme pas testé de delete pour l'instant :??:juste un select ..
ensuite g auparant deja utiliser un delete avec un set rs et ça marchais nickel...enfin je vais le faire qd meme
@+++


Message édité par Zobman le 24-06-2003 à 12:58:54

---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 24-06-2003 à 15:04:39    

bon g fais des test et voila les resultat:
 
qd je fais:  

Citation :


req=" delete   from Produits where CodeProd ='001' "
 
 cnx.execute(req)


 
et ça marche nickel , mon produit 001 est bien suprimer
 
mais qd je fais  
 

Citation :


req=" delete   from Produits where CodeProd ='"&val&"' "
 
 cnx.execute(req)


ça marche ke dale!mon produit est tjs la et pourtant g meme pas d'erreur de IIS
 
Mon champ produit est de type texte (de la forme 001)
qd je selectionne un le produit dont le code est 001 et que je fais un response.write val , y a bien affciher 001
 
donc j'y pipe que dalllllleeeeeeeee fo bien ecrire commeça :

Citation :


'"&val&"'

du texte nan?
 
 
du coup ,  g changé le type de mon CodeProd et je l'ai mis en Numerique et biazarement ça fonctione sauf que je dois ecrire ma requete comme ça:

Citation :


req=" delete   from Produits where CodeProd = "&val&" "
 
 cnx.execute(req)


 
a ce que je sache , le type de la valeur d'une checkbox ne peut etre modifier apres l'envoie du formulaire ??!!!!
Bref si qq1 comprend ce disfonctionement???
Vraiment c incroyable qd meme!j'ecrit '001' ça marche mais  
'"&val&"' ça marche po!!!!!!


Message édité par Zobman le 24-06-2003 à 15:06:35

---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 24-06-2003 à 19:26:03    

response.write req
 
mais-ça avant le cnx.execute et poste ta requête.
 
à tous les coups, val est vide, ou mal formatté (1 à la place de 001 ?)


Message édité par MagicBuzz le 24-06-2003 à 19:26:43
Reply

Marsh Posté le 25-06-2003 à 06:55:21    

effectivemnt tu avais raison
 
suite a ton response.write req
 
voila ce que g eu en selectionnant le produit 018:
"delete from Produits where CodeProd = 18"
 
y manque donc le 0 c pour ça que ça plantait
comment je fais alors?
je test dabord le code prod est >99 et donc je laisse comme ça ou si c <99 je rajoute un 0 devant????
 
t'as un idée?
merci


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 25-06-2003 à 15:19:35    

si y'a un endroit où tu fait un "cint" de ta variable, alors vire-le.
 
Si ça marche toujours pas, pas de solution miracle :
 

req = "select * from Produits where CodeProd='" & right("000" & cstr(request.form("sup_prod" )), 3) & "'"


 
Ca va forcer le code à 3 chiffres, en remettant les 0 facultatifs devant.

Reply

Marsh Posté le 25-06-2003 à 16:50:14    

bon g utiliser la method bourine et ça marche
au passage g enlevé la conversion en chaine (cstr(val)) , car j'avais deja testé avant et cela ne changeais rien , et effectivement ça marche sans
 
encore merci
 
bon g encore un petit souci maintenant:
voila apres mon avoir choisi les ligne a supprimer , je renvoie avant de suprimer les ligne , le formulaire vers une page asp (confirm.asp) pour demander la confirmation de la supression des ligne dans ka table
et du coup , dans mon supp.asp , je peux plus recupéré "val" de la meme maniere c a dire avec un request.form("choix_supp" )
du coup  voila ce que j'ai fais dans ma page intermediaire de confirmation (puisque elle , elle a acces a mes donné du formulaire)
 

Citation :


<!-- confirm.asp -->
<% response.cookies("choix_supp" )=request.form("choix_supp" ) %>


 
ensuite qd j'appel mon fichier supp.asp je recupere val de cette maniere ( z est deja recupéré et a une valeur numerique)

Citation :


<!-- supp.asp -->
<%
for i =1 to z
val=request.cookies("choix_supp" )(i)
....'requete utilisant val
next
%>


 
ça me sort une erreur qui me dit "index hors limite"
 j'ai l'impression que l'indexation  ne  marche pas avec les cookies !(pas comme avec les request.form en ts cas)
c vrai ou bien y a une methode special??
 
en effet , avant avec ma boucle (exemple)
 (qd j'apelais supp.asp juste apres le formualaire) je faisais:

Citation :

<%
for i =1 to z
val=request.form("choix_supp" )(i)
......'requete utilsant val
next
%>


et ça marchais
 
une idée???(au passage g cherché pendant 2 heure...)
 
merci encore pour ton toute ton aide :jap:
 
 
 
 


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 25-06-2003 à 20:32:21    

Toi, t'es un GROS bourrin ;)
 
Deux solutions s'offrent à toi :
 
1) Transmettre ton request.form en request.querystring
2) Regénérer un formulaire.
 
Première solution :
 
Ta page :
 
 
Etes-vous sûr de vouloir supprimer les lignes sélectionnée ?
 
Oui     Non
 
 
Avec sur "Oui" le lien ci-dessous :
 

<a href="supp.asp?<%=request.form%>">Oui</a>


 
 
Seconde solution : même page, mais avec deux boutons dans un formulaire et ça dans le code :
 
 
Code du forumlaire :
 

<form action="supp.asp" method="POST">
<input type="hidden" name="val" value="<%=request.form("val" )%>">
<input type="submit" value="Oui" name="do">&nbsp;<input type="submit" value="Non" name="do">
</form>


 
Et dans supp.asp :
 

if request.form("do" ) = "Oui" then
   ' Code de suppression
end if
 
response.redirect "liste.asp"

Reply

Marsh Posté le 25-06-2003 à 20:32:21   

Reply

Marsh Posté le 25-06-2003 à 22:46:52    

ben en fait j'avais testé les deux methode sauf que celle avec mon querystring merdais
j'avais egalement regenerer un formulaire (caché bien sur) mais ça merdais aussi!!!
je vais retester la methode du querystring
merci encore


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 25-06-2003 à 23:03:07    

bon finalement je me suis retesté ma methode avec la regeneration d'un formulaire et ça marche nikel
en fait j'avais oublié de precisé la method :d
je vais qd meme testé la method querystring car je l'utilise jamais
merci encore et a bientot......:d


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 26-06-2003 à 01:52:20    

Pour la méthode en querystring, n'oublie pas que récupérer les variables avec request.querystring au lieu de request.form ;)
 
Sinon, les querystring sont à éviter, car :
 
1) l'utilisateur les voit et peut les modifier à la main sans problème, ce qui peut aisément poser problème (c'est comme ça que je me débrouille pour accéder à des pages cachées sur certains sites à caractère pas trop avouable :ange:)
 
2) tu es limité en taille si les données sont trop longues
 
3) parfois ça pose problème pour récupérer des caractères dont l'encodage est spécial (si tu bosse sur une page en UTF-8 et que tu soumet un form avec des caractères en japonnais par exemple, y'a de grandes chances pour qu'au final tu récupère autrechose à la place)

Reply

Marsh Posté le 26-06-2003 à 06:51:01    

pour la securité c ce que j'avais lu sur des site
par contre le reste je savais pas po  
mais bon puisqu'il s'agit deja d'un acces reservé a l'administrateur (a ce propos j'aurrais besoin plus tard de ton aide pour mieux securisé cette acces justement)
 
merci encore
tschhhhhuuuusssssssss


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 26-06-2003 à 12:01:23    

hé hé encore un probleme!!
en fait , je viens de me rendre que l'indexation me marche uniquement qu'avec un request.form mais seulement dans la page appellé juste apres le formulaire ou on fais le choix
 
effectivement je peux uniquement supprimer une seul ligne et des que j'en selectionne plusieur ça marche po
 
g fais un test:
g coché 3 case
 
dans supp_confirm.asp:
 
<%=request.form("choix_supp" )(2)%>
ça affiche bien le codeprod du deuxieme produit coché
 
par contre  apres avoir fais  dans supp_confirm.asp:

Citation :


 
<form name="confirm_form" action="supp.asp" method="post">
<input type="hidden" name="val" value="<%=request.form("choix_supp" )%>">
<input type="submit" value="Continuer">  

)
 
qd je fais ça dans supp.asp
 
<%=request.form("val" )(2)%>
 
la ça me sort "index hors limite"
et en fait si je fais
<%=request.form("val" )(1)%> ça me sort 012,013,014
 
alors que si je fais dans supp_confirm.asp :
<%=request.form("choix_supp" )(1)%>
 
ça me sort uniquemnt 012
 
du coup je vais devoir faire une seul et unique page  
 
si tu vois l'erreur
merci
 
 
 


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 26-06-2003 à 13:40:28    

Bon finalement g reussi a resoudre le pb comme ça: (barbarerie inside :d)
 

Citation :


supp_confirm:asp
 
<%' attention c'est compliqué!!:
' en fait je suis obligé de mettre une clé au cookies qui correspondra a chaque valeur contenu dans le request.form("choix_supp" )
'car c'est la seul methode (que j'ai trouvé) pour pouvoir recupéré séparément chaque valeur dans supp.asp
'en effet on ne peux pas indexé un cookies (ex:request.cookies("cook" )(1) comme on indexe un request.form("chois_supp" )(1) )
'j'avais essayer de refaire passer le request.form("choix_supp" ) dans un forumlaire caché mais l'indexation ne marchais pas apres donc g opté pour cette methode
 
  for i=1 to  request.form("choix_supp" ).count
 
 ' je converti i en chaine car une clé doit etre de type chaine (sinon IIS me dit  sort une erreur "chaine attentdu" )
  response.cookies("val" )(cstr(i))=request.form("choix_supp" )(i)
   
  next
 
   %>
 


 
et dans supp.asp
 

Citation :

z=request.cookies("nb" ) ' recuperation du denombrement des case coché dans le formulaire
 
 
 
 dim i  
 for i=1 to z 'pour supprimer toutes les ligne cochées
   
 
' on récupère la valeur da la checkbox(i) coché et on la met  dans la variable "val" pour s'en servir dans la requete
 
val=request.cookies("val" )(i)
 
..instructionn....
 
end select
 
next
 
'tres important :
 
'je detruit le cookies a la fin de l'operation car sinon , lors d'une prochaine operation (si l'utilisateur
' oublié de supprimer une table et k'il decide de la suprimer ,les valeur deja presente dans le cookies  
'ne serront pas ecrasé ce qui fauseera l'operation
 
Response.cookies("val" ).expires= now()
 


Message édité par Zobman le 26-06-2003 à 13:41:52

---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 26-06-2003 à 14:35:57    

mais arrête de passer par les cookies :fou:
 
en plus, y'a la réponse dans ton système des cookies :
 
for i=1 to  request.form("choix_supp" ).count  
     response.write "<input type=""hidden"" name=""choix_supp"" value=""" & request.form("choix_supp" )(i) & """>"
next  
 
:o

Reply

Marsh Posté le 26-06-2003 à 15:52:47    

oula..je doute que ça marche...
enfin je vais qd meme testé ça mais g encore d'uatre partie a geré avant "d'optimiser le code"


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 26-06-2003 à 16:05:51    

bon je viens de tester et ça marche :o
d'ailleur je vais garder cette method , elle parait moins barbare :d


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 27-06-2003 à 18:49:01    

Bon MagicBuzz (je m'adresse directement a toi vu que t le seul a me repondre :d), g un nouveau , bizaare et tout dernier probleme
 
voila le topo
g crée dans la partie adminstrateur , une section pour modifier une ligne d'une table
et il se trouve que g un probleme avec UN seul  champs d'UNE seul ligne  , toute les autre ligne peuvent etre modifier sans prob
 
Voici:
 
voici ma requete pour modifier la ligne:

Citation :


<%  req=" update  Produits set CodeProd='"&request.form("codprod" )&"', PrixProd='"&request.form("prixprod" )&"', CodeCateg='"&request.form("codcateg" )&"', Desiprod='"&request.form("desiprod" )&"' where CodeProd='"&request.form("codprod_sov" )&"' "  
 
%>


au passage g fais un response.write req  (histoire de voir ce qui merdais mais je vois pas)
   
et donc voila le pb:
 
Le probleme survient avec la table Produits , avec le produit de codeprod 018 (ça c pas tro important  encore)
le champs qui pose probleme c le champ "Desiprod"
 
voici le champs "Desiprod" comme il est actuellement:
 
"ALIMENTATION FlexATX 230 WATTS - Micro format + câble d'alimentation"
 
dans mon formulaire de modification , je remet les ancienne valeur juste pour que l'administrateur vois ce qui a actuellement
et donc , le pb , c qd par exemple je ne modifie pas le champs desiprod et le laisse comme il est (c a dire ce qui a d'ecrit en gras plus haut)
VOici l'erreur que ça me sort (en haut g ecrit la requete)
 

Citation :


update Produits set CodeProd='018', PrixProd='63,3198 ?', CodeCateg='0' , Desiprod='ALIMENTATION FlexATX 230 WATTS - Micro format + câble d'alimentation' where CodeProd='018'  
 
 
Microsoft JET Database Engine error '80040e14'  
 
Erreur de syntaxe (opérateur absent) dans l'expression ''ALIMENTATION FlexATX 230 WATTS - Micro format + câble d'alimentation' where CodeProd='018''.  
 
/3asite/r2d2/cms/modifier.asp, line 26


 
par contre si je modie cette ligne et que j'ecrit autre chose a la place , alors aucune erreur tout marche
 
et le pire c que ça se produit uniquement avec cette ligne (le produit 018) et ce champs!
 
si par exemple je fais pareil avec le poduit 002 qui as dans son champs desiprod :
"Boîtier MCS 6039L + Ventilo - 300W - 4 baies 5"1/4 + 1 x 3"1/2"
 
(c a dire que je ne change pas son champs desiprod )
 
alors aucune erreur !!!
Mais si je copie le champs  desiprod du produit 018 et que je modifie le champ desirpod du produit 002  en celui du 018 (copier coller quoi ) et ben g la meme erreur !
 

Citation :

update Produits set CodeProd='002', PrixProd='61,6751 ?', CodeCateg='0' , Desiprod='ALIMENTATION FlexATX 230 WATTS - Micro format + câble d'alimentation' where CodeProd='002'  
 
Microsoft JET Database Engine error '80040e14'  
 
Erreur de syntaxe (opérateur absent) dans l'expression ''ALIMENTATION FlexATX 230 WATTS - Micro format + câble d'alimentation' where CodeProd='002''.  
 
/3asite/r2d2/cms/modifier.asp, line 26


 
DONC le probleme viens du champs desiprod du prod 018 :
"ALIMENTATION FlexATX 230 WATTS - Micro format + câble d'alimentation"
 
C QUOI CE BINSSSSSSS??????


Message édité par Zobman le 27-06-2003 à 18:50:00

---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 27-06-2003 à 19:50:54    


<%
function quote(str)
   if isNull(str) then
      quote = "null"
   else
      quote = "'" & replace(str, "'", "''" ) & "'"
   end if
end function
 
req= "update Produits " &_
     "set CodeProd = " & quote(request.form("codprod" )) & ", " &_
     "PrixProd = " & quote(request.form("prixprod" )) & ", " &_
     "CodeCateg = " & quote(request.form("codcateg" )) & ", " &_
     "Desiprod = " & quote(request.form("desiprod" )) & " " &_
     "where CodeProd = " & quote(request.form("codprod_sov" ))
%>


 
 
PS: et évite de mettre entre code les champs de type numérique (float et number), c'est parfois source ce problème. Mais là, ton problème venait du fait qu'il faut échapper le caractère "'" dans les string, sinon le SGBD croit que c'est la fin de la chaîne. En SQL, le caractère d'échappement de "'" est "''" (deux ' et non pas un " )


Message édité par MagicBuzz le 27-06-2003 à 19:51:44
Reply

Marsh Posté le 27-06-2003 à 20:08:19    

ET ta fonction quote je l'apple qd ET ou au juste????


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 28-06-2003 à 09:53:47    

petit up car je vois tjs pas ou et comment appellé cette fonction :cry:


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 28-06-2003 à 12:30:25    

Hé ben...
 
Quote permet de mettre des quotes simples autour d'une chaîne, et d'échapper les quotes qu'elle contient.
 
Donc tu l'appelles pour toutes les chaînes que tu passes à toutes tes requêtes.

Reply

Marsh Posté le 28-06-2003 à 18:44:07    

encore merci , je viens de tester , c  nikel ça marche


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 30-06-2003 à 08:14:56    

Putain g encore un pb avec ces fichu quote!
le pire c que le prob est le meme , j'utilise bien la fonction quote mais ça marche po
voila le pb:
 
je veux supprimer un ligne d'une table dont l'identifiant(champs pack dans ma table) est  
"val"
val vaut dans cette ligne:"gsqd'grg"
 
dans ma requete pour supprimer cette ligne voila ce que j'ai ecrit:
 

Citation :


 req="delete from config where Pack ='"&quote(val)&"' "


 
puisque val contenais une quote j'ai appelé la fonction pour l'echapper
j'ai fais un response.write da ma requete et voila ce qui a d'ecrit:

Citation :

[quote]delete from config where Pack ='gsqd'


 
tu m'explique please :d
 
ps: au passage c normal si j'ai laissé les quote dans l'expression de ma requete :'"&quote(val)&"' , puisque je les ai est viré dans la foncion quote


Message édité par Zobman le 30-06-2003 à 08:17:06

---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le 30-06-2003 à 10:41:01    

Ne met pas de quotes autour de l'appel de quote, puisqu'elle en met déjà :sarcastic:
 
req = "delete from config where Pack = "&quote(val)&" "
 
 
Sinon, c chelou ce qu'il t'as écrit... T'as bien recopier (copier/coller) ma fonction ?
 
Parceque normalement, il autait du écrire ça ton response.write :
 
delete from config where Pack = ''gsqd''grg''  
 
Alors que toi tu veux :
 
delete from config where Pack = 'gsqd''grg'

Reply

Marsh Posté le 30-06-2003 à 11:02:04    

MagicBuzz a écrit :

Ne met pas de quotes autour de l'appel de quote, puisqu'elle en met déjà :sarcastic:
req = "delete from config where Pack = "&quote(val)&" "
 
 
Sinon, c chelou ce qu'il t'as écrit... T'as bien recopier (copier/coller) ma fonction ?
 
Parceque normalement, il autait du écrire ça ton response.write :
 
delete from config where Pack = ''gsqd''grg''  
 
Alors que toi tu veux :
 
delete from config where Pack = 'gsqd''grg'


Pour les quote , comme je te l'ai dis , j'ai modifier ton fonction et fais en sorte k'el ne mette pas de quote , comme ça je les laisse dans la requete
sinon c vrai que c chelou et g pas fais de faute
de toute façon , je vais modifier ma table car un libelé de pack comem identifiant c naze
je vais crée un code_pack composé des 3 premiere letre du pack +le typ
@++


---------------
La réalité n'est qu'une illusion créée par le manque de Drogue....
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed