Avatar billede Maaads Nybegynder
16. maj 2010 - 18:46 Der er 3 kommentarer

Problemer med opdatering i databasen via formular

Goddag Eksperter

Jeg er desværre kommet lidt i problemer i forbindelse med, at jeg skal have min ASP-kode til at opdatere nogle få felter via en enkel kode. Jeg vil i den forbindelse gerne have lidt hjælp, så på forhånd mange tak for jeres tid - og hjælp.

Første del af min kode ser således ud:
<%
if request.querystring("_UpdateUser") = "Gimoworld" then
%>
                    <%
firstname= replace(Request.Form("firstname"), "'", "''")
lastname= replace(Request.Form("lastname"), "'", "''")
relationship= replace(Request.Form("relationship"), "'", "''")
country= replace(Request.Form("country"), "'", "''")
sex= replace(Request.Form("sex"), "'", "''")
Net.Execute("UPDATE users SET (firstname,lastname,country,relationship,sex)values('" & firstname & "', '" & lastname & "', '" & country & "', '" & relationship & "', '" & sex & "')")
%>
Avatar billede janmanden Nybegynder
16. maj 2010 - 19:00 #1
Du opdaterer uden WHERE, hvilket vel har den konsekvens at alle users bliver overskrevet med samme data.

Så husk lige at få et id med fra formen. Hvis du opretter en ny user så behøver du ikke et id, men så skal querien også se anderledes ud da du skal bruge INSERT INTO.

Dernæst så indsætter du data uden at tjekke længden af input. Hvis du længde på inputs i form felter der matcher længden af felterne betyder det dog ikke så meget.

Jeg ville egentlig anbefale dig at bruge recordset instedet for connection, men hvis du laver noget filtrering så er det vel også fint.
Avatar billede Maaads Nybegynder
16. maj 2010 - 19:16 #2
Mange tak for hjælpen, men har stadig problemer efter, at jeg har indsat "Where" inklusiv session id :)

Min nye kode ser således ud:
<%
if request.querystring("_UpdateUser") = "Gimoworld" then
%>
                    <%
firstname= replace(Request.Form("firstname"), "'", "''")
lastname= replace(Request.Form("lastname"), "'", "''")
relationship= replace(Request.Form("relationship"), "'", "''")
country= replace(Request.Form("country"), "'", "''")
sex= replace(Request.Form("sex"), "'", "''")
Net.Execute("UPDATE users WHERE id='" & session("brugerid") & "' (firstname,lastname,country,relationship,sex)values('" & firstname & "', '" & lastname & "', '" & country & "', '" & relationship & "', '" & sex & "')")
%>
Avatar billede janmanden Nybegynder
16. maj 2010 - 19:38 #3
SessionID.. Nå du mener bare at du har gemt et id i session.. Puha, der var min hjerne lige ved at gå i selvsving. Er ID et tal eller en tekst??

Desuden så har du lavet det forkert, hvis du ville bruge session id så skal det stå til sidst sådan her:

ID er en tekst string:

Net.Execute("UPDATE users (firstname,lastname,country,relationship,sex)values('" & firstname & "', '" & lastname & "', '" & country & "', '" & relationship & "', '" & sex & "') WHERE id='" & Session("brugerid") & "'")

ID er et tal (integer/long/autoid):

Net.Execute("UPDATE users (firstname,lastname,country,relationship,sex)values('" & firstname & "', '" & lastname & "', '" & country & "', '" & relationship & "', '" & sex & "') WHERE id=" & Session("brugerid"))

Alternativt med et recordset kunne du gøre det som, her forudsat at id ligger som et element i formularen dog med begge, hehe:

id = 0
If Session("id") <> "" Then
    id = Session("id")
ElseIf Request.Form("id") <> "" Then
    id = Request.Form("id")
End If

If Not (isNumeric(id) And Len("" & id) > 0 And True) Then
    id = 0
End If

SQL = "SELECT * FROM users WHERE id=" & id
Fields = Array("firstname","lastname","country","relationship","sex")

Set RS = Server.CreateObject("ADODB.Recordset")
RS.CursorType = 1
RS.LockType = 3
RS.ActiveConnection = Net
RS.Source = SQL
RS.Open()

If RS.EOF Then
    RS.AddNew
End If

For Each Field In Fields
    If RS(Field).Type < 200 Then
        RS(Field) = Left(Request.Form(Field), RS(Field).DefinedSize)
    Else
        RS(Field) = Request.Form(Field)
    End If
Next

Fields = Empty

RS.Update
RS.Close
Set RS = Nothing
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester