Avatar billede shang Nybegynder
22. februar 2007 - 18:41 Der er 34 kommentarer og
1 løsning

opdeling i alfabetisk rækkefølge

Jeg skal bruge et script der henter username efter bestemte bogstaver. Altså, hvis du nu har nogle links der siger <a href="?letter=a">A</a> så skal den hente alle usernames fra databasen der starter med bogstavet "a". Når man kommer ind på siden med fx username, der begynder "a", så skal man kunne klikke på den brugernavnet og komme til de enkelte brugers profil. Er der nogen der kan hjælpe?
Avatar billede kalp Novice
22. februar 2007 - 18:50 #1
Det kræver kun en ændring i din sql sætning..

"SELECT * FROM dinTabel WHERE username = '%" & Request.QueryString("letter") & "'"
Avatar billede kalp Novice
22. februar 2007 - 18:51 #2
"SELECT * FROM dinTabel WHERE username LIKE '%" & Request.QueryString("letter") & "'"

sådan.. var lidt for hurtig før
Avatar billede shang Nybegynder
22. februar 2007 - 19:00 #3
Jeg har fundet et script jeg kunne bruge, men er lidt i tvivl om hvordan jeg får brugernavnet med A til at blive vist på siden.

<%
    Response.Buffer = "True"

    ' -> DETTE ER VARIABLERNE TIL DATABASEN.
    Dim myConn
    Dim strSQL

    ' -> DSNLess FORBINDELSE TIL DATABASEN.
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("users.mdb")

    Response.AddHeader "cache-control","private"
    Response.AddHeader "pragma","no-cache"
    Response.CacheControl = "no-cache"
    Response.CacheControl = "private"
    Response.Expires = -1
    Response.ExpiresAbsolute = Now() -1
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Alfabetisk Sideinddeling</title>
<body>

<table align="center" border="0" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td align="left" valign="top" width="100%">

<h1>Alfabetisk Sideinddeling</h1>

<p>Vælg første bogstav i fornavn:
<%
    If Request.QueryString("letter") = "" Then
    strSQL = "SELECT username, FROM users WHERE username LIKE '[A]%' ORDER BY username"

    Else

    strSQL = "SELECT username FROM users WHERE username LIKE '" & Request.QueryString("letter") & "%' ORDER BY username"
    End If

    Set rs = Server.CreateObject("ADODB.recordset")
    rs.Open strSQL, myConn, 1, 1

    ' -> DETTE ANGIVER ALFABETETS BOGSTAVER A - Z.
    For x = -63 To -38
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Æ.
    For x = 70 To 70
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Ø.
    For x = 88 To 88
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Å.
    For x = 69 To 69
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next
%></p>

<tbody>
</tbody>
</table>
<p></p>

</td>
</tr>
</table>

</td>
</tr>
</table>

</body>
<head>
Avatar billede madeindk Nybegynder
22. februar 2007 - 19:12 #4
"SELECT * FROM dinTabel WHERE Left(username, 1) = '" & Request.QueryString("letter") & "'"
Avatar billede kalp Novice
22. februar 2007 - 19:14 #5
tror det virker fint hvis bare du flytter det procenttegn..

    If Request.QueryString("letter") = "" Then
    strSQL = "SELECT username, FROM users WHERE username LIKE '%[A]' ORDER BY username"

    Else

    strSQL = "SELECT username FROM users WHERE username LIKE '%" & Request.QueryString("letter") & "' ORDER BY username"
    End If
Avatar billede shang Nybegynder
22. februar 2007 - 19:21 #6
Jeg får fint Alfabetet frem, men jeg hvordan jeg trækker kun de bruger med A ud af DB'en så man kan klikke på deres navn er jeg lidt i tvivl om hvordan jeg gør.
Avatar billede kalp Novice
22. februar 2007 - 19:25 #7
tilføj det her

If Not (rs.BOF Or rs.EOF) Then
Do While Not rs.EOF
Response.write "rs("username")"
rs.MoveNext
Loop
else
Response.write "Her er tomt"
end if


under

Set rs = Server.CreateObject("ADODB.recordset")
    rs.Open strSQL, myConn, 1, 1


når du kan se navnene sætter vi et link på
Avatar billede shang Nybegynder
22. februar 2007 - 19:29 #8
Jeg har prøvet mig lidt frem:
<%
    Response.Buffer = "True"

    ' -> DETTE ER VARIABLERNE TIL DATABASEN.
    Dim myConn
    Dim strSQL

    ' -> DSNLess FORBINDELSE TIL DATABASEN.
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("users.mdb")

    Response.AddHeader "cache-control","private"
    Response.AddHeader "pragma","no-cache"
    Response.CacheControl = "no-cache"
    Response.CacheControl = "private"
    Response.Expires = -1
    Response.ExpiresAbsolute = Now() -1
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Alfabetisk Sideinddeling</title>
<body>

<table align="center" border="0" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td align="left" valign="top" width="100%">

<h1>Alfabetisk Sideinddeling</h1>

<p>Vælg første bogstav i fornavn:
<%
If Request.QueryString("letter") = "" Then
    strSQL = "SELECT username, FROM users WHERE username LIKE '%[A]' ORDER BY username"

    Else

    strSQL = "SELECT username FROM users WHERE username LIKE '%" & Request.QueryString("letter") & "' ORDER BY username"
    End If

    Set rs = Server.CreateObject("ADODB.recordset")
    rs.Open strSQL, myConn, 1, 1

    ' -> DETTE ANGIVER ALFABETETS BOGSTAVER A - Z.
    For x = -63 To -38
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Æ.
    For x = 70 To 70
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Ø.
    For x = 88 To 88
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Å.
    For x = 69 To 69
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next
%></p>

<tbody>
</tbody>
</table>
<p></p>
<%
' Sikrer mod SQL injection
If isNumeric(Request.QueryString("id")) Then

    set conn = server.CreateObject("adodb.connection")
    set rs = server.CreateObject("adodb.recordset")
    conn.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("users.mdb")
   
    SQL = "SELECT * FROM users WHERE (id = " & Request.QueryString("id") & ")"
    set rs = conn.execute(sql)
    Do While Not rs.EOF
   
    response.write "<a href=""vis.asp?id=" & rs("id") & """>"& rs("username") & "</a><br>"
   
    ' Løber posterne i gennem
    rs.MoveNext
    Loop
   
    ' Lukker forbindelse
    Conn.Close
    Set Conn = Nothing

Else
  Response.Write("Kategori ID er ikke et tal.")
End If
%>
</td>
</tr>
</table>

</td>
</tr>
</table>

</body>
<head>

men får denne fejl
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Extra ) in query expression '(Id = )'.

med.asp, line 81

line 81 - set rs = conn.execute(sql)
Avatar billede shang Nybegynder
22. februar 2007 - 19:35 #9
med dit ex qawi får jeg denne fejl
Microsoft VBScript compilation error '800a0401'

Expected end of statement

med.asp, line 45

Response.write "rs("username")"


line 45: Response.write "rs("username")"
Avatar billede kalp Novice
22. februar 2007 - 19:36 #10
det skal bare være

Response.write (rs("username"))
Avatar billede shang Nybegynder
22. februar 2007 - 19:42 #11
Nu virker det :)
Nu er kunsten at få det til at været et link :)
Avatar billede kalp Novice
22. februar 2007 - 19:45 #12
hvad skal den linke til? og hvordan skal linket se ud?
Avatar billede shang Nybegynder
22. februar 2007 - 19:47 #13
fx Profil.asp?id=1
Avatar billede kalp Novice
22. februar 2007 - 19:53 #14
lettest er at hoppe ud af ASP'en. og så skrive

<a href="Profil.asp?id=<% = rs("id") %> "target="_blank"><% = rs("username") %></a>
Avatar billede kalp Novice
22. februar 2007 - 19:54 #15
<a href="Profil.asp?id=<% = rs("id") %> target="_blank" "><% = rs("username") %></a>
Avatar billede shang Nybegynder
23. februar 2007 - 11:53 #16
Jeg har slettet det du skrev og sat dette ind
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("users.mdb")
Conn.Open DSN

strSQL = "SELECT * FROM users WHERE (id = " & Request.QueryString("id") & ")"

set rs = Conn.Execute(strSQL)

Do While not rs.eof     
Response.Write "<a href=""profil.asp?id="&rs("id")&""">"& rs("username") & "></a>&nbsp;"
Response.Write ""
rs.MoveNext

Loop

Conn.Close
Set Conn = Nothing
%>

men får denne fejl
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Extra ) in query expression '(id = )'.

med.asp, line 78

line 78- set rs = Conn.Execute(strSQL)
Avatar billede kalp Novice
23. februar 2007 - 12:26 #17
strSQL = "SELECT * FROM users WHERE (id = " & Request.QueryString("id") & ")"

denne som fejler..
går ud fra ID findes i din database og ID er af datatypen Tal, Number eller Int..

så burde dette virke..

strSQL = "SELECT * FROM users WHERE id = " & Request.QueryString("id") & ""

kræver yderligere at der i URL'en er noget der hedder ID!
Avatar billede shang Nybegynder
23. februar 2007 - 12:42 #18
<%
    Response.Buffer = "True"

    ' -> DETTE ER VARIABLERNE TIL DATABASEN.
    Dim myConn
    Dim strSQL

    ' -> DSNLess FORBINDELSE TIL DATABASEN.
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("users.mdb")

    Response.AddHeader "cache-control","private"
    Response.AddHeader "pragma","no-cache"
    Response.CacheControl = "no-cache"
    Response.CacheControl = "private"
    Response.Expires = -1
    Response.ExpiresAbsolute = Now() -1
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Alfabetisk Sideinddeling</title>
<body>

<table align="center" border="0" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td align="left" valign="top" width="100%">

<h1>Alfabetisk Sideinddeling</h1>

<p>Vælg første bogstav i fornavn:
<%
If Request.QueryString("letter") = "" Then
    strSQL = "SELECT username, FROM users WHERE username LIKE '%[A]' ORDER BY username"

    Else

    strSQL = "SELECT username FROM users WHERE username LIKE '%" & Request.QueryString("letter") & "' ORDER BY username"
    End If

    Set rs = Server.CreateObject("ADODB.recordset")
    rs.Open strSQL, myConn, 1, 1




    ' -> DETTE ANGIVER ALFABETETS BOGSTAVER A - Z.
    For x = -63 To -38
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Æ.
    For x = 70 To 70
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Ø.
    For x = 88 To 88
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next

    ' -> DETTE ANGIVER ALFABETETS BOGSTAV Å.
    For x = 69 To 69
    Response.Write "&nbsp;<a href=" & chr(34) & "med.asp?letter=" & chr(128 + x) & chr(34) & ">" & chr(128 + x) & "</a>&nbsp;" & vbCrLf

    Next
%></p>
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("users.mdb")
Conn.Open DSN

strSQL = "SELECT * FROM users WHERE id = " & Request.QueryString("id") & ""

set rs = Conn.Execute(strSQL)

Do While not rs.eof     
Response.Write "<a href=""profil.asp?id="&rs("id")&""">"& rs("username") & "></a>&nbsp;"
Response.Write ""
rs.MoveNext

Loop

Conn.Close
Set Conn = Nothing
%>


<tbody>
</tbody>
</table>
<p></p>
</td>
</tr>
</table>
</body>
<head>
men får denne fejl
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Extra ) in query expression '(id = )'.

med.asp, line 78

line 78- set rs = Conn.Execute(strSQL)
Avatar billede shang Nybegynder
23. februar 2007 - 12:45 #19
I min db i tabellen users har jeg
id (er sat til auto)
username - tekst
password - tekst
email - tekst
fdato - tekst
kon - tekst
Avatar billede kalp Novice
23. februar 2007 - 12:56 #20
strSQL = "SELECT * FROM users WHERE id = " & Request.QueryString("id") & ""

response.write(strSQL)
response.end
set rs = Conn.Execute(strSQL)

og skriv herinde hvad den skriver..
jeg tror ikke der kommer noget ID med over nemlig!!
Avatar billede shang Nybegynder
23. februar 2007 - 13:07 #21
nu skriver scriptet på siden:
SELECT * FROM users WHERE id =
Avatar billede kalp Novice
23. februar 2007 - 13:11 #22
tjah.. som jeg sagde et par kommentare længere oppe så skal der jo findes noget der hedder id i url'en !

f.eks

http://www.eksperten.dk?id=10

og ikke

http://www.eksperten.dk

eller

http://www.eksperten.dk?id=

som din lige nu.

ellers må du lave en


if Request.QueryString("id") <> "" then

din sql

end if
Avatar billede shang Nybegynder
23. februar 2007 - 13:19 #23
Jeg forsøger at bruge dette fra et andet eks jeg har.
<%
' Sikrer mod SQL injection
If isNumeric(Request.QueryString("Id")) Then

    set conn = server.CreateObject("adodb.connection")
    set rs = server.CreateObject("adodb.recordset")
    conn.open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("users.mdb")
   
    SQL = "SELECT * FROM users WHERE (id = " & Request.QueryString("id") & ")"
    set rs = conn.execute(sql)
    Do While Not rs.EOF
   
    response.write "<a href=""view.asp?id=" & rs("id") & """>"& rs("username") & "</a><br>"
   
    ' Løber posterne i gennem
    rs.MoveNext
    Loop
   
    ' Lukker forbindelse
    Conn.Close
    Set Conn = Nothing

Else
  Response.Write("Kategori ID er ikke et tal.")
End If
%>
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Extra ) in query expression '(id = )'.

/test/med.asp, line 79

line 79 - set rs = conn.execute(sql)
Avatar billede shang Nybegynder
23. februar 2007 - 13:23 #24
jeg har sat det ind på denne måde:
<%

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("users.mdb")
Conn.Open DSN

strSQL = "SELECT * FROM users WHERE id = " & Request.QueryString("id") & ""
if Request.QueryString("id") <> "" then
set rs = Conn.Execute(strSQL)

Do While not rs.eof     
Response.Write "<a href=""profil.asp?id="&rs("id")&""">"& rs("username") & "></a>&nbsp;"
Response.Write ""
rs.MoveNext

Loop

Conn.Close
Set Conn = Nothing
end if
%>
men nu vises brugernavnet ikke :-)
Avatar billede kalp Novice
23. februar 2007 - 13:27 #25
<%

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("users.mdb")
Conn.Open DSN

strSQL = "SELECT * FROM users WHERE id = " & Request.QueryString("id") & ""
if Request.QueryString("id") <> "" then
set rs = Conn.Execute(strSQL)

Do While not rs.eof     
Response.Write "<a href=""profil.asp?id="&rs("id")&""">"& rs("username") & ">"& rs("username") & "</a>&nbsp;"
Response.Write ""
rs.MoveNext

Loop

Conn.Close
Set Conn = Nothing
end if
%>
Avatar billede shang Nybegynder
23. februar 2007 - 13:38 #26
problemet er, at nu viser scriptet ikke linket med brugernavnet :-)
Avatar billede kalp Novice
23. februar 2007 - 13:39 #27
hvad mener du?
var det ikke også det du ville have?
altså ligesom her på eksperten.. man kan f.eks trykke på mitbrugernavn som er et link til min profil.

eller hvad er det som ikke er rigtigt?
Avatar billede shang Nybegynder
23. februar 2007 - 13:42 #28
jo som fx http://www.eksperten.dk?id=10
scriptet viser fint alfabetet, men når jeg klikker på fx D, så er der ingen link til profilerne.
Avatar billede kalp Novice
23. februar 2007 - 13:47 #29
kommer profilerne slet ikke eller kommer de men man kan ikke klikke på dem? der er nemlig forskel:)
Avatar billede shang Nybegynder
23. februar 2007 - 13:52 #30
profilen kommer slet ikke. Du kan evt se mere her:
http://www.dianna.dk/test/med.asp?letter=D
Avatar billede kalp Novice
23. februar 2007 - 13:59 #31
din kode er rimelig rodet, men vi holder os til det du har lavet..
er begyndt at blive forvirret af at du skifter fra det ene til det andet:)

men slet denne linje

strSQL = "SELECT * FROM users WHERE id = " & Request.QueryString("id") & ""

og prøv igen.

virker det ikke så pak det hele sammen i en zip fil og send det til

adasdasdasd @ hotmail.com

så retter jeg lige op på det der.
Avatar billede shang Nybegynder
25. februar 2007 - 02:10 #32
Jeg har sendt scriptet til dig gawi :)
Avatar billede kalp Novice
25. februar 2007 - 09:25 #33
sådan:) nu virker det!
Det blev nok også lidt mere overskueligt for dig for vi kunne slette hele bunden:)

(hvis du skulle bruge det til noget må du selvfølgelig sige til, men det skulle gerne virke nu)

Du kan hente det her.
http://www.kalp.dk/test/alfa.zip

ps. godt du skrev her da din email var blevet snuppet af mit spam filter:S
Avatar billede shang Nybegynder
25. februar 2007 - 15:27 #34
Det virker perfekt gawi :-) Mange tak for hjælpen :)
Avatar billede kalp Novice
25. februar 2007 - 15:33 #35
super:)
og selv tak:)
fortsat god søndag:)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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