Avatar billede fibs Novice
09. juli 2005 - 21:13 Der er 16 kommentarer og
2 løsninger

Søgefunktion

Jeg har følg. asp kode:

<% Response.Buffer = True %>
<html><head>
<title>Søgeresultat</title>
</head><body>

<%
' Henter værdien fra soeg.htm
strKeyword = Trim(Request.Form("Keyword"))

If Len(strKeyword) = 0 Then
    ' Hvis der ikke er skrevet i feltet
    Response.Clear
    Response.Redirect("search.htm")
Else
    ' Hvis der er skrevet i feltet
    strKeyword = Replace(strKeyword,"'","''")
End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT ID, Navn, Adresse, Bynavn, Beskrivelse FROM Kunder WHERE"
strSQL = strSQL & " (Navn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Adresse LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Bynavn LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (Beskrivelse LIKE '%" & strKeyword & "%')"

' Skaber DSNLess forbindelse til DBen
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("search.mdb")
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN

' Skaber et recordset udfra SQL strengen
Set rs = myConn.Execute(strSQL)
If Not (rs.BOF Or rs.EOF) Then
    ' Hvis der er fundet poster på søgningen
    Response.Write "<p>Søgeresultat</p>"
    Response.Write "<table border=1>"
    Response.Write "<tr><th>Navn</th><th>Adresse</th><th>By</th><th>Beskrivelse</th></tr>"
    Do While Not rs.EOF
        Response.Write "<tr><td>" & rs("Navn") & "</td>"
        Response.Write "<td>" & rs("Adresse") & "</td>"
        Response.Write "<td>" & rs("Bynavn") & "</td>"
        Response.Write "<td>" & rs("Beskrivelse") & "</td></tr>"
        rs.MoveNext
    Loop
    Response.Write "</table>"
Else
    ' Hvis der ikke er fundet poster på søgningen
    Response.Write "<p>Der er ikke fundet noget på denne søgning</p>"
End If

' Rydder op efter os
myConn.Close
Set myConn = Nothing
%>

</body></html>

Resultatet bliver at det i en tabel viser de poster der overholder søgekriterierne - Det er os super. Det er bare sådan at jeg gerne vil have at den viser kun et felt (F.eks. navn), men så at navn virker som en link til en side hvor der kun vises den ene post, men alle aktuelle felter vedr. den post.

Håber nogen kan hjælpe

Mvh
Fibs
Avatar billede thesurfer Nybegynder
09. juli 2005 - 21:19 #1
Dvs:
1) Den skal kun vise navne
2) Man klikker på et navn
3) den henter alle informationerne, der tilhører det navn?

/theSurfer
Avatar billede thesurfer Nybegynder
09. juli 2005 - 21:25 #2
Eksempel:

do while not rs.eof
response.write "<a href='info.asp?id=" & rs("id") & "'>" & rs("navn") & "</a><br>"
rs.movenext
loop



og info.asp:

if request.querystring("id") <> "" and request.querystring("id") <> "" then
id = CInt(request.querystring("id"))

sql = "select * from TabelNavn where id = " & id

response.write "navn:" & rs("navn") & "<br>"
response.write "adresse: " & rs("adresse") & "<br>"
..osv..

end if

Noget i den stil..

/theSurfer
Avatar billede thesurfer Nybegynder
09. juli 2005 - 21:39 #3
PS: Jeg har bare brugt "<br>" (ny linie) i stedet for tabeller.. gad ikke til det.. :-)

/theSurfer
Avatar billede fibs Novice
09. juli 2005 - 22:06 #4
Det var os det jeg kom tæt til i search.asp - men nu virker linkene. Havde den valgt 2 eller flere poster og man valgte et viste den at alle linksene var valgt. Det andet der har drillet har været databaseforbindelsen mellem database og info.asp. Når jeg har valgt den jeg plejer at bruge (Har lært via html.dk engang) går den bare IKKE!

Koden er her:

<html>
<title>Hente data fra database</title>
<head>
</head>
<body>
<dl>
<%
' Skaber DSNLess forbindelse til DBen
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("log/search_2000.mdb")
Set myConn = Server.CreateObject("ADODB.Connection")
myConn.Open strDSN

' Hent fra databasen afhængig af værdien id fra URL
strSQL = "Select * From kunder Where Id = " & Request.Querystring("id")
Set rs = Conn.Execute(strSQL)

if request.querystring("id") <> "" and request.querystring("id") <> "" then
id = CInt(request.querystring("id"))

sql = "select * from kunder where id = " & id

response.write "navn:" & rs("navn") & "<br>"
response.write "adresse: " & rs("adresse") & "<br>"


Conn.Close
'Set Conn = Nothing
%>
</dl>
<p><a href="liste.asp">Retur til listen</a></p>
</body>
</html>

Kan nogen se fejlen??
Avatar billede nielle Nybegynder
09. juli 2005 - 22:31 #5
<html>
<title>Hente data fra database</title>
<head>
</head>
<body>
<dl>
<%
if request.querystring("id") <> "" then
    ' Skaber DSNLess forbindelse til DBen
    strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("log/search_2000.mdb")
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open strDSN

    id = CInt(request.querystring("id"))
    sql = "select * from kunder where id = " & id
    Set rs = Conn.Execute(sql)

    response.write "navn:" & rs("navn") & "<br>"
    response.write "adresse: " & rs("adresse") & "<br>"

    Conn.Close
    'Set Conn = Nothing
end if
%>
</dl>
<p><a href="liste.asp">Retur til listen</a></p>
</body>
</html>
Avatar billede thesurfer Nybegynder
09. juli 2005 - 22:39 #6
09/07-2005 22:06:30 får mig til at tænke "hmmm".. forstod du egentligt mit eksempel?

PS: Du skal bare vælge "Kommentar", lige som os andre.. :-)  (dvs, ikke "Svar")..

/theSurfer
Avatar billede nielle Nybegynder
09. juli 2005 - 22:42 #7
Er der ugen dybere mening med:

if request.querystring("id") <> "" and request.querystring("id") <> "" then

- eller er det bare varmen som trykker. ;^)
Avatar billede thesurfer Nybegynder
09. juli 2005 - 22:56 #8
hahaha! :-)
Det må være varmen ;-)

Man skal egentligt sørge for, at id ikke er tom (<> ""), og at id er et tal, eller kan konverteres til et tal (dvs, ikke tekst).. hmm.. man skal måske også undersøge, om id er større end nul (CInt(...) > 0)..

:-)

/theSurfer
Avatar billede fibs Novice
09. juli 2005 - 22:58 #9
Thesurfer - det er første "vilde" aspforsøg jeg skal lave. Er blevet spurgt til en forenings hjemmeside om der kunne komme en søgefunktion på siden. Det er det jeg roder med. Næ jeg var/er ikke helt med med eksemplet. Jeg kan ikke få info.asp siden til at virke, heller ikke hvis jeg bruger koden fra Nielle..

Jeg er ret "ny" her på eksperten og vidste egentlig ikke hvad forsekl på svar og kommentar var

Fibs
Avatar billede nielle Nybegynder
09. juli 2005 - 23:04 #10
Når du nu siger at du ikke kan få det til at virke, så vil det være en meget stor hjælp for os andre hvis du fortæller hvad der sker, hvad der ikke sker, og hvad du havde forventet.
Avatar billede thesurfer Nybegynder
09. juli 2005 - 23:05 #11
Mht at være ny: Læs http://expfaq.1go.dk og http://www.eksperten.dk/regler.phtml

Hvis der er noget kode du ikke forstår, lad vær med bare at prøve på at bruge det.. spørgs heller om hvad det gør.. stil hellere et mere end nødvendigt, så du ved hvordan det virker..


Anyways..
Der er visse ting, der skal være i orden, inden du kan fortsætte:

1) request.querystring("id") må IKKE være tom = lav altid et check!
2) request.querystring("id") SKAL være af typen tal, da id (i databasen) er af typen tal = lav altid et check

Når du indsætter/henter noget fra en database, skal typerne passe sammen.. tal-felter med tal-felter, tekst-felter med tekst-felter, osv..

CInt(værdi), konverterer "værdi" til et tal (hvilket er hvad du skal bruge).

linien: sql = "select * from kunder where id = " & id
betyder: helt alt fra tabellen kunder, hvor id er lig id'en-fra-urlen-indsættes-her

/theSurfer
Avatar billede fibs Novice
10. juli 2005 - 00:10 #12
Nielles kode melder følgende fejl:

Fejltype:
Der opstod en Microsoft VBScript-kørselsfejl (0x800A01A8)
Et objekt er obligatorisk: ''
/lift_soeg/a/info.asp, line 15


Browsertype:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

Side:
GET /lift_soeg/a/info.asp

Klokkeslæt:
10. juli 2005, 00:10:09

Fibs
Avatar billede nielle Nybegynder
10. juli 2005 - 08:52 #13
Excelent fejlbesked! :^)

Der manglede faktisk jo et lille indledende "my" i:

    Set rs = myConn.Execute(sql)

(Plus et par steder mere)

Prøv med denne her i stedet:

<html>
<title>Hente data fra database</title>
<head>
</head>
<body>
<dl>
<%
if request.querystring("id") <> "" then
    ' Skaber DSNLess forbindelse til DBen
    strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("log/search_2000.mdb")
    Set myConn = Server.CreateObject("ADODB.Connection")
    myConn.Open strDSN

    id = CInt(request.querystring("id"))
    sql = "select * from kunder where id = " & id
    Set rs = myConn.Execute(sql)

    response.write "navn:" & rs("navn") & "<br>"
    response.write "adresse: " & rs("adresse") & "<br>"

    myConn.Close
    Set myConn = Nothing
end if
%>
</dl>
<p><a href="liste.asp">Retur til listen</a></p>
</body>
</html>
Avatar billede fibs Novice
10. juli 2005 - 13:08 #14
Dilemma:

Det virker - Super.

men en har hjulpet med linken på search.asp og en har hjulpet med info.asp siden.

Kan jeg dele pointene eller...?

Fibs
Avatar billede thesurfer Nybegynder
10. juli 2005 - 13:23 #15
Jeg skrev så lidt som muligt, i indlægget 09/07-2005 21:25:33, da meget kode har det med at forvirre folk :-)

På den måde, kan man se, hvad der er "nyt".. hvad der skal implementeres i det eksisterende kode..


Jeg vil klart anbefale dig, at læse lektionerne på http://www.html.dk/tutorials/asp/
Så får du mere ud af det, og du vil kunne se, hvordan nyt kode skal implementeres (du lærer det grundlæggende..)


Ang points:
Du kan godt dele pointsne, når vi begge har lagt et svar.

/theSurfer
Avatar billede nielle Nybegynder
10. juli 2005 - 14:18 #16
Svar :^)

Men giv du bare thesurfer de fleste point. :^)
Avatar billede nielle Nybegynder
10. juli 2005 - 14:19 #17
... doh ...
Avatar billede thesurfer Nybegynder
10. juli 2005 - 14:21 #18
15/15 er helt iorden..

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