Just nu i M3-nätverket
Gå till innehåll

Problem med att redigera gb-inlägg


hellomoto

Rekommendera Poster

Hej igen. Jag håller fortfarande på med en admin-sida till en gb. Nu har jag försökt göra en sida där man kan redigera inläggen. Fast det funkar inte så bra. Med nuvarande kod får jag upp felmeddelandet

 

Microsoft VBScript runtime error '800a000d'

Type mismatch

line 27

<input type="text" name="fornamn" value="<%=ObjRS("strFornamn")%>">

 

 

Tacksam för hjälp!

 

 

På sidan där man ser alla inlägg har jag länken

Response.Write "<A HREF='redigera.asp?action=redigera=ja&deltID=" & objRs("deltId") & "'>Redigera</A>"

 

som går till redigera-sidan

Dim strSQL, objRs, Connect
 if Request.Querystring("redigera") = "ja" Then

 Set Connect = Server.CreateObject("ADODB.Connection")
 Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("/db/anmalan.mdb")

 strSQL = "UPDATE tblDeltagare SET strFornamn,strEfternamn,strAdress,strPostnr,strPostort,strTelehem,strMobil,strEpost,strDans,strOvrigt,kursid,deltID WHERE deltID =" & CInt(Request.Querystring("deltID"))
 Connect.Execute(strSQL)

 End if

 

och formuläret

<form method="post" action="redigera.asp?action=redigera=ja&deltID= & objRs("deltId") & ">
F&ouml;rnamn:
 <input type="text" name="fornamn" value="<%=ObjRS("strFornamn")%>"> 
 Efternamn: <input type="efternamn" name="rubrik" value="<%=rs2("strEfternamn")%>"><br>
<input type="text" name="epost" value="<%=ObjRS("strEpost")%>"><br>
Dans:
<select name="dans" id="dans" onChange="MM_jumpMenu('parent',this,0)">
 <%  RecSet.MoveFirst() %>
     <%  Do Until RecSet.Eof %>

   <option value="<% =ObjRs("deltID") %>"><% =ObjRs("strKursnamn") %></option>

<%  RecSet.MoveNext
 Loop
 RecSet.Close
 Set RecSet= nothing
 Connect.Close
 Set Connect = nothing
%> 
</select><br>
&Ouml;vrigt:
<textarea name="ovrigt"><%=ObjRS("strOvrigt")%></textarea>
<input type="submit" value="Spara &auml;ndringar">
</form>

 

Länk till kommentar
Dela på andra webbplatser

  • Svars 50
  • Skapad
  • Senaste svar

Prova att lägga din END IF efter formuläret.

 

Om redigera inte är "ja" så skapar du inget recordset därför kan di inte använda ObjRS("strFornamn") i formuläret som kommer därefter.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Hmmm... ja det ser inte helt genomtänkt ut när jag kollar lite närmare. Inte minst din update-sats.

Jag utgår från att formuläret inte ligger i redigera.asp utan på en egen sida.

 

redigera.asp bör väl se ut ungefär såhär:

[log]

[MÄRK]<%[/MÄRK]
   [color="#006400"]'Enkel funktion för att formatera en sträng och ta bort lite skadliga tecken[/color]
   [color="#0000ff"]Function[/color] sqlTxt(str)
      str=[color="#0000ff"]Trim[/color](str)
      str=[color="#0000ff"]Replace[/color](str, [GRÅ]"'"[/GRÅ], [GRÅ]""[/GRÅ])
      str=[color="#0000ff"]Replace[/color](str, [GRÅ]","[/GRÅ], [GRÅ]""[/GRÅ])
      str=[color="#0000ff"]Replace[/color](str, [GRÅ]"&"[/GRÅ], [GRÅ]""[/GRÅ])
      str=[color="#0000ff"]Replace[/color](str, [GRÅ]"|"[/GRÅ], [GRÅ]""[/GRÅ])
      str=[color="#0000ff"]Replace[/color](str, [GRÅ]""[/GRÅ][GRÅ]""[/GRÅ], [GRÅ]""[/GRÅ])   
      sqlTxt=str
   [color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

[color="#0000ff"]If[/color] [b]Request[/b]([GRÅ]"redigera"[/GRÅ]) = [GRÅ]"ja"[/GRÅ] [color="#0000ff"]Then[/color]
   [color="#006400"]' Här bör du kolla indatan. Dvs så att man fyllt i[/color]
   [color="#006400"]' de fält som är obligatoriska samt skydda dig mot [/color]
   [color="#006400"]' SQL-injection och annat otyg.[/color]
   [color="#006400"]' När du gjort detta sätter du alltOk=True.[/color]
   [color="#006400"]' Nedan en förenklad variant med extra koll på förnamnet[/color]
   deltID=sqlTxt([color="#0000ff"]Replace[/color]([b]Request[/b].Querystring([GRÅ]"deltID"[/GRÅ]), [GRÅ]"'"[/GRÅ], [GRÅ]""[/GRÅ]))
   fornamn=sqlTxt([b]Request[/b]([GRÅ]"fornamn"[/GRÅ]))
   efternamn=sqlTxt([b]Request[/b]([GRÅ]"efternamn"[/GRÅ]))
   epost=sqlTxt([b]Request[/b]([GRÅ]"epost"[/GRÅ]))
   dans=sqlTxt([b]Request[/b]([GRÅ]"dans"[/GRÅ]))
   ovrigt=sqlTxt([b]Request[/b]([GRÅ]"ovrigt"[/GRÅ]))

   [color="#0000ff"]If[/color] fornamn=[GRÅ]""[/GRÅ] [color="#0000ff"]Then[/color] 
      alltOk=[color="#0000ff"]False[/color]
      missing=[GRÅ]"fornamn"[/GRÅ]
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

   [color="#0000ff"]If[/color] alltOk [color="#0000ff"]Then[/color]
      [color="#006400"]' Om allt är ok (indatakontrollen ovan) så uppdaterar du posten.[/color]
      [color="#0000ff"]Set[/color] conn = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])
      connStr = [GRÅ]"Provider=Microsoft.Jet.OLEDB.4.0; Data Source="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"../db/anmalan.mdb"[/GRÅ])
      conn.open connStr

      strSQL = [GRÅ]"UPDATE tblDeltagare SET "[/GRÅ]&_
      [GRÅ]"strFornamn='"[/GRÅ]&fornamn&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"strEfternamn='"[/GRÅ]&efternamn&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"strEpost='"[/GRÅ]&epost&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"strDans='"[/GRÅ]&dans&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"strOvrigt='"[/GRÅ]&ovrigt&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"WHERE deltID ="[/GRÅ] & deltID
      conn.[color="#0000ff"]Execute[/color](strSQL)

      [color="#006400"]'Ange [GRÅ]"rätt"[/GRÅ] sida att skicka användaren till när fältet har uppdaterats (byt ut default.asp till lämplig sida)[/color]
      nextPage=[GRÅ]"default.asp"[/GRÅ]
   [color="#0000ff"]Else[/color]
      [color="#006400"]'Skicka tillbaks användaren till formulärsidan med ett meddelande om vad som är fel. (byt ut myForm.asp till lämplig sida)[/color]
      nextPage=[GRÅ]"myForm.asp?formerror=true&missing="[/GRÅ]&missing
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[color="#0000ff"]Else[/color]
   [color="#006400"]'Om man inte kommit från formuläret, dvs att Request([GRÅ]"redigera"[/GRÅ]) INTE är = [GRÅ]"ja"[/GRÅ] (byt ut default.asp till lämplig sida)[/color]
   nextPage=[GRÅ]"default.asp"[/GRÅ]
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

[b]Response[/b].Redirect([GRÅ]"default.asp"[/GRÅ])
[MÄRK]%>[/MÄRK]

[/log]Sedan kan du på din formulärsida ta emot formerror och missing för att visa användaren om/vad som fyllts i fel eller saknas.

 

Observera att databasfälten nedan ej är uppsatta i ditt formulär och därför inte "kan" uppdateras i skriptet ovan.

strAdress

strPostnr

strPostort

strTelehem

strMobil

kursid

Lägg till fält för dem i ditt formulär och sedan i redigera.asp enligt samma mönster som de andra.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2006-11-21 00:21:14 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Jag hade tänkt ha formuläret i samma, men det är alltså bättre att ha en egen sida för det? Om vi hoppar över formerror-funktionen så länge, hur ska jag egentligen skriva för att få det att funka?

 

Länk till kommentar
Dela på andra webbplatser

Det beror ju lite på hur du tänkt att det ska fungera...

 

Klart att du kan ha formuläret och skriptet som tar emot data från det och uppdaterar databasen i samma fil. Själv gillar jag att ha det så för att få färre filer att jobba med.

 

Listningen av inlägg fungerar?

I så fall så ska du i redigera-länken skicka med en querystring som talar om för redigera.asp att du vill se formuläret. T.ex.

[b]Response[/b].Write([GRÅ]"<A HREF="[/GRÅ][GRÅ]"redigera.asp?action=edit&deltID="[/GRÅ] & objRs([GRÅ]"deltId"[/GRÅ]) & [GRÅ]""[/GRÅ][GRÅ]">Redigera</A>"[/GRÅ])

 

Då borde redigera.asp se ut ungefär så här:[log]

[MÄRK]<%[/MÄRK]
   [color="#006400"]'Enkel funktion för att formatera en sträng och ta bort lite skadliga tecken[/color]
[color="#0000ff"]Function[/color] sqlTxt(str)
   str=[color="#0000ff"]Trim[/color](str)
   str=[color="#0000ff"]Replace[/color](str, [GRÅ]"'"[/GRÅ], [GRÅ]""[/GRÅ])
   str=[color="#0000ff"]Replace[/color](str, [GRÅ]","[/GRÅ], [GRÅ]""[/GRÅ])
   str=[color="#0000ff"]Replace[/color](str, [GRÅ]"&"[/GRÅ], [GRÅ]""[/GRÅ])
   str=[color="#0000ff"]Replace[/color](str, [GRÅ]"|"[/GRÅ], [GRÅ]""[/GRÅ])
   str=[color="#0000ff"]Replace[/color](str, [GRÅ]""[/GRÅ][GRÅ]""[/GRÅ], [GRÅ]""[/GRÅ])
   sqlTxt=str
[color="#0000ff"]End[/color] [color="#0000ff"]Function[/color]

deltID=sqlTxt([color="#0000ff"]Replace[/color]([b]Request[/b].Querystring([GRÅ]"deltID"[/GRÅ]), [GRÅ]"'"[/GRÅ], [GRÅ]""[/GRÅ]))


[color="#0000ff"]If[/color] [b]Request[/b]([GRÅ]"action"[/GRÅ]) = [GRÅ]"edit"[/GRÅ] [color="#0000ff"]Then[/color]

   strSQL=[GRÅ]"SELECT fornamn, efternamn, epost, dans, ovrigt FROM tblDeltagare WHERE deltID ="[/GRÅ] & deltID

   [color="#0000ff"]Set[/color] conn = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])
   connStr = [GRÅ]"Provider=Microsoft.Jet.OLEDB.4.0; Data Source="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"../db/anmalan.mdb"[/GRÅ])
   conn.open connStr 
   [color="#0000ff"]Set[/color] RS=conn.[color="#0000ff"]Execute[/color](strSQL)
   [color="#0000ff"]If[/color] [color="#0000ff"]Not[/color] RS.EOF [color="#0000ff"]Then[/color]
   fornamn=RS([GRÅ]"fornamn"[/GRÅ])
   efternamn=RS([GRÅ]"efternamn"[/GRÅ])
   epost=RS([GRÅ]"epost"[/GRÅ])
   dans=RS([GRÅ]"dans"[/GRÅ])
   ovrigt=RS([GRÅ]"ovrigt"[/GRÅ])
   [MÄRK]%>[/MÄRK]
   <form method=[GRÅ]"post"[/GRÅ] action=[GRÅ]"?action=update"[/GRÅ]>
      Här lägger du [color="#0000ff"]In[/color] aktuell info som ovan hämtats från databasen i ditt formulär...
      Förnamn: <input type=[GRÅ]"text"[/GRÅ] name=[GRÅ]"fornamn"[/GRÅ] value=[GRÅ]"<%=fornamn%>"[/GRÅ]>
      etc...
   </form>
   [MÄRK]<%[/MÄRK]
   [color="#0000ff"]Else[/color]
      [b]Response[/b].Write([GRÅ]"Hittade inte det du letade efter i databasen..."[/GRÅ])
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]   
   [color="#0000ff"]Set[/color] RS=[color="#0000ff"]Nothing[/color]

   conn.close
   [color="#0000ff"]Set[/color] conn=[color="#0000ff"]Nothing[/color]
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

[color="#0000ff"]If[/color] [b]Request[/b]([GRÅ]"action"[/GRÅ]) = [GRÅ]"update"[/GRÅ] [color="#0000ff"]Then[/color]


   [color="#006400"]' Här bör du kolla indatan. Dvs så att man fyllt i[/color]
   [color="#006400"]' de fält som är obligatoriska samt skydda dig mot[/color]
   [color="#006400"]' SQL-injection och annat otyg.[/color]
   [color="#006400"]' När du gjort detta sätter du alltOk=True.[/color]
   [color="#006400"]' Nedan en förenklad variant med extra koll på förnamnet[/color]
   fornamn=sqlTxt([b]Request[/b]([GRÅ]"fornamn"[/GRÅ]))
   efternamn=sqlTxt([b]Request[/b]([GRÅ]"efternamn"[/GRÅ]))
   epost=sqlTxt([b]Request[/b]([GRÅ]"epost"[/GRÅ]))
   dans=sqlTxt([b]Request[/b]([GRÅ]"dans"[/GRÅ]))
   ovrigt=sqlTxt([b]Request[/b]([GRÅ]"ovrigt"[/GRÅ]))

   [color="#0000ff"]If[/color] fornamn=[GRÅ]""[/GRÅ] [color="#0000ff"]Then[/color]
      alltOk=[color="#0000ff"]False[/color]
      missing=[GRÅ]"fornamn"[/GRÅ]
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

   [color="#0000ff"]If[/color] alltOk [color="#0000ff"]Then[/color]
      [color="#006400"]' Om allt är ok (indatakontrollen ovan) så uppdaterar du posten.[/color]
      [color="#0000ff"]Set[/color] conn = [b]Server[/b].[color="#0000ff"]CreateObject[/color]([GRÅ]"ADODB.Connection"[/GRÅ])
      connStr = [GRÅ]"Provider=Microsoft.Jet.OLEDB.4.0; Data Source="[/GRÅ] & [b]Server[/b].MapPath([GRÅ]"../db/anmalan.mdb"[/GRÅ])
      conn.open connStr

      strSQL = [GRÅ]"UPDATE tblDeltagare SET "[/GRÅ]&_
      [GRÅ]"strFornamn='"[/GRÅ]&fornamn&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"strEfternamn='"[/GRÅ]&efternamn&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"strEpost='"[/GRÅ]&epost&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"strDans='"[/GRÅ]&dans&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"strOvrigt='"[/GRÅ]&ovrigt&[GRÅ]"', "[/GRÅ]&_
      [GRÅ]"WHERE deltID ="[/GRÅ] & deltID
      conn.[color="#0000ff"]Execute[/color](strSQL)

      conn.close
      [color="#0000ff"]Set[/color] conn=[color="#0000ff"]Nothing[/color]

      [color="#006400"]'Ange [GRÅ]"rätt"[/GRÅ] sida att skicka användaren till när fältet har uppdaterats (byt ut default.asp till lämplig sida)[/color]
      nextPage=[GRÅ]"default.asp"[/GRÅ]
   [color="#0000ff"]Else[/color]
      [color="#006400"]'Skicka tillbaks användaren till formulärsidan med ett meddelande om vad som är fel. (byt ut myForm.asp till lämplig sida)[/color]
      nextPage=[GRÅ]"?action=edit&formerror=true&missing="[/GRÅ]&missing
   [color="#0000ff"]End[/color] [color="#0000ff"]If[/color]

[b]Response[/b].Redirect(nextPage)
[color="#0000ff"]End[/color] [color="#0000ff"]If[/color]
[MÄRK]%>[/MÄRK]

[/log]Anpassa och gör färdigt koden ovan så att det ser ut/fungerar så som du tänkt dig.

 

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2006-11-21 10:31:22 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Ja det funkar precis som det ska att visa inläggen, och att radera dem. Det är bara redigera-funktionen jag blir snurrig av :( Tänker jag helt fel eller är jag på rätt väg?

 

Dim strSQL, objRs, Connect, strFornamn, strEfternamn, strAdress, strPostnr, strPostort, strTelehem, strMobil, strDans, strOvrigt, strAntal, strPlatser, kursid, deltID

' Adress till databasen
 Set Connect = Server.CreateObject("ADODB.Connection")
 Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("/db/anmalan.mdb")

' Skapar variabler så det blir lättare att se.
 strFornamn = Request.Form("fornamn")
 strEfternamn = Request.Form("efternamn")
 strAdress = Request.Form("adress")
 strPostnr = Request.Form("postnr")
 strPostort = Request.Form("postort")
 strTelehem = Request.Form("telehem")
 strMobil = Request.Form("mobil")
 strEpost = Request.Form("epost")
 strDans = Request.Form("dans")
 strOvrigt = Request.Form("ovrigt")
 kursID = CInt(Request.Form("dansid"))

 if Request.Querystring("redigera") = "ja" Then

 strSQL = "UPDATE tblDeltagare SET strFornamn,strEfternamn,strAdress,strPostnr,strPostort,strTelehem,strMobil,strEpost,strDans,strOvrigt,kursid,deltID WHERE deltID =" & CInt(Request.Querystring("deltID"))
 Connect.Execute(strSQL),,128
 Dim RecSet
 strSQL = "SELECT strAntal, strPlatser FROM tblKurs"
 Set RecSet = Connect.Execute(strSQL)

 If CInt(RecSet("strPlatser")) = CInt(RecSet("strAntal")) Then
 Else
   SQL = "UPDATE tblKurs SET strAntal=" & CInt(RecSet("strAntal")) + 1 & " WHERE id=" & kursid
   Connect.Execute SQL,,128
 End If

' Stänger databasen.
 Connect.Close
 Set Connect = nothing

 Response.redirect "visa.asp"

 

Länk till kommentar
Dela på andra webbplatser

Tänker jag helt fel
Eh, nja... har du kollat på min kod över huvudtaget?

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Vilka databasgrejer är det som inte är med i min kod? Det mesta finns med anser jag, men du måste naturligtvis komplettera med de fät som jag skrev om i tidigare inlägg. Dessutom är den update-sats du skrivit (båda gångerna) helt uppåt väggarna...

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

ok, nu är jag med på banan igen. Har lagt in din kod och ändrat till mina värden. Formuläret syns med rätt uppgifter i. När jag trycker på spara står det

 

Syntax error (missing operator) in query expression 'deltID ='.

line 23

 

23: conn.open connStr

 

Länk till kommentar
Dela på andra webbplatser

Ok, du verkar inte skicka med deltID, lägg till ett dolt input-fält med detta.

<input type="hidden" name="deltID" value="<%=deltID%>">

 

OCH ändra

deltID=sqlTxt(Replace(Request.Querystring("deltID"), "'", ""))

till

deltID=sqlTxt(Replace(Request("deltID"), "'", ""))

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Och du anropar (redigera-länken alltså) sidan med ett deltID?

redigera.asp?action=edit&deltID=XXXX

Och rätt värden dyker upp i formuläret?

Och deltID-inputfältet ligger mellan form-taggarna?

Och du ändrade

deltID=sqlTxt([color="#0000ff"]Replace[/color]([b]Request[/b].Querystring([GRÅ]"deltID"[/GRÅ]), [GRÅ]"'"[/GRÅ], [GRÅ]""[/GRÅ]))

till

deltID=sqlTxt([b]Request[/b]([GRÅ]"deltID"[/GRÅ]))

 

Hur ser din kod ut nu för redigera.asp? Obs! Använd LOG-funktionen

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2006-11-21 12:48:55 av Cluster]

Länk till kommentar
Dela på andra webbplatser

[log]<%

'Enkel funktion för att formatera en sträng och ta bort lite skadliga tecken

Function sqlTxt(str)

str=Trim(str)

str=Replace(str, "'", "")

str=Replace(str, ",", "")

str=Replace(str, "&", "")

str=Replace(str, "|", "")

str=Replace(str, """", "")

sqlTxt=str

End Function

 

deltID=sqlTxt(Replace(Request("deltID"), "'", ""))

 

 

If Request("action") = "edit" Then

 

strSQL="SELECT strFornamn,strEfternamn,strAdress,strPostnr,strPostort,strTelehem,strMobil,strEpost,strOvrigt,kursid,deltID FROM tblDeltagare WHERE deltID =" & deltID

 

Set conn = Server.CreateObject("ADODB.Connection")

connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/db/anmalan.mdb")

conn.open connStr

Set RS=conn.Execute(strSQL)

If Not RS.EOF Then

fornamn=RS("strfornamn")

efternamn=RS("strefternamn")

adress=RS("stradress")

postnr=RS("strpostnr")

postort=RS("strpostort")

telehem=RS("strtelehem")

mobil=RS("strmobil")

epost=RS("strepost")

ovrigt=RS("strovrigt")

 

%>

 

<form method="post" action="?action=update">

<input type="hidden" name="deltID" value="<%=deltID%>">

F&ouml;rnamn: <input type="text" name="fornamn" value="<%=RS("strFornamn")%>"> Efternamn: <input type="efternamn" name="rubrik" value="<%=RS("strEfternamn")%>"><br>

Adress: <input type="text" name="adress" value="<%=RS("strAdress")%>"><br>

Postort: <input type="text" name="postort" value="<%=RS("strPostort")%>"><br>

Postnr: <input type="text" name="postnr" value="<%=RS("strPostnr")%>"><br>

Telehem: <input type="text" name="telehem" value="<%=RS("strTelehem")%>"><br>

Mobil: <input type="text" name="mobil" value="<%=RS("strMobil")%>"><br>

E-post: <input type="text" name="epost" value="<%=RS("strEpost")%>"><br>

&Ouml;vrigt:<textarea name="ovrigt"><%=RS("strOvrigt")%></textarea><br />

<input name="submit" type="submit" id="submit" value="Spara &auml;ndringar">

</form>

 

<%

Else

Response.Write("Hittade inte det du letade efter i databasen...")

End If

Set RS=Nothing

 

conn.close

Set conn=Nothing

End If

 

If Request("action") = "update" Then

 

 

' Här bör du kolla indatan. Dvs så att man fyllt i

' de fält som är obligatoriska samt skydda dig mot

' SQL-injection och annat otyg.

' När du gjort detta sätter du alltOk=True.

' Nedan en förenklad variant med extra koll på förnamnet

strfornamn=sqlTxt(Request("fornamn"))

strefternamn=sqlTxt(Request("efternamn"))

stradress=sqlTxt(Request("adress"))

strpostnr=sqlTxt(Request("postnr"))

strpostort=sqlTxt(Request("postort"))

strtelehem=sqlTxt(Request("telehem"))

strmobil=sqlTxt(Request("mobil"))

strepost=sqlTxt(Request("epost"))

strovrigt=sqlTxt(Request("ovrigt"))

 

If strfornamn="" Then

alltOk=False

missing="fornamn"

End If

 

If alltOk Then

' Om allt är ok (indatakontrollen ovan) så uppdaterar du posten.

Set conn = Server.CreateObject("ADODB.Connection")

connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("../db/anmalan.mdb")

conn.open connStr

 

strSQL = "UPDATE tblDeltagare SET "&_

"strFornamn='"&fornamn&"', "&_

"strEfternamn='"&efternamn&"', "&_

"strAdress='"&adress&"', "&_

"strPostnr='"&postnr&"', "&_

"strPostort='"&postort&"', "&_

"strTelehem='"&telehem&"', "&_

"strMobil='"&mobil&"', "&_

"strEpost='"&epost&"', "&_

"strDans='"&dans&"', "&_

"strOvrigt='"&ovrigt&"', "&_

"WHERE deltID =" & deltID

conn.Execute(strSQL)

 

conn.close

Set conn=Nothing

 

'Ange "rätt" sida att skicka användaren till när fältet har uppdaterats (byt ut default.asp till lämplig sida)

nextPage="visa.asp"

Else

'Skicka tillbaks användaren till formulärsidan med ett meddelande om vad som är fel. (byt ut myForm.asp till lämplig sida)

nextPage="?action=edit&formerror=true&missing="&missing

End If

 

Response.Redirect(nextPage)

End If

%>[/log]

 

Länk till kommentar
Dela på andra webbplatser

Ok, lite småfel åtgärdade. Dock så borde det fungera.

[log]

<%
'Enkel funktion för att formatera en sträng och ta bort lite skadliga tecken
Function sqlTxt(str)
str=Trim(str)
str=Replace(str, "'", "")
str=Replace(str, ",", "")
str=Replace(str, "&", "")
str=Replace(str, "|", "")
str=Replace(str, """", "")
sqlTxt=str
End Function

deltID=sqlTxt(Request("deltID"))

If Request("action") = "edit" Then
  strSQL="SELECT strFornamn, strEfternamn, strAdress, "&_
     "strPostnr, strPostort, strTelehem, strMobil, "&_
     "strEpost, strOvrigt, kursid "&_
     "FROM tblDeltagare WHERE deltID =" & deltID
  Set conn = Server.CreateObject("ADODB.Connection")
  connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("/db/anmalan.mdb")
  conn.open connStr
  Set RS=conn.Execute(strSQL)
  If Not RS.EOF Then
     fornamn=RS("strfornamn")
     efternamn=RS("strefternamn")
     adress=RS("stradress")
     postnr=RS("strpostnr")
     postort=RS("strpostort")
     telehem=RS("strtelehem")
     mobil=RS("strmobil")
     epost=RS("strepost")
     ovrigt=RS("strovrigt")
     %>
     <form method="post" action="?action=update">
        F&ouml;rnamn: <input type="text" name="fornamn" value="<%=fornamn%>">
        Efternamn: <input type="text" name="efternamn" value="<%=efternamn%>"><br>
        Adress: <input type="text" name="adress" value="<%=adress%>"><br>
        Postort: <input type="text" name="postort" value="<%=postort%>"><br>
        Postnr: <input type="text" name="postnr" value="<%=postnr%>"><br>
        Telehem: <input type="text" name="telehem" value="<%=telehem%>"><br>
        Mobil: <input type="text" name="mobil" value="<%=mobil%>"><br>
        E-post: <input type="text" name="epost" value="<%=epost%>"><br>
        &Ouml;vrigt:<textarea name="ovrigt"><%=ovrigt%></textarea><br>
        <input type="hidden" name="deltID" value="<%=deltID%>">
        <input type="submit" value="Spara &auml;ndringar">
     </form>
     <%
  Else
     Response.Write("Hittade inte det du letade efter i databasen...")
  End If
  Set RS=Nothing
  conn.close
  Set conn=Nothing
End If

If Request("action") = "update" Then
  ' Här bör du kolla indatan. Dvs så att man fyllt i
  ' de fält som är obligatoriska samt skydda dig mot
  ' SQL-injection och annat otyg.
  ' När du gjort detta sätter du alltOk=True.
  ' Nedan en förenklad variant med extra koll på förnamnet
  strfornamn=sqlTxt(Request("fornamn"))
  strefternamn=sqlTxt(Request("efternamn"))
  stradress=sqlTxt(Request("adress"))
  strpostnr=sqlTxt(Request("postnr"))
  strpostort=sqlTxt(Request("postort"))
  strtelehem=sqlTxt(Request("telehem"))
  strmobil=sqlTxt(Request("mobil"))
  strepost=sqlTxt(Request("epost"))
  strovrigt=sqlTxt(Request("ovrigt"))

  If strfornamn="" Then
     alltOk=False
     missing="fornamn"
  End If

  If alltOk Then
     ' Om allt är ok (indatakontrollen ovan) så uppdaterar du posten.
     Set conn = Server.CreateObject("ADODB.Connection")
     connStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Server.MapPath("../db/anmalan.mdb")
     conn.open connStr
     strSQL = "UPDATE tblDeltagare SET "&_
        "strFornamn='"&strfornamn&"', "&_
        "strEfternamn='"&strefternamn&"', "&_
        "strAdress='"&stradress&"', "&_
        "strPostnr='"&strpostnr&"', "&_
        "strPostort='"&strpostort&"', "&_
        "strTelehem='"&strtelehem&"', "&_
        "strMobil='"&strmobil&"', "&_
        "strEpost='"&strepost&"', "&_
        "strOvrigt='"&strovrigt&"', "&_
        "WHERE deltID =" & deltID
     conn.Execute(strSQL)
     conn.close
     Set conn=Nothing

     'Ange "rätt" sida att skicka användaren till när fältet har uppdaterats (byt ut default.asp till lämplig sida)
     nextPage="visa.asp"
  Else
     'Skicka tillbaks användaren till formulärsidan med ett meddelande om vad som är fel. (byt ut myForm.asp till lämplig sida)
     nextPage="?action=edit&formerror=true&missing="&missing
  End If
  Response.Redirect(nextPage)
End If
%>

[/log]

 

Anropar du (redigera-länken alltså) sidan med ett deltID?

redigera.asp?action=edit&deltID=XXXX

 

Dyker rätt värden upp i formuläret?

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

 

 

Denna rad är dock fel om det är ngt fel i formuläret:

nextPage="?action=edit&formerror=true&missing="&missing

du skickar inte med DeltID

 

Sen måste man väl skriva hela sidnamnet för att det skall fungera med en response.redirect ?!

 

Länk till kommentar
Dela på andra webbplatser

Denna rad är dock fel[...]
Helt rätt Jonas! Missade det.

Ändra alltså

nextPage=[GRÅ]"?action=edit&formerror=true&missing="[/GRÅ]&missing

till

nextPage=[GRÅ]"?action=edit&deltID="[/GRÅ]&deltID&[GRÅ]"formerror=true&missing="[/GRÅ]&missing

 

Sen måste man väl skriva hela sidnamnet för att det skall fungera
Nej. Använder man bara ? så blir det samma sida.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2006-11-21 13:23:55 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Ja, rätt värden syns. Länken till formuläret är

 

Response.Write("<A HREF=""redigera.asp?action=edit&deltID=" & objRs("deltId") & """>Redigera</A>")

 

När jag trycker på spara nu får jag meddelandet

Microsoft VBScript runtime  error '800a000d'
Type mismatch: 'missing'
redigera.asp, line 104 

 

line 104:

nextPage="?action=edit&formerror=true&missing="

 

Länk till kommentar
Dela på andra webbplatser

Det beror på felaktiga radbrytningar... MEN ändra enligt mitt svar till Jonas_Bo så ska det funka.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

Microsoft VBScript compilation  error '800a03ea'
Syntax error
redigera.asp, line 103

 

103:

nextPage="?action=edit&formerror=true&missing="&

 

Länk till kommentar
Dela på andra webbplatser

Det skall fortfarande vara

nextPage=[GRÅ]"?action=edit&deltID="[/GRÅ]&deltID&[GRÅ]"formerror=true&missing="[/GRÅ]&missing

och ALLT det måste vara på samma rad

 

Kopiera härifrån:

http://eforum.kicks-ass.net/download/redigera.asp.txt'>http://eforum.kicks-ass.net/download/redigera.asp.txt

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2006-11-21 13:33:00 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Nu har jag ändrat det. Då kommer nästa

 

Microsoft JET Database Engine error '80040e14'
Syntax error (missing operator) in query expression 'deltID =3formerror=true'.
redigera.asp, line 23 

 

23:

Set RS=conn.Execute(strSQL)

 

Länk till kommentar
Dela på andra webbplatser

Bortse från mitt förra inlägg.

 

Har kopierat o klistrat in från din länk. Då blir det

 

Microsoft JET Database Engine error '80040e14'
Syntax error in UPDATE statement.
redigera.asp, line 95 

 

95:

conn.Execute(strSQL)

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...