webForumDet fria alternativet

Hmm!!! Pagin

ASP

11 svar · 407 visningar · startad av Ivar

Medlem sedan aug. 2002218 inlägg
Frågan#1
Hej kan någon se vad är felet går ej att bläddra till sida 2, sida 3, osv. 

<% 
Dim connect, classifieds, whereclause, query, item
Dim descript, category, stad, pricefrom, priceto
Dim noresults

'## -- hur många inlägg ska visas per sida --
intPageSize = 25
'## -- vilken sida ska visas --
intPage = Request.QueryString("page")
'## -- om ingen querystring med sidvärde hittas, visa då första sidan --
If intPage = "" Then intPage = 1

set connect = server.createobject("ADODB.connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("db/annonser.mdb") & ";pwd=;"
Set senaste = Server.CreateObject("ADODB.Recordset")

item = trim(request("item"))
category = trim(request("category"))
stad = trim(request("stad"))
priceto = trim(request("priceto"))
pricefrom = trim(request("pricefrom"))

If item = "" and descript = "" and category <> "" and _
stad = "" and pricefrom = "" and priceto = ""  then
 response.redirect "category.asp?category=" & category
end if
whereclause = "where "

if item <> "" then
 whereclause = whereclause & "instr(item,'" & _
 item & "')>0 and "
end if

if descript <> "" then
 whereclause = whereclause & "instr(description,'" & _
 descript & "')>0 and "
end if

if category <> "" then
 whereclause = whereclause & "category = '" & _
 category & "' and "
end if

if stad <> "" then
 whereclause = whereclause & "stad = '" & _
 stad & "' and "
end if

if pricefrom = "" and priceto <> "" then
 pricefrom = "0"
elseif pricefrom <> "" and priceto = "" then
 priceto = "99999999"
end if

if pricefrom <> "" and priceto <> "" then
 whereclause = whereclause & "price >= " & _
 pricefrom & " and price <= " & _
 priceto & " and "
end if

If right(whereclause,4) = "and " then
 whereclause = left(whereclause, len(whereclause) -4)
 query = "SELECT * FROM items " & whereclause   

'## -- hur många poster ska visas per sida --
senaste.PageSize = intPageSize
		
'## -- öppna och hämta alla records --
senaste.Open query, Connect, 1, 3
If senaste.EOF Then
Response.Write "Det finns inga inlägg."
Else
'## -- vilken sida i recordset uppdelningen ska visas --
senaste.AbsolutePage = intPage
		
'## -- hur många sidor finns i recordset uppdelningen --
intTotalPages = senaste.PageCount
	
'## -- lista alla inlägg som finns i db --
Do Until senaste.EOF or intRecordCount >= intPageSize
intRecordCount = intRecordCount + 1
				

Response.Write "<tr><td><img src=""bilder/" & senaste("fileName") & """ height='10' width='10'>"
response.write "<td><font size='2'><a href=""detail.asp?item=" & senaste("id") & """>" & senaste("item") & "</a>"
response.write "<td><font size='2'> Kategori:"
Response.write eval(senaste("category"))
response.write "<td><td><font size='2'>Datum:" & senaste("datecreated") & ""
response.write "<td><font size='2'>Stad:" & senaste("stad") & ""
response.write "<td><font size='2'color=#FF0000>Pris:</font>" & senaste("price") & " Kr </td></font></tr> "
senaste.MoveNext 
Loop 
End If

'## -- clean up --
senaste.Close
Set senaste= Nothing
Connect.Close
Set Connect= Nothing

'## -- visa sidnavigeringen --
'## -- intPage = vilken sida som ska visas --
'## -- intTotalPages = hur många sidor som recordsetet är uppdelat i --
Call PageNavigation(intPage, intTotalPages)

'## -- skapa sid-navigering --
Sub PageNavigation(ByVal WichPage, ByVal HowManyPages)
Dim strScriptName
	
'## -- vilken sida ska navigeringen länka till --
strScriptName = Request.ServerVariables("SCRIPT_NAME")
	
'## -- visa föregående, länkat eller olänkat beroende på vilken sida som visas --
If CInt(WichPage) > 1 Then
Response.Write "<A href='" & strScriptName & "?" & _
"page=" & WichPage - 1 & "'><< Föregående</A> "
Else
Response.Write "<< Föregående "
End If
	
'## -- lista ut alla sidnummer --
For I = 1 To HowManyPages
If CInt(WichPage) <> I Then
Response.Write "<A href='" & strScriptName & "?" & _
"page=" & I & "'>" & I & "</A> "
Else
Response.Write "[ <B>" & I & "</B> ]"
End If
Next
'## -- visa Nästa, länkad eller olänkad beroende på vilken sida som visas --
If CInt(WichPage) < CInt(HowManyPages) Then
Response.Write "<A href='" & strScriptName & "?" & _
"page=" & WichPage + 1 & "'>Nästa >>"
Else
Response.Write "Nästa >>"
End If
End Sub
%>
Medlem sedan dec. 19998 577 inlägg
#2

Längst upp anger du att variabeln intPage skall innehålla sidonummret, sedan försöker du att använda WichPage längre ned.

Mvh, Vide

Medlem sedan mars 20002 836 inlägg
#3

Vad jag kan se av koden så är det någon typ av sökning som ska genomföras. Beroende på vad som postas till sidan så ska olika saker visas. (dina olika if-satser som bygger sql-frågan)

För att då kunna skapa en korrekt paging så måste du få med dig, antingen alla värden till nästa sida alt. hela sql-frågan (vilket är mindre bra).

cya,
PatrikB

Medlem sedan mars 20002 836 inlägg
#4

WichPage är bara ett argument till subben: PageNavigation(ByVal WichPage, ByVal HowManyPages)

cya,
PatrikB

Medlem sedan mars 20002 836 inlägg
#5

Ett litet tips!!!

se till att köra en "ren" sql-fråga innan du börjar att bygga upp en dynamisk sql-fråga för att se att pagingen funkar. Blir bra mycket lättare att felsöka.
Skapa sedann en if-sats i taget och kolla så att allt funkar som det ska igen efter ändringen ......... blir lättare i utvecklingsarbetet med att genomföra täta tester på att koden funkar korrekt

just my € 0.02
/PatrikB

Medlem sedan dec. 19998 577 inlägg
#6

PatrikB skrev:

WichPage är bara ett argument till subben: PageNavigation(ByVal WichPage, ByVal HowManyPages)

Ah, skummade för snabbt genom koden. ;)

Medlem sedan aug. 2002218 inlägg
#7

Tack för alla tips PatrikB det är alla if satser som Pagin inte gillar.
Så fort tugg jag bort If satserna då funkade Pagin men allting var fel i sökningen.
men frågan är hur skall man kunna fixa SQL frågan på ett annat sätt.

Medlem sedan mars 20002 836 inlägg
#8

Du måste få med dig värdena som först postas i sökningen till alla sidor i pagingen med tex querystrings.

PageNavigation subben bygger ju upp själva pagingen (skriver ut föregående, alla sidnummer, nästa) där sätts även querystringen för vilken sida som efterfrågas. Den querystringen skulle du behöva "bygga" på med värdena som först postades och sedan hämta in dem igen vid nästa sidvisning.

Skicka upp koden för den fungerande varianten av pagingen + vilka variabler som postas till sidan (de du behöver för att få rätt i sökningarna) så kan vi ta det steg för steg.

cya,
PatrikB

Medlem sedan mars 20015 287 inlägg
#9

Lägg till querystringarna i länken då.

Response.Write "<A href='" & strScriptName & "?" & Request.Querystring & _
"page=" & WichPage + 1 & "'>Nästa >>"

Kanske ska det in ett & "&" där mellan, men det märker du. :)

Medlem sedan mars 20015 287 inlägg
#10

Fast hur blir det med querystringen page då andra varvet... hm...

Medlem sedan mars 20002 836 inlägg
#11

i subben så kollar man vilken sida man är på:

Select Case WichPage
	Case 1
		strQueryString = "?page=1&value1=" & value1var & "&value2=" & value2var

	Case Else

		strQueryString = Request.QueryString

End Select

Response.Write "<A href='" & strScriptName & "?" & Request.Querystring & _
Replace(strQueryString, "page=" & WichPage, "page=" & WichPage + 1) & "'>Nästa >>"

likadant på för föregående länkning och för aktuell sidnummer

cya,
PatrikB

Medlem sedan aug. 2002218 inlägg
#12

Nix jag har testat!

267 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)