Hej
På min hemsida så har jag en söksida. Nu så visas alla funna sökningar på samma sida, men jag skulle vilja att det endast visades 20 st/per sida. Om resultatet blir fler än 20 så delas det upp på 2 sidor osv... Precis som i exemplet på FAQ-sidan.
Men jag förstår inte riktigt hur jag ska implentera in det i min kod, så jag undrar om någon kan hjälpa mig?
Här är koden, obs: jag tog bort lite långa kodrader som jag tror ändå inte är så viktiga i sammanhanget.
<%
SQL = "SELECT * FROM Tabellen WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY datum Desc, tid Desc "
Set RS = Connection.Execute(SQL)
%>
<%
If RS.EOF Then
'############# FALSK TABELL ##########
response.write "<table width='580' border='0' cellspacing='0' cellpadding='0'><td>"
response.write "tyvärr, ingen fanns på det sökordet"
response.write "</td></table>"
Else
'TABELL
response.write "<table width='400' border='0' cellspacing='0' cellpadding='0'>"
On Error Resume Next
while not RS.eof
'## HÄR HÄMTAR JAG UT LITE VÄRDEN FRÅN DATABASEN, T EX RUBRIK.
response.write "" & RS("format") & ""
RS.movenext
'## HÄR HÄMTAR JAG UT LITE VÄRDEN FRÅN DATABASEN, T EX RUBRIK.
response.write "" & RS("format") & ""
RS.movenext
wend
response.write "</table>"
End If
%>
En sak som skulle vara kul är oxo att det visas t ex såhär:
Sida: 1 av 3 (1-2-3)
' Där dess siffror är direktlänkar till sina respektive sidor.
Och nedanför texten.
Föregående | Nästa
' En kul grej vore oxo om Nästa knappen är ljusgrå, istället för länk, om det inte finns någon "nästa-sida" likadant med föregående-knappen.
Vore oerhört tacksam om någon hjälpte mig med detta. Har försökt med den versionen i FAQ:en, men lyckas aldrig
Tack för koden! Men jag stötte på lite problem., får nämligen upp felmeddelandet:
Microsoft VBScript compilation error '800a0400'
Expected statement
/sok.asp, line 246
With objRS
^
Jag kopierade din kod från kodsidan och lade in på min söksida. dessa koder lade jag upp:
HÖGST UPP PÅ SIDAN...
<%
Sub PageNavigation(nPage, nTotPages)
Dim strScriptName ' AS String
Dim I ' AS Integer
strScriptName = Request.ServerVariables("SCRIPT_NAME")
' If not first page, then show previous
'--------------------------------------
If CInt(nPage) <> 1 Then
Response.Write("<a href=""" & strScriptName & "?" & _
"page=" & nPage - 1 & """>Föregående</a> - ")
End If ' end previous
' loop through total pages and create links
' to all pages in recordset
'------------------------------------------
For I = 1 TO nTotPages
If CInt(I) <> CInt(nPage) Then
Response.Write("<a href=""" & strScriptName & "?" & _
"page=" & I & """>" & I & "</a> ")
Else
Response.Write "<b>[" & I & "]</b> "
End If
Next ' next page
' If Not current page is the last page
' then show next page
'-------------------------------------
If CInt(nPage) <> CInt(nTotPages) Then
Response.Write(" - <a href=""" & strScriptName & "?" & _
"page=" & nPage + 1 & """>Nästa</a>")
End If ' end next page
End Sub
%>
UNDER DETTA SKREV JAG IN QUERYSTRING-GREJEN...
<%
intPage = Requet.QueryString("page")
If intPage = "" Then intPage = 1
%>
SEDAN LITE LÄNGRE NED PÅ SIDN...
<%
strSQL = "SELECT * FROM Tabell WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY datum Desc, tid Desc "
Set objRS = Server.CreateObject("ADODB.Recordset")
With objRS
.CacheSize = 5
.PageSize = 10
.Open strSQL, objConn, 3, 1
.AbsolutePage = intPage
.PageSize = 10
End With
intCount = objRS.RecordCount
intTotPages = objRS.PageCount
If Not objRS.EOF Then
Do Until objRS.EOF or nRecCount >= objRS.PageSize
Response.Write "<b>" & objRS(0) & "</b><br>"
nRecCount = nRecCount + 1
objRS.MoveNext
Loop
End If
objRS.Close
Set objRS = nothing
%>
----
Här visas posterna upp med hjälp av koden från grundinlägget
---
OCH SEDAN DÄR SIDNAVIGERINGEN SKA VARA...
<%
Call PageNavigation(intPage, intTotPages)
%>
Ja, det var nog allt. Vet någon vad jag gjort fel? Vore oehört tacksam för svar!
då återkommer man hela tiden till att det är lättare att ALLTID använda sig av ett prefix på tabell och fältnamn, tex TBL_MIN_TABELL eller FLD_MITT_FALT
så slipper man oroa sig att man har använt sig av ett reserverat uttryck i tabell/fält namn
Hejsan.
fick det mesta att fungerar nu.
det avr det där med objConn, ja
Hade visst skapat den som Connection istället :/
Hursomhelst. Den här kodbiten
<%
strSQL = "SELECT * FROM Tabell WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY datum Desc, tid Desc "
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.CacheSize = 5
objRS.PageSize = 10
objRS.Open strSQL, objConn, 3, 1
objRS.AbsolutePage = intPage
objRS.PageSize = 10
intCount = objRS.RecordCount
intTotPages = objRS.PageCount
If Not objRS.EOF Then
Do Until objRS.EOF or nRecCount >= objRS.PageSize
Response.Write "<b>" & objRS(0) & "</b><br>"
nRecCount = nRecCount + 1
objRS.MoveNext
Loop
End If
objRS.Close
Set objRS = nothing
%>
Den verkar räkna ned från 38 (vilket för tillfället är det högsta id:et i min databas) och sedan 10 steg nedåt/sida.
Det jag vill är att, istället för dessa siffror om id ska komma upp, är min kod från grundinlägg. Där den visar rubrik och sånt.
Vet ngn var jag ska lägga in/ta bort för att det skall fungera?
Det är alltså så att jag vill ha min grundkod som visas istället för siffror som räknas ned till 0.
Men jag vet inte vilka kodsnuttar jag ska radera/redigera..
Någonstans måste jag väl stoppa in koden från grundinlägget?
För det är väl den här koden som räknar ned "id" från högsta till noll?
If Not objRS.EOF Then
Do Until objRS.EOF or nRecCount >= objRS.PageSize
Response.Write "<b>" & objRS(0) & "</b><br>"
nRecCount = nRecCount + 1
objRS.MoveNext
Där någonstans måste jag väl klämma in min kod? Men.. var?
jag fick det att fungera efter några ändringar. såhär ser det ut nu:
<%
strSQL = "SELECT * FROM Tabell WHERE rubrik LIKE '%" & Replace(Trim(Request.Form("Search")), "'", "''") & "%' ORDER BY [datum] Desc, [tid] Desc "Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.CacheSize = 5
objRS.PageSize = 10
objRS.Open strSQL, Connection, 3, 1
objRS.AbsolutePage = intPage
objRS.PageSize = 10
intCount = objRS.RecordCount
intTotPages = objRS.PageCount
If Not objRS.EOF Then
Do Until objRS.EOF or nRecCount >= objRS.PageSize
response.write "<table width='580' border='0' cellspacing='0' cellpadding='2'>"
On Error Resume Next
'rad #1
response.write "" & RS("format") & ""
nRecCount = nRecCount + 1
objRS.movenext
'rad #2
response.write "" & RS("format") & ""
nRecCount = nRecCount + 1
objRS.movenext
Loop
response.write "</table>"
End If
%>
Och det fungerar rättså bra. Men det här är ju en söksidan, och när man söker på något som inte finns, då får jag felmeddelandet att "posten inte finns eller kan vara raderad" Så då måste man väl ha en Else sats eller nått som säger att det inte fanns något resultat?
Men var ska jag slänga in den, som ni ser i grundinlägget användae jag mig av en.
If RS.EOF Then
'############# FALSK TABELL ##########
response.write "<table width='580' border='0' cellspacing='0' cellpadding='0'><td>"
response.write "tyvärr, ingen fanns på det sökordet"
response.write "</td></table>"
Else
osv....
när man säker på t ex "hej", då letas alla poster som innehåller just det ordet upp och visas där i listan på sok.asp.
Men om det är t ex 12 träffar, då delas den upp på 2 sidor, fast vid den andra sidan så tar den fram allihopa posterna! Som om jag enbart hade skrivit SELECT * FROM Tabell ! Sedan när jag backar till sida 1 så har sökresultat även där försvunnit och bytts ut mot samtliga poster istället!
Jag fattar inte varför? Någon som vet vad som är fel? (tack för koden förresten, PatrikB)
/mvh pudolf
256 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a