Avatar billede per1291 Nybegynder
04. juli 2005 - 15:41 Der er 6 kommentarer og
1 løsning

Hvordan ændre en post i databasen?

Hej - jeg har fundet en ASP-kode, som giver mig adgang til at læse i en Access-database:

<%
Dim adoCon         'Database Connection Variable
Dim rsCheckUser     'Database Recordset Variable
Dim SQLtekst         'Database query sring
Dim BrugernavnDB     'Holds the user name

BrugernavnDB = Request.Form("Brugernavn")
strPassword = Request.Form("Password")

Set adoCon = Server.CreateObject("ADODB.Connection")
adoCon.Open "DBQ=" & Server.MapPath("db/Brugere.mdb") & ";pwd=007JamesBond;Driver={Microsoft Access Driver (*.mdb)}"

SQLtekst = "SELECT Password FROM Brugerliste WHERE Brugernavn = '" & BrugernavnDB &  "'"
Set rsCheckUser = adoCon.execute( SQLtekst )

If NOT rsCheckUser.EOF Then
    If rsCheckUser("Password") = strPassword Then
        Session("blnIsUserGood") = True
        Session.Timeout = 60
        Set adoCon = Nothing
        Set strCon = Nothing
        Set rsCheckUser = Nothing
        Response.Redirect"Velkomstside.asp?Brugernavn=" & BrugernavnDB
    End If
End If
       
Set adoCon = Nothing
Set strCon = Nothing
Set rsCheckUser = Nothing
Session("blnIsUserGood") = False
Response.Redirect"Ingen_adgang.htm"
%>

Funktionen tjekker, om det indtastede Brugernavn og Password passer sammen ifølge databasen - og viderestiller til den relevante side.

Jeg vil gerne udvide koden, sådan at den fundne post i databasen samtidig markeres. F.eks. derved at et felt ved navn "Visited" sættes="true".

Hvordan gør jeg det? Jeg har brug for den præcise kode, for jeg er ikke særlig fortrolig med ASP.

Hilsen  Per
Avatar billede pfp Nybegynder
04. juli 2005 - 18:18 #1
Hejsa,

Prøv nedenstående, det er ikke testet men det burde virke:

<%
Dim adoCon        'Database Connection Variable
Dim rsCheckUser    'Database Recordset Variable
Dim SQLtekst        'Database query sring
Dim BrugernavnDB    'Holds the user name

BrugernavnDB = Request.Form("Brugernavn")
strPassword = Request.Form("Password")

Set adoCon = Server.CreateObject("ADODB.Connection")
adoCon.Open "DBQ=" & Server.MapPath("db/Brugere.mdb") & ";pwd=007JamesBond;Driver={Microsoft Access Driver (*.mdb)}"

SQLtekst = "SELECT Password, BrugerID FROM Brugerliste WHERE Brugernavn = '" & BrugernavnDB &  "'"
Set rsCheckUser = adoCon.execute( SQLtekst )

If NOT rsCheckUser.EOF Then
    If rsCheckUser("Password") = strPassword Then
        Session("blnIsUserGood") = True

        ' find brugerens ID
        brugerId = rsCheckUser("BrugerID")
       
        ' gemmer noget tekst i feltet Visited
        SQL = "UPDATE Brugerliste SET Visited = 'true' WHERE BrugerID = " & brugerId
        adoCon.Execute(SQL)
       
        Session.Timeout = 60
        Response.Redirect"Velkomstside.asp?Brugernavn=" & BrugernavnDB
    End If
End If
       
Set adoCon = Nothing
Set strCon = Nothing
Set rsCheckUser = Nothing
Session("blnIsUserGood") = False
Response.Redirect"Ingen_adgang.htm"
%>

Som du kan se har i din første SQL sætning tilføjet "BrugerID" der hvor du udvælger fra databasen. Hvis brugeren er 'ok' opdateres hans profil med tekststrengen "true" i feltet visited.

Jeg har desuden fjernet de 3 linier hvor du sætter = nothing inde i if-sætningen...der er ingen grund til at gøre det flere gange.

..du bør måske nok også lukke din connection og dit recordset også.
Avatar billede per1291 Nybegynder
04. juli 2005 - 19:05 #2
Tak, jeg prøver. - Hilsen  Per
Avatar billede per1291 Nybegynder
04. juli 2005 - 19:35 #3
Feltet ved navn Visited er defineret som et tekstfelt.
Feltet Brugernavn er unikt, derfor burde denne formulering virke:

SQLtekst = "UPDATE Brugerliste SET Visited = 'true' WHERE Brugernavn = '" & BrugernavnDB &  "'"
adoCon.Execute( SQLtekst )

Men jeg får en fejlmelding, og nu sker der ikke nogen viderestilling.
Syntaksen må være forkert i en af linjerne.
Avatar billede per1291 Nybegynder
04. juli 2005 - 21:29 #4
Måske skal man slet ikke bruge SQL her.
Metoden kunne være:

Åbn tabellen Brugerliste.
Find den post hvor Brugernavn = 'BrugernavnDB'.
Gør denne post klar til redigering.
I denne post sættes feltet Visited='true'.
Posten opdateres.
Tabellen lukkes.
Avatar billede pfp Nybegynder
04. juli 2005 - 23:49 #5
Fremgangsmåden er rigtig nok, prøv at udskrive resultatet af din sql streng, ellers er det ikke nemt at finde fejlen..
Avatar billede per1291 Nybegynder
05. juli 2005 - 01:06 #6
pfp -> Nej hvor er jeg dum. (Vent et øjeblik, mens jeg går ud og hænger mig ...)

- Så, nu er jeg tilbage.

Din kode var korrekt. Men jeg spottede en lille fejl i din sidekommentar ("Jeg har desuden fjernet de 3 linier hvor du sætter = nothing inde i if-sætningen...der er ingen grund til at gøre det flere gange"). Linjerne efter en Redirect vil vistnok ikke blive udført, derfor lod jeg stædigt de 3 linjer stå. Desværre kom jeg derved til at lukke adoCon før dine to nye linjer.

Jeg har spildt både din og min tid, hermed min uforbeholdne undskyldning - læg et svar! Jeg er virkelig glad for løsningen.

Jeg vil nok gøre koden mere elegant, for du har da ret i at det er dumt at skrive de samme 3 linjer mere end én gang.

Hilsen  Per
Avatar billede pfp Nybegynder
05. juli 2005 - 01:13 #7
Hej Per,

Intet at undskylde, jeg kender selv kun alt for godt de der små dumheder man bare ikke ikke lige kan få øje på.

Hermed et svar.

/pfp
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