Avatar billede gabi Novice
20. juli 2007 - 20:42 Der er 22 kommentarer og
1 løsning

Sletning af post i database

Jeg har en asp-fil der ser sådan ud. Og den virker sådan, at den linker til en htm-fil: spillerliste_slet.htm med en formular, hvor spilleren skal indtaste sit nummer for at slette posten. Jeg synes bare at det er lidt for usikkert, da man jo på den måde kan komme til at slette en anden spillers data (hvis man skriver forkert nummer) Jeg har godt nok fundet nogle ekempler her på eksperten.dk, hvor man blot klikker på linket for at slette data, men det kan jeg ikke få til at virke. Så mon ikke der er nogen der kan hjælpe mig med en bedre løsning?

<%

'Databaseforbindelse
set conn = server.createobject("ADODB.connection")
conn.Open "DBQ=" & server.mappath("../db/medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

SQL = "select * from Medlemmer Where karakter = 'rytterfolket'"
set RS = conn.execute( SQL )

if not rs.eof then
  ' Gennemløb Recordset (rs) med en løkke
  Do while not rs.eof

    ' Udskriv værdien af kolonnen Karakter
    Response.Write "<p><strong>Nummer:</strong>" &" "  & rs("Medlemsnummer") &"</p>"
    Response.Write "<p><strong>Navn:</strong>" &" "  & rs("Navn") &"</p>"
    Response.Write "<p><strong>In-game:</strong>" &" "  & rs("Ingame") &"</p>"
    Response.Write "<p><a href='spillerliste_slet.htm' class='link'>Afmeld</a></p>"&"<br>" &"</br>"
 

    ' Gå til næste Record i rs
    rs.MoveNext

  ' Fortsæt indtil rs er gennemløbet (EOF = End Of File)
  Loop
else
  Response.Write "Der er ikke nogen tilmeldinger i denne kategori"
  Response.Write "<p>Hvis du ønsker at tilmelde dig kan du gøre det her fra siden.</p>"
  Response.Write "<a href='spillerliste_tilmeld.htm' class='link'>Tilmeld</a>"
end if
' Luk recordsettet
rs.close
set rs = nothing

' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
%>
Avatar billede weis Nybegynder
21. juli 2007 - 11:37 #1
Er det meningen at man kun skal kunne slette sig selv? Du kan lave en slette funktion ved at indsætte:

<% id = request.QueryString("id")

    'Databaseforbindelse
    set Conn = server.createobject("ADODB.connection")
    Conn.Open "DBQ=" & server.mappath("../db/medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

    SQL = "delete from Medlemmer where id = " & id
    Conn.execute(SQL)
        Conn.close
            Set Conn = nothing
   
    'Sender en tilbage til siden default.asp
    response.Redirect("default.asp")
end if %>

i en fil fx. slet.asp og så ændre din

Response.Write "<p><a href='spillerliste_slet.htm' class='link'>Afmeld</a></p>"&"<br>" &"</br>"

til

Response.Write "<p><a href='slet.asp?id="&rs("id")&"' class='link'>Afmeld</a></p>"&"<br>" &"</br>"

men det er ikke mere sikkert end den anden måde? for du kan jo stadig slette de andre på listen!
Avatar billede gabi Novice
21. juli 2007 - 14:52 #2
Ja, det er meningen at man blot skal slette den aktuelle post (sædvanligvis sig selv). Og ja, jeg er godt klar over at man "bare" kan gå ind og slette de andre også, hvis man har lyst til det. Men sådan må det lige være i starten, så må vi se om jeg får det udbygget med andre muligheder. Jeg er nemlig nybegynder, og skal tage det i "små" bidder. Jeg checker om det virker, når jeg kommer hjem fra Odense, og så lægger jeg selvfølgelig et svar ind med resultatet. Sidder lige og spekulerer på hvad default.asp er for noget? Har godt nok sådan en i roden på serveren, men det er ikke en jeg selv har lavet/lagt ind.
Avatar billede weis Nybegynder
21. juli 2007 - 15:10 #3
default.asp er den fil som der bliver vist når man besøger et domæne, på samme måde som index.html (mener at man også kan kalde den index.asp)

Hvis du vil have at man kun kan slette sit eget navn, så kan man evt. lave det sådan at man skal indtaste et password før den vil slette eller du kan lave et "mini bruger system" og så skal du kigge lidt på det der hedder "sessions"
Avatar billede gabi Novice
21. juli 2007 - 15:11 #4
nu har jeg prøvet. Når jeg klikker på linket "afmeld":

Response.Write "<p><a href='slet.asp?nummer="&rs("nummer")&"' class='link'>Afmeld</a></p>"&"<br>" &"</br>"

i spillerliste.asp får jeg denne fejl (bemærk at jeg i ovenstående kode har ændret id til nummer (=feltnavnet i databasen) og det kom til at se korrekt ud:

Microsoft VBScript compilation error '800a0400'

Expected statement

/asp/slet.asp, line 60

end if
^

Jeg har blot kopieret din kode ind i filen slet.asp skulle jeg have ændret noget her også?:

<% id = request.QueryString("id")

    'Databaseforbindelse
    set Conn = server.createobject("ADODB.connection")
    Conn.Open "DBQ=" & server.mappath("../db/medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

    SQL = "delete from Medlemmer where id = " & id
    Conn.execute(SQL)
        Conn.close
            Set Conn = nothing
   
    'Sender en tilbage til siden default.asp
    response.Redirect("default.asp")
end if %>  Dette er linie 60
Avatar billede weis Nybegynder
21. juli 2007 - 15:13 #5
hehe det er mig der har glemt at slette "end if" det skal ikke være med!
Avatar billede weis Nybegynder
21. juli 2007 - 15:16 #6
så lige at du havde ændre "id" til "nummer" så skal du nok også ændre i din SQL sætning, så:

SQL = "delete from Medlemmer where id = " & id

bliver til

SQL = "delete from Medlemmer where nummer = " & id
Avatar billede gabi Novice
22. juli 2007 - 21:32 #7
Nu har jeg rettet slet.asp så der står sådan:

<% id = request.QueryString("id")

    'Databaseforbindelse
    set Conn = server.createobject("ADODB.connection")
    Conn.Open "DBQ=" & server.mappath("../db/medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

    SQL = "delete from Medlemmer where nummer = " & id
    Conn.execute(SQL)
        Conn.close
            Set Conn = nothing
   
    'Sender en tilbage til siden default.asp
    response.Redirect("default.asp")
%>

Men jeg får stadig en fejl:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'nummer ='.

/asp/slet.asp, line 54

Linie 54 ser sådan ud:

Conn.execute(SQL)
Avatar billede weis Nybegynder
22. juli 2007 - 21:52 #8
det virker som om at den ikke kender feltet "nummer" er du sikker på at det hedder dit i din database og ikke "Medlemsnummer" som du bruger i listen?
Avatar billede gabi Novice
22. juli 2007 - 22:15 #9
Feltet i databasen hedder Nummer og datatypen er autonummerering. (jeg har ændret feltnavnet i databasen så det nu ikke hedder medlemsnummer mere.

Kan godt forstå hvis det lige forvirrer dig - sorry.

Koden på spillerliste.asp ser sådan ud

<%

'Databaseforbindelse
set conn = server.createobject("ADODB.connection")
conn.Open "DBQ=" & server.mappath("../db/medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

SQL = "select * from Medlemmer"
set RS = conn.execute( SQL )

' Genneml&oslash;b Recordset (rs) med en l&oslash;kke
Do

  ' Udskriv v&aelig;rdien af kolonnen Fornavn
  Response.Write "<p><strong>Nummer:</strong>" &" "  & rs("Nummer") &"</p>"
  Response.Write "<p><strong>Navn:</strong>" &" "  & rs("Navn") &"</p>"
  Response.Write "<p><strong>Karakter:</strong>" &" "  & rs("Karakter") &"</p>"
  Response.Write "<p><strong>Anden karakter:</strong>" &" "  & rs("Altkarakter") &"</p>"
  Response.Write "<p><strong>In-game:</strong>" &" "  & rs("Ingame") &"</p>"
  Response.Write "<p><a href='slet.asp?nummer="&rs("nummer")&"' class='link'>Afmeld</a></p>"&"<br>" &"</br>"
   
 
  ' G&aring; til n&aelig;ste Record i rs
  rs.MoveNext

' Forts&aelig;t indtil rs er genneml&oslash;bet (EOF = End Of File)
Loop While Not rs.EOF

' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
%>
Avatar billede weis Nybegynder
22. juli 2007 - 22:24 #10
nu skal vi huske at asp er "case sensitive" så hvis dit felt i databsen hedder "Nummer" med stort så skal det også være det i SQL sætningen...!

SQL = "delete from Medlemmer where Nummer = " & id
Avatar billede gabi Novice
22. juli 2007 - 22:38 #11
Det anede mig nok, så det har jeg faktisk også forsøgt med dette resultat:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'Nummer ='.

/asp/slet.asp, line 54


Jeg har bemærket at der i fejlteksten står: missing operator - betyder det at der mangler nogle stroffer e.l.?

<% id = request.QueryString("id")

    'Databaseforbindelse
    set Conn = server.createobject("ADODB.connection")
    Conn.Open "DBQ=" & server.mappath("../db/medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

    SQL = "delete from Medlemmer where Nummer = " & id
    Conn.execute(SQL)
        Conn.close
            Set Conn = nothing
   
    'Sender en tilbage til siden default.asp
    response.Redirect("default.asp")
%>
Avatar billede weis Nybegynder
22. juli 2007 - 22:45 #12
det kan også være mig der læser lidt over teksten, for jeg kan se at du også har ændret i linket (det der med id til nummer) så linjen

id = request.QueryString("id")

skal også ændres til

id = request.QueryString("nummer")

da "nummer" henviser til det der står i url adressen!
Avatar billede gabi Novice
22. juli 2007 - 22:58 #13
hmm - nu virker det sørme og jeg har skrevet sådan:

i spillerliste.asp er koden:

Response.Write "<p><a href='slet.asp?id="&rs("Nummer")&"' class='link'>Afmeld</a></p>"&"<br>" &"</br>"

i slet.asp er koden:

<% id = request.QueryString("id")

    'Databaseforbindelse
    set Conn = server.createobject("ADODB.connection")
    Conn.Open "DBQ=" & server.mappath("../db/medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

    SQL = "delete from Medlemmer where Nummer = " & id
    Conn.execute(SQL)
        Conn.close
            Set Conn = nothing
   
    'Sender en tilbage til siden spillerliste.asp
    response.Redirect("spillerliste.asp")
%>

Giv mig et svar og du får dine point. 1.000 tak for hjælpen.

Ser ud som om at det var denne sammenblanding af id og feltnavnet, der drillede.
Avatar billede weis Nybegynder
22. juli 2007 - 23:01 #14
det var så lidt!
Avatar billede gabi Novice
22. juli 2007 - 23:07 #15
Nej det var skam en stor hjælp. Nu vil jeg så kigge lidt på det med et "mini bruger system"
Avatar billede weis Nybegynder
22. juli 2007 - 23:09 #16
hvis du ikke allerede kender html.dk så er det et godt sted at begynde når man vil lære lidt om asp, ellers så bare kom med flere spørgsmål!

http://www.html.dk/tutorials/asp/
Avatar billede gabi Novice
23. juli 2007 - 00:04 #17
Det er faktisk der jeg er begyndt med grundprincipperne og nu er jeg ved at udvide mulighederne, hvorfor jeg benytter de gode eksperter herinde.

Men tak for tippet alligevel.

Du har i en tidligere kommentar til mig skrevet sådan:

Hvis du vil have at man kun kan slette sit eget navn, så kan man evt. lave det sådan at man skal indtaste et password før den vil slette eller du kan lave et "mini bruger system" og så skal du kigge lidt på det der hedder "sessions"

Kender du et godt sted hvor jeg kan se noget om det der hedder "sessions"? Kan ikke se det som et selvstændig punkt herinde på Eksperten.
Avatar billede weis Nybegynder
23. juli 2007 - 00:14 #18
det er en funktion i asp (der står noget på html.dk her http://www.html.dk/tutorials/asp/lektion12.asp) men princippet er at når mna fx. laver et login system, så kan man lave en session (forstil dig at det er en variabel som man kan tildele en værdi) som kun den person der logger ind har.

eks:

Hvis jeg har en bruger i en database så har jeg et id (autonr) og når jeg så logger ind med mit password kan man gør sådan at fx. session("id") vil indeholde mit idnr
så kan man fx i din løkke ved "slet" funktionen skrive:

<% if session("id") = rs("Nummer") then repsonse.write "DIN SLET FUNKTION" end if %>

Hvis det er helt uforståenden kan jeg godt lave et lille hurtigt loginsystem som eksempel du kan se på!
Avatar billede gabi Novice
23. juli 2007 - 10:40 #19
Hej weiss

Hvis det er helt uforståenden kan jeg godt lave et lille hurtigt loginsystem som eksempel du kan se på!

Det ville da være rigtig dejligt, hvis du har tid og lyst til det. Det må du gerne.
Avatar billede weis Nybegynder
23. juli 2007 - 11:04 #20
Jeg lavede et i går for en sikkerheds skyld :) og består af 3 filer og databasen. i databasen har jeg tilføjet feltet "Password" og de 3 filer er:

default.asp - login siden
logud.asp - et logud sript, man ser ikke den side da man bliver sendt tilbage til default.asp
liste.asp - som er med spillerne

de 3 filer er som følgende:

-------- default.asp --------------------------------------

<% if Request.ServerVariables("REQUEST_METHOD") = "POST" then
   
    'Opretter forbindelse til batabasen
    set Conn = server.createobject("ADODB.connection")
    Conn.Open "DBQ=" & server.mappath("medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

    'undgår tegn der vil crache loginfunktionen
    strBruger = Trim(Replace(request.form("bruger"),"'","''" ))
    strPass = Trim(Replace(request.form("pass"),"'","''" ))
   
    LogSQL = "SELECT * FROM Medlemmer where Navn = '" & strBruger & "' AND Password = '" & strPass & "'"
    Set rsLog = Conn.Execute(LogSQL)

    If Not (rsLog.BOF Or rsLog.EOF) Then
   
        'tildeler session("id") brugers eget idnr
        Session("id") = rsLog("Nummer")
        'tildeler session("login") værdien true, til kontrol af login
        Session("login") = true
        'Ændre udløbstiden for sessionen til 15 min
        Session.Timeout=15
       
        'sender bruger til den beskyttede side ved login
        response.Redirect("liste.asp")
    else
        'skriver fejlbeked, hvis oplysningerne ikke er korrekte
        response.write "fejl i login"
    end if

    Conn.Close
    Set Conn = Nothing

end if
%>
<html>
<head>
<title>Login side</title>
</head>

<body>
<form name="form1" method="post" action="default.asp">
  navn:
  <input type="text" name="bruger">
  <br>
  Password
  <input type="text" name="pass">
  <br>
  <input type="submit" name="Submit" value="Submit">
</form>
</body>
</html>

-------- logud.asp --------------------------------------

<html>
<head>
<title>Log ud</title>
</head>

<body>
<% session.Abandon()
    Response.Redirect("default.asp") %>
</body>
</html>

-------- liste.asp --------------------------------------

<%
'Følgende linjer gør at man ikke kan bruge "history back" knappen efter at have logget ud
Response.Expires = 0
Response.ExpiresAbsolute = Now() - 1
Response.AddHeader "pragma","no-cache"
Response.AddHeader "cache-control","private"
Response.CacheControl = "no-cache"

Response.Buffer = True

'hvis man ikke har fået tildelt en true værdi kan man ikke se siden og sendes til default.asp (se nederst i dokumentet)
if session("login") = true then %>
<html>
<head>
<title>Liste</title>
</head>

<body>
<p><a href="logud.asp">Log ud</a></p>
<%

'Databaseforbindelse
set Conn = server.createobject("ADODB.connection")
Conn.Open "DBQ=" & server.mappath("medlemmer.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"

    SQL = "select * from Medlemmer"
    set rs = Conn.execute(SQL)

    if rs.eof then
        response.write "Der findes ikke noget i databasen"
    else
        do until rs.eof

              Response.Write "<p><strong>Nummer:</strong>" &" "  & rs("Nummer") &"</p>"
              Response.Write "<p><strong>Navn:</strong>" &" "  & rs("Navn") &"</p>"
              Response.Write "<p><strong>Karakter:</strong>" &" "  & rs("Karakter") &"</p>"
              Response.Write "<p><strong>Anden karakter:</strong>" &" "  & rs("Altkarakter") &"</p>"
              Response.Write "<p><strong>In-game:</strong>" &" "  & rs("Ingame") &"</p>"
              if session("id") = rs("Nummer") then
                  Response.Write "<p><a href='slet.asp?nummer="&rs("nummer")&"' class='link'>Afmeld</a></p>"
              end if
              Response.Write "<br>"
   
        rs.MoveNext
        Loop
    end if

Conn.Close
    Set Conn = Nothing
%>
</body>
</html>
<% else
    'sendes til default.asp hvis man ikke har adgang til siden
    response.Redirect("default.asp")
    end if %>
Avatar billede gabi Novice
23. juli 2007 - 15:33 #21
Hejsa

Du har været forudseende ;-)
Jeg kigger på det i aften når jeg er kommet hjem fra arbejde - så hører du nærmere, og så må vi finde ud af noget med nogle flere point til dig.
Avatar billede weis Nybegynder
23. juli 2007 - 20:46 #22
Jeg håber det kommer til at virke, ellers kan du jo spørge. Behold du bare de point selv, så kan du bruge dem på andre ting :)
Avatar billede gabi Novice
23. juli 2007 - 21:50 #23
og det virkede bare perfekt første gang. Har beholdt min gamle spilleroversigt hvor man ikke behøver login og lavet linket til "afmeld" om så man kommer direkte til login-siden. Nu er jeg ved at strikke en formular sammen så man kan få oplyst pw via en returmail, hvis man skulle glemme det. Det bliver lidt primitivt, men sådan må det være i starten, så kommer udvidelserne nok hen ad vejen. Nok en gang tak for den store hjælp, det var rigtig dejligt og brugerne af det site jeg er ved at lave, er rigtig glade for muligheden med at man kan se hvem der spiller live rollespil i vores forening. Hvis du er nysgerrig er det toenderlive.dk
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