webForumDet fria alternativet

Paging prob

25 svar · 399 visningar · startad av ConnyFox

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#1

Halo! Har sökt och kollat på FAQ guiden för Paging men förstår helt enkelt inte hur jag ska få det att funka ihop med min kod, någon som har tid o hjälpa mig?

Jag vill visa dom 20 första meddelanderna och sedan kunna välja nästa 20.

Eller ännu häldre visa sidnummer som man kan klicka på t.ex sidan 4 visar 41-50 osv..

tack på förhand Webforum leker ;)

<% if request.querystring("visa") = "" or request.querystring("visa") = "utkorg" or request.querystring("visa") = "inkorg" then %>

<% if request.querystring("visa") = "utkorg" then %>

<%
SQL = "SELECT * FROM meddelanden where fran = '" & session("member") & "' and franv = 'visa'"
RecSet.Open SQL, Connection, 3, 3
%>

<%elseif request.querystring("visa") = "" or  request.querystring("visa") = "inkorg" then %>

<%
SQL = "SELECT * FROM meddelanden where till='" & session("member") & "' and tillv = 'visa'"
RecSet.Open SQL, Connection, 3, 3
%>

<% end if %>

<% if recset.eof then%><br><br><center>Inga medelanden</center><br><br><%else%>
<form name="boxar" action="funktioner.asp?funktion=delmessbox" method="post">
<table width="100%">
<tr bgcolor="#E9E9E9"><td width="2%"><input name="allbox" type="checkbox" value="Check All" onClick="CheckAll();" class="check"></td><td width="25%"><%if request.querystring("visa") = "utkorg" then %>Till<%else%>Från<%end if%></td><td>Rubrik</td><td width="15%">Skickat</td></tr>

<% 
do until RecSet.EOF
cnt = cnt + 1
strColor = "#FFFFFF" 
If cnt Mod 2 = 0 then strColor = "#E9E9E9"
%>
<tr bgcolor="<%=strColor%>"><td align="middle"><input type="checkbox" class="check" value="<%=RecSet("ID")%>" name="checkboxar"></td><td><% if recset("nytt") = "0" then%><img src="bilder/ico_messnew.gif"> <%elseif recset("nytt") = "1" then%><img src="bilder/ico_messopen.gif"> <%else recset("nytt") = "2" %><img src="bilder/ico_mess.gif"> <%End IF%> 
<%if request.querystring("visa") = "utkorg" then %><a href="info.asp?member=<%=RecSet("till")%>"><%=RecSet("till")%></a><%else%><a href="info.asp?member=<%=RecSet("fran")%>"><%=RecSet("fran")%></a><%end if%>
</td><td> <a href="default.asp?visa=read&ID=<%=RecSet("ID")%>"><%=Recset("rubrik")%></a></td><td width="20%" align="right"> <%=formatDate(recset("datum"))%>
</td></tr>
<%
RecSet.MoveNext
loop

RecSet.Close
%>
</td></tr><tr bgcolor="#E9E9E9"><td colspan="3">
<a <% if session("inloggad") = false then %>href="javascript:alert(' Du måste logga in för att kunna lägga till en länk. \n Är du inte redan medlem så bli det genast och få \n tillgång till alla roliga grejjer här!');" <% else %>href="javascript:document.boxar.submit()"<% end if %>><img SRC="bilder/tabort.gif" name="skicka" value="Skicka" class="input"></a></td><td></form></td></tr>
</table>
<%end if %>

------------------
*brölar ljudligt*

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#2

Ingen? Snälla :o)

------------------
*brölar ljudligt*

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#3

nehepp *snyft*

------------------
*brölar ljudligt*

PatrikBMedlem sedan mars 20002 836 inlägg
#4

Pagingen är ju ett av de ämnen som tagits upp absolut MEST i detta forum.
Tycker att det låter konstigt att du inte skulle kunna söka reda på information om hur paging funkar.

Sök ... och du borde få upp huuuur många trådar som helst i ämnet, tror att det finns material för en hel bok om paging :e

Gör ett försök, kika igenom kodexempel, försök att hänga med vad som händer när scriptet körs, testa sedan och kom tillbaka så lovar jag att du kommer att få hjälp.

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#5

Hehe jovisst hittar jag massa kod, en sablans massa kod faktiskt, men antingen så sorterar den efter ID X to Y typ o d e ju ganska kört när alla ID inte finns (t.ex om man tagit bort massa inlägg) eller så är koden för krånglig för att jag ska förstå den :o) Så därför ber jag nån vänlig själ att antingen hjälpa mig att förstå eller hjälpa mig med koden. Tackar ;)

------------------
*brölar ljudligt*

VideMedlem sedan dec. 19998 577 inlägg
#6

Så därför ber jag nån vänlig själ att antingen hjälpa mig att förstå

Jag ahr skrivit en artikel i ämnet som kanske kan vara till hjälp:
http://www.webeye.nu/default2.asp?que=asp/default.asp&exec=asp/artiklar/asp_17.asp

------------------
Mostly Harmless

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#7

Tack den hjälpte, funkar inte så bra ihop med min kod dock hehe.. men men får la försöka klura ut något

------------------
*brölar ljudligt*

jorgenMedlem sedan feb. 20012 412 inlägg
#8

Hej, det absolut lättaste är att bygga pagingen först (eller använda en färdig) och sedan utveckla, designa och anpassa den så att den passar. Det är betydligt mycket bökigare att göra tvärt om.

mvh Jörgen :)

------------------
.: Det är jag som ger svaren och det är Ni som ställer frågorna :.

PatrikBMedlem sedan mars 20002 836 inlägg
#9

ok då .... vi får väl ta det steg för steg :e ... ska försöööka vara lite pedagogisk *ler*

Det första vi gör är att ändra cursortypen till 1.
Behöver ju inte ställa recordsetet för uppdatering när du endast ska visa poster:

RecSet.Open SQL, Connection, 1, 3

Vad behöver vi då veta för att kunna dela upp recordsetet på olika sidor:

1. Hur många poster ska visas på varje "sida"?
2. Hur många sidor finns det totalt i recordsetet?
3. Vilken "sida" efterfrågas?

Vi börjar med att lägga till hur många poster vi vill visa per sida:

'## -- hur många poster ska visas per sida --
intPageSize = 15 '## -- visa 15 poster per sida --

Nu har vi en av byggstenarna i pagingen klar.

Vi går vidare med att lägga till en sak innan recordsetet öppnas.

RecSet.PageSize = intPageSize

'## -- öppna recordsetet --
RecSet.Open SQL, Connection, 1, 3

dvs, vi säger till recordset objectet att vi endast vill ha intPageSize poster per sida.

Vi har fortfarande ett par saker som behövs innan pagingen e klar ... bara ett par saker :e

Där vi börjar att loopa igenom recordsetet lägger vi till detta:

do until RecSet.EOF [b]or cnt >= intPageSize[/b]

dvs, den ska inte visa fler poster än vad - intPageSize - säger att den ska göra.

Vi slutar här ..... så att du får lite att göra ..... medans jag hämtar andan =)

Din kod bör se ut ungefär så här:

<% 
intPageSize = 15

if request.querystring("visa") = "" or request.querystring("visa") = "utkorg" or request.querystring("visa") = "inkorg" then

	if request.querystring("visa") = "utkorg" then
	
		SQL = "SELECT * FROM meddelanden where fran = '" & session("member") & "' and franv = 'visa'"
		'RecSet.Open SQL, Connection, 1, 3
	
	elseif request.querystring("visa") = "" or request.querystring("visa") = "inkorg" then
	
		SQL = "SELECT * FROM meddelanden where till='" & session("member") & "' and tillv = 'visa'"
		'RecSet.Open SQL, Connection, 1, 3
	
	end if
	
	'## -- hur många poster per sida --
	RecSet.PageSize = intPageSize
	
	'## -- öppna recordsetet --
	RecSet.Open SQL, Connection, 1, 3

	if recset.eof then
%><br><br><center>Inga medelanden</center><br><br>
<%
	else
		do until RecSet.EOF or cnt >= intPageSize
			cnt = cnt + 1
			strColor = "#FFFFFF" 
			If cnt Mod 2 = 0 then strColor = "#E9E9E9"
%>
<----- här ska det vara en massa html ----->
<%
			RecSet.MoveNext
		loop

		RecSet.Close
end if
%>

märk att jag plockat bort all oviktig html-kod för att dra ned längden på detta inlägg

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

PatrikBMedlem sedan mars 20002 836 inlägg
#10

del 2 .....

då börjar vi att lägga till en länk till föregående sida och en länk till nästa sida.
Koden lägger du till EFTER att loopen av alla poster har körts:

'## -- sid-navigeringen --
Response.Write "<A href=""" & strScriptName & "?page=" & intPage-1 & """"><< Föregående</A> &#0124; " & _
	"<A href=""" & strScriptName & "?page=" & intPage + 1 & """>Nästa >></A>"

När vi klickar på länkarna så kommer "nästa" eller "föregående" sida att efterfrågas.
För att vi ska kunna visa den efterfrågade sidan så måste vi "fånga upp" just den efterfrågade sidan.
Det gör vi genom att längst upp lägga till:

'## -- vilken sida ska länken gå till, till denna sida --
strScriptName = Request.ServerVariables("SCRIPT_NAME")

'## -- kolla vilken sida som ska visas --
intPage = Request.QueryString("page")
'## -- kolla så att någon sida är vald. om inte visa första sidan --
If intPage = "" Then intPage = 1

Nu har vi en liten sak till att göra.
Vi måste säga till recordsetet vilken sida som ska visas.
Det gör vi genom att innan vi går in i loopen lägga till:

'## -- gå till efterfrågad sida --
RecSet.AbsolutePage = intPage

Din kod bör se ut ungefär så här:

<% 
strScriptName = Request.ServerVariables("SCRIPT_NAME")

intPage = Request.QueryString("page")
If intPage = "" Then intPage = 1

intPageSize = 15

if request.querystring("visa") = "" or request.querystring("visa") = "utkorg" or request.querystring("visa") = "inkorg" then

	if request.querystring("visa") = "utkorg" then
	
		SQL = "SELECT * FROM meddelanden where fran = '" & session("member") & "' and franv = 'visa'"
		'RecSet.Open SQL, Connection, 1, 3
	
	elseif request.querystring("visa") = "" or request.querystring("visa") = "inkorg" then
	
		SQL = "SELECT * FROM meddelanden where till='" & session("member") & "' and tillv = 'visa'"
		'RecSet.Open SQL, Connection, 1, 3
	
	end if
	
	'## -- hur många poster per sida --
	RecSet.PageSize = intPageSize
	
	'## -- öppna recordsetet --
	RecSet.Open SQL, Connection, 1, 3

	if recset.eof then
%>
<----- inga poster ----->
<%
	else
		RecSet.AbsolutePage = intPage
		do until RecSet.EOF or cnt >= intPageSize
			cnt = cnt + 1
			strColor = "#FFFFFF" 
			If cnt Mod 2 = 0 then strColor = "#E9E9E9"
%>
<----- här ska det vara en massa html ----->
<%
			RecSet.MoveNext
		loop

		RecSet.Close
end if

'## -- sid-navigeringen --
Response.Write "<A href=""" & strScriptName & "?page=" & intPage-1 & """"><< Föregående</A> &#0124; " & _
	"<A href=""" & strScriptName & "?page=" & intPage + 1 & """>Nästa >></A>"
%>

hoppas nu att all denna kod fungerar och att du förstått grunderna till pagingen, för detta är den enklaste formen av paging

[r]
OBS!!! ingen felhantering för sid-navigerings länkarna.
Ej heller testad, skriven direkt ...
[/r]

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

[Redigerat av PatrikB den 29 jan 2002]

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#11

Ah tack seriöst jag fattar faktiskt nu :O) tack tack! ett problem bara! Får fel på följande kod

'## -- sid-navigeringen --
Response.Write "<A href=""" & strScriptName & "?page=" & intPage-1 & """"><< Föregående</A> &#0124; " & _
"<A href=""" & strScriptName & "?page=" & intPage + 1 & """>Nästa >></A>"

får felet

Kompileringsfel i Microsoft VBScript fel '800a03ea' 

Syntaxfel 

/StajlLinks 1.0/messbox.asp, rad 98 

Response.Write "<A href=""" & strScriptName & "?page=" & intPage-1 & """"><< Föregående</A> &#0124; " & _
---------------------------------------------------------------------------^

------------------
*brölar ljudligt*

jboy_87Medlem sedan aug. 20011 099 inlägg
#12

prova med mellanslag där??

------------------
ASP är bäst fuck the rest!!!

LarsGMedlem sedan dec. 200012 464 inlägg
#13
Response.Write "<A href=""" & strScriptName & "?page=" & intPage-1 & """><< Föregående</A> &#0124; " & _
"<A href=""" & strScriptName & "?page=" & intPage + 1 & """>Nästa >></A>"

------------------
essentitia preter non sans multiplicandum

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#14

Ah tackar d funkar fin fint nu! Det löjliga är att jag faktiskt såg att d va en " förmycket men glömde testa o ändra det haha ;) tack PatrikB LarsG o alla andra här nu fattar jag äntligen vad all den där koden gör hehe!

------------------
*brölar ljudligt*

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#15

jag gjorde om lite i föregående/nästa länkarna så att föregående inte skulle visas om sidnumret var 1 eller mindre.

<% if not intpage <= 1 then %><A href="<%=strScriptName%>?page=<%=intPage-1%>&visa=<%=korg%>"><< Föregående</A> &#0124;<%end if%>
<A href="<%=strScriptName%>?page=<%=intPage+1%>&visa=<%=korg%>">Nästa >></A>

tänkte sedan att nästa inte skulle visas om det inte fans några fler inlägg att visa. Hur gör man detta?

ett sätt vore ju att räkna antal inlägg med

sidor = "select count(*) from meddelanden where fran = '" & session("member") & "' and franv = 'visa'"

dela sidor med intPageSize och göra det till en variabel, typ antalsidor.

Och sedan göra så att om intpage inte är mindre eller lika med antalsidor så visas inte nästa länken. visst d skulle kunna funka men kag får inte till koden att dela sidor med intpagesize

nån som kan hjälpa mig med den ?

tackar änu en gång!

------------------
*brölar ljudligt*

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#16

a just fan ja sidor blir ju = select count(*) from meddelanden where fran = '" & session("member") & "' and franv = 'visa'

d va ju inte det jag ville ha utan hur många inlägg den fick fram, hur fixar man det? :o)

*tabbar mig hela tiden*

------------------
*brölar ljudligt*

LarsGMedlem sedan dec. 200012 464 inlägg
#17
numberOfPages = (recset.recordCount -1)/intPageSize + 1

------------------
essentitia preter non sans multiplicandum

PatrikBMedlem sedan mars 20002 836 inlägg
#18
If CLng(intPage) <= RecSet.PageCount Then
Response.Write "<A href.....

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

[Redigerat av PatrikB den 30 jan 2002]

ConnyFoxMedlem sedan aug. 20011 087 inlägg
#19

patrik b din kon myskar sig rejält..

fel

Körningsfel i Microsoft VBScript fel '800a000d' 

Inkompatibla typer: 'CLng' 

/StajlLinks 1.0/messbox.asp, rad 109

------------------
*brölar ljudligt*

PatrikBMedlem sedan mars 20002 836 inlägg
#20

vad har intPage för värde?

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)