Avatar billede frank74 Nybegynder
28. januar 2005 - 09:43 Der er 10 kommentarer og
2 løsninger

Slette brugere fra en database.

Hej eksperter.

Jeg skal bruge et script hvor jeg kan slette nogle valgte brugere fra en database.
Forestiller mig noget i retningen af, at alle brugere bliver vist med fornavn, efternavn og brugernavn. Ud for hver enkelt bruger er der en checkbox som man kan markere og nederst en knap der hedder "Delete selected"
Databasen hedder  "login_2000.asp"
Tabellen hedder  "Users"
Fornavn hedder    "FirstName"
Efternavn hedder  "LastName"
Brugernavn hedder "Username"

Nogen forslag??
Avatar billede frank74 Nybegynder
28. januar 2005 - 20:38 #1
Øhhh, ingen der tør at tage udfordringen op??? Kan sagtens give flere point... ;-)
Avatar billede softspot Forsker
29. januar 2005 - 03:33 #2
På serveren i det script der skal slette de markerede brugere skal du benytte denne scriptblok til at slette de valgte brugere (se formen senere):

<%
strConn = "PROVIDER=... osv..."
SQL = "DELETE * FROM Users WHERE ID IN [" & request.form("check") & "]"
set cn = Server.CreateObject("ADODB.Connection")
cn.Open strConn
cn.Execute SQL
cn.Close
%>

Din form til at vise listen med brugere skal se nogenlunde således ud:

<html>
<head>
<title>Delete users</title>
</head>
<body>
<form action="login_2000.asp" method="post">
  <table>
<%
strConn = "PROVIDER=... osv..."
SQL = "SELECT * FROM Users"
set cn = Server.CreateObject("ADODB.Connection")
cn.Open strConn
set rs = cn.Execute(SQL)

do while not rs.EOF
%>
    <tr>
      <td><%=rs("firstname")%></td>
      <td><%=rs("lastname")%></td>
      <td><%=rs("username")%></td>
      <td><input type="checkbox" name="check" value="<%=rs("ID")%>"></td>
    </tr>
<%
  rs.MoveNext
loop

rs.close
cn.close
%>
    <tr>
      <td colspan="4"><input type="submit" value="Delete selected"></td>
    </tr>
  </table>
</form>
</body>
</html>


Som du kan se skal din brugertabel også indeholde et entydigt ID, som altså identificerer hver enkelt bruger (f.eks. et autonumber-felt). Dette ID benyttes til at opsamle en liste af ID'er som kan benyttes til at slette med.
Avatar billede softspot Forsker
29. januar 2005 - 04:01 #3
Det kan være du lige skal slette * i DELETE-sætningen før det fungerer...
Avatar billede frank74 Nybegynder
29. januar 2005 - 16:31 #4
Hej softspot. Tak hjælpen so far. :-)
Havde lavet fejl. Databasen hedder naturligvis ikke login_2000.asp men login_2000.mdb
Har omskrevet scriptet lidt. Her er resultatet:
------------------------------------------------------------------------------
<html>
<head>
<title>Delete users</title>
<meta name="Generator" content="Stone's WebWriter 4">
</head>
<body>
<form action="delete.asp" method="post">
  <table>
<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("login_2000.mdb")
Conn.Open DSN

strSQL = "Select * From Users"
Set rs = Conn.Execute(strSQL)

do while not rs.EOF
%>
    <tr>
      <td><input type="checkbox" name="check" value="<%=rs("UserID")%>"></td>
      <td><%=rs("FirstName")%></td>
      <td><%=rs("LastName")%></td>
      <td><%=rs("Username")%></td>
    </tr>
<%
  rs.MoveNext
loop

rs.close
Conn.Close
Set Conn = Nothing
%>
    <tr>
      <td colspan="4"><input type="submit" value="Delete selected"></td>
    </tr>
  </table>
</form>
</body>
</html>
------------------------------------------------------------------------------
Dette virker fint. Har dog lidt problemer med delete.asp som nu ser sådan ud:
------------------------------------------------------------------------------
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
    <title>[Ingen titel]</title>
<meta name="Generator" content="Stone's WebWriter 4">
</head>
<body>
<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("login_2000.mdb")
Conn.Open DSN

SQL = "DELETE * FROM Users WHERE ID IN [" & request.form("check") & "]"
set cn = Server.CreateObject("ADODB.Connection")

cn.Open strConn
cn.Execute SQL

rs.close
Conn.Close
Set Conn = Nothing
%>
</body>
</html>
------------------------------------------------------------------------------
Her får jeg en fejl ved linie 18 som er : cn.Open strConn
Jeg er sikker på at du lige ved hvad jeg skal gøre. ;-)
Avatar billede softspot Forsker
29. januar 2005 - 17:14 #5
Ja, det tror jeg nok! :)

Prøv denne kode i stedet (jeg har bare ryddet lidt op i den):

<html>
<head>
    <title>[Ingen titel]</title>
<meta name="Generator" content="Stone's WebWriter 4">
</head>
<body>
<%
' Databaseforbindelse - husk at angive sti til din database
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("login_2000.mdb")

SQL = "DELETE * FROM Users WHERE ID IN [" & request.form("check") & "]"
set cn = Server.CreateObject("ADODB.Connection")
cn.Open DSN
cn.Execute SQL
cn.Close
Set cn = Nothing
%>
</body>
</html>
Avatar billede softspot Forsker
29. januar 2005 - 17:15 #6
Udskift lige denne linie:

SQL = "DELETE * FROM Users WHERE ID IN [" & request.form("check") & "]"

med denne:

SQL = "DELETE FROM Users WHERE ID IN [" & request.form("check") & "]"
Avatar billede frank74 Nybegynder
29. januar 2005 - 17:22 #7
Så får jeg "Denne side kan ikke vises"...
Avatar billede softspot Forsker
29. januar 2005 - 17:29 #8
Er der mere information på den fejlside?
Avatar billede softspot Forsker
29. januar 2005 - 17:49 #9
Det kan i øvrigt være det er en god idé at checke om der overhovedet er nogle brugere valgt inden du forsøger at slette (det giver jo ikke meget mening at slette hvis det ikke er valgt noget bruger).

<html>
<head>
    <title>[Ingen titel]</title>
<meta name="Generator" content="Stone's WebWriter 4">
</head>
<body>
<%
if request.form("check") <> "" then
  ' Databaseforbindelse - husk at angive sti til din database
  DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
  DSN = DSN & "DBQ=" & Server.MapPath("login_2000.mdb")

  SQL = "DELETE FROM Users WHERE ID IN [" & request.form("check") & "]"
  set cn = Server.CreateObject("ADODB.Connection")
  cn.Open DSN
  cn.Execute SQL
  cn.Close
  Set cn = Nothing
end if
%>
</body>
</html>
Avatar billede frank74 Nybegynder
30. januar 2005 - 14:39 #10
Jeg har prøvet det. Men den viser stadig "Siden kan ikke vises"
Avatar billede softspot Forsker
30. januar 2005 - 14:44 #11
ok sidste ting (som erik jacobsen nævner på den anden tråd), prøv at udskifte [] med () efter WHERE ID IN.
Avatar billede frank74 Nybegynder
30. januar 2005 - 15:39 #12
Så virker det...
Må hellere skrive scriptet her hvis andre skulle falde over problemet.
------------------------------------------------------------------------------
<%
' Databaseforbindelse - husk at angive sti til din database
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("login_2000.mdb")
SQL = "DELETE FROM Users WHERE UserID IN (" & request.form("check") & ")"
set cn = Server.CreateObject("ADODB.Connection")
cn.Open DSN
cn.Execute SQL
cn.Close
Set cn = Nothing
%>
------------------------------------------------------------------------------
Mange tak for hjælpen softspot...
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