VinnarenMedlem sedan sep. 2005833 inlägg Hej
Jag har ett pageing system som fungerar i Access, men nu när jag ska gå över till MySQL funkar den inte.
Har koden:
intPageSize = 50
intPage = Request.QueryString("page")
If intPage = "" Then intPage = 1
strSQL ="SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv, land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM ((land INNER JOIN spelare ON land.landID = spelare.landID)LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID) WHERE playAktiv = 1 ORDER BY "&order_spelare&""
Set objRS = Server.CreateObject("ADODB.Recordset")
With objRS
.ActiveConnection = objConn
.Source = strSQL
.PageSize = intPageSize
.CursorType = 3
.LockType = 1
.Open
End With
'## -- visa rätt sida i recordsetet --
objRS.AbsolutePage = intPage
'## -- hur många sidor består recordsetet av --
intTotalPages = objRS.PageCount
'## -- loopa igenom recordsetet och visa posterna för besökaren/användaren --
Do Until objRS.EOF OR intCounter >= intPageSize
intCounter = intCounter + 1
Call PageNavigationPlayers(intPage, intTotalPages)
Sub PageNavigationPlayers(ByVal Page, TotalPages)
Dim strScriptName
'## -- denna sidas namn --
strScriptName = "index.asp?do=players"
'## -- länk till föregående sida --
'## -- kontrollera att det inte är första sidan som visas --
If CInt(Page) > 1 Then
'## -- inte första sidan som visas så gör en länk --
Response.Write "<a href=""" & strScriptName & "&page=" & Page - 1 & """><< Föregående</a> "
End If
'## -- bygg upp själva pagebaren, dvs varje sidnummer ska ha en länk
'## -- så att besökaren snabbt kan ta sig till rätt sida --
For N = 1 To CInt(TotalPages)
If N <> CInt(Page) Then
'## -- ej aktuell sida, länka --
Response.Write "<a href=""" & strScriptName &"&page=" & N & """>" & N & "</a> "
Else
'## -- aktuell sida, länka ej --
Response.Write "<b>" & N & "</b> "
End If
Next
'## -- länk till nästa sida. om vi står på sista sidan ska den ej vara länkad --
If CInt(Page) < CInt(TotalPages) Then
'## -- vi är inte på sista sidan --
Response.Write "<a href="""&strScriptName&"&page=" & Page + 1 & """>Nästa >></a>"
End If
End Sub
Hur får jag igång den även i MySQL??
Tacksam för all hjälp :stud
Som jag ser det är det egentligen bara en sql fråga
SELECT
spelare.playID,
spelare.lagID,
spelare.landID AS spelare_landID,
spelare.playFnamn,
spelare.playEnamn,
spelare.playFodd,
spelare.playFodelseort,
spelare.playPosition,
spelare.playSkott,
spelare.playAktiv,
land.landID AS land_landID,
land.land,
land.flagga,
klubbar.lagNamn
FROM
land
INNER JOIN spelare on land.LandId = spelare.landId
LEFT JOIN Klubbar ON spelare.lagId = klubbar.LagId
WHERE
playAktiv = 1 Order By " & order_Spelare
har inte direkt gjort några större ändringar (tagit bort () + rensat lite & "" i slutet ).
VinnarenMedlem sedan sep. 2005833 inlägg tack, men tyvärr så hjälpte det inte. Sidnavigeringen vill inte komma fram, när jag hade Access så syntes den längst ner, men nu e den borta. De 50 första posterna kommer fram, men inte navigeringen
Vad kan det vara för fel? :r
VinnarenMedlem sedan sep. 2005833 inlägg ingen som vet vad det kan vara för fel? Funkar ju med Access :q :OO
får du ut något ifrån ditt Recordset alls?
VinnarenMedlem sedan sep. 2005833 inlägg jag får ju ut de 50 första posterna. Men sidnavigeringen är som bortblåst :(
vad är intPage och intTotalPages för värde?
VinnarenMedlem sedan sep. 2005833 inlägg intPage har 1
intTotalPages har -1
i access har intTotalPages 15
SaschMedlem sedan nov. 2002830 inlägg Kan man inte helt enkelt göra en Count(ID) och göra en snabb beräkning på det där?
VinnarenMedlem sedan sep. 2005833 inlägg vet inte redigt hur/vart man skulle ha den räkningen.
Har tagit reda på att det är på:
'## -- hur många sidor består recordsetet av --
intTotalPages = objRS.PageCount
som intTotalPages får värdet -1
skriver jag manuellt dit intTotalPages = 15 så kommer sidnavigeringen fram, men när man navigerar så är det samma poster som kommer fram.
VinnarenMedlem sedan sep. 2005833 inlägg försöker mig på att skriva om uträkningen. har följande:
posterPerSida = 50
Set objRS = objConn.Execute("SELECT COUNT(*) as AntalPoster FROM spelare WHERE playAktiv = 1")
antalPoster = objRS("antalPoster")
objRS.Close
set objRS = nothing
aktuellSida = CLng(Request.QueryString("sida"))
min = 0
max = posterPerSida
if aktuellSida = "" or aktuellSida = 0 then
aktuellSida = 1
end if
if aktuellSida = 1 then
min = 0
max = posterPerSida
else
min = posterPerSida * aktuellSida
max = min + posterPerSida
end if
antalSidor = (antalPoster -(antalPoster mod posterPerSida))/posterPerSida
Set objRS = objConn.Execute("SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv,
land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM land INNER JOIN spelare ON land.landID = spelare.landID LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID
WHERE playAktiv = 1 ORDER BY "&order_spelare&" LIMIT "& min & "," & max&"")
Problemen är följande:
antalSidor blir tom, den innehåller inte uträkningen.
när man kommer in på sidan börjar den på A. men när man har gått fram och sedan ska gå tillbaka till första sidan så hamnar man på B, sida i QueryString måste alltså vara 0 för att komma tillbaka på A.
Hur löser jag detta?
SaschMedlem sedan nov. 2002830 inlägg Vad skulle kunna göra (eftersom det låter som att du inte längre använder Access) använda Offset för att ta reda på var du är. Samt göra en Count(ID) vid varje, bökigt jovisst.
MySQL använder offset för att starta från valt nummer (Räknar till vad man satt offset till och sedan spottar ut posterna).
'##
TotaltAntalPoster = 365 '# Räkna, men i detta fallet ett dummytal
PosterPerSida = 15
AktuellPlats = cInt(Request.QueryString("offset"))
AktuellSida = Round(AktuellPlats/PosterPerSida)
'Response.Write (AktuellPlats &"<br />")
'Response.Write (AktuellSida &"<br />")
TotaltAntalSidor = Round(TotaltAntalPoster/PosterPerSida)
min = AktuellPlats
max = aktuellplats + PosterPerSida
'Set objRS = objConn.Execute("SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv,
'land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM land INNER JOIN spelare ON land.landID = spelare.landID LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID
'WHERE playAktiv = 1 ORDER BY "&order_spelare&" LIMIT "& min & "," & max &"")
' # Loopa ut alla poster här enligt principen nedan.
For J = min To max - 1
IF J <= TotaltAntalPoster Then
Response.Write ( J &"<br />"& vbCrlf)
End IF
Next
' # Visar textfunktionaliteten
IF AktuellSida > 1 Then
Response.Write ("<a href='visaposter.asp?offset="& AktuellPlats - PosterPerSida &"'>Tidigare</a>")
Else
Response.Write ("Tidigare")
End IF
Response.Write (" || ")
For i = 1 To TotaltAntalSidor
IF I = AktuellSida Then
Response.Write ( i &" ")
Else
Response.Write(" <a href='visaposter.asp?offset="& I*PosterPerSida &"'>"& I &"</a> ")
End IF
Next
IF AktuellSida < TotaltAntalSidor Then
Response.Write ("<a href='visaposter.asp?offset="& AktuellPlats + PosterPerSida &"'>Nästa</a>")
Else
Response.Write ("Nästa")
End IF
Koden ovan bör fungera, smällde ihop på ett par minuter ;) Ändra bara så att du får med din count och så du loopar ut dina poster...
Dessutom har du gjort fel med antalSidor, ska se ut enligt nedan, men nu behövs det inte efter min fix :moose :
antalSidor = (antalPoster -(antalPoster mod posterPerSida)/posterPerSida)
/r grammatik och lite rättstavning.
VinnarenMedlem sedan sep. 2005833 inlägg tack, men den funkade inte så bra. Den hämtar ut samma post 50 gånger, samt sidnavigeringen kommer inte fram :r
SaschMedlem sedan nov. 2002830 inlägg Jag har inga problem med detta. Nu har jag testat med en skarp databas dessutom... Hur ser din kod ut nu?
VinnarenMedlem sedan sep. 2005833 inlägg ok, har följande:
TotaltAntalPoster = 365 '# Räkna, men i detta fallet ett dummytal
PosterPerSida = 15
AktuellPlats = cInt(Request.QueryString("sida"))
AktuellSida = Round(AktuellPlats/PosterPerSida)
'Response.Write (AktuellPlats &"<br />")
'Response.Write (AktuellSida &"<br />")
TotaltAntalSidor = Round(TotaltAntalPoster/PosterPerSida)
min = AktuellPlats
max = aktuellplats + PosterPerSida
Set objRS = objConn.Execute("SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv, land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM land INNER JOIN spelare ON land.landID = spelare.landID LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID WHERE playAktiv = 1 ORDER BY "&order_spelare&" LIMIT "& min & "," & max&"")
IF objRS.EOF THEN
Response.Write "<tr><td id=""resultat_saknas"" colspan=""8"">Det finns inga spelare att visa</td></tr>"
ELSE
For J = min To max - 1
IF J <= TotaltAntalPoster Then
%>
<tr class="spelare_tabell_brodtext spelare_tabell_varannan">
<td class="spelare_tabell_lank">
<a title="Visa spelarinfo" href="index.asp?do=players&play=player&ID=<%=objRS("playID")%>">
<%response.Write ""&objRS("playEnamn")&", "&objRS("playFnamn")&""%>
</a>
</td>
</tr>
<%
end if
Next
end if
objRS.Close
Set objRS = nothing
%>
<%
'## Sidnavigeringen ##'
response.Write "<div class=""spelare_sidNavigering"">"
'Response.Write intPage
'Response.Write "<br />"
'Response.Write intTotalPages
IF AktuellSida > 1 Then
Response.Write ("<a href='index.asp?do=players&offset="& AktuellPlats - PosterPerSida &"'>Tidigare</a>")
Else
Response.Write ("Tidigare")
End IF
Response.Write (" || ")
For i = 1 To TotaltAntalSidor
IF I = AktuellSida Then
Response.Write ( i &" ")
Else
Response.Write(" <a href='index.asp?do=players&sida="& I*PosterPerSida &"'>"& I &"</a> ")
End IF
Next
IF AktuellSida < TotaltAntalSidor Then
Response.Write ("<a href='index.asp?do=players&sida="& AktuellPlats + PosterPerSida &"'>Nästa</a>")
Else
Response.Write ("Nästa")
End IF
response.Write "</div>"
sidnumreringen funkar inte så bra?
index.asp?do=players&sida=30
blir den på sida 2 :S
SaschMedlem sedan nov. 2002830 inlägg
SET rsCount = Server.CreateObject("ADODB.RecordSet")
SET rsCount = objConn.Execute ("SELECT Count(ID) As AntalPoster FROM din tabell WHERE playAktiv = 1 ")
TotaltAntalPoster = cInt(rsCount("AntalPoster")) ' ## kollar antalet poster för att göra rätt beräkningar
rsCount.Close
SET rsCount = Nothing
'TotaltAntalPoster = 365 '# Räkna, men i detta fallet ett dummytal
PosterPerSida = 15
AktuellPlats = cInt(Request.QueryString("offset"))
AktuellSida = Round(AktuellPlats/PosterPerSida)
'Response.Write (AktuellPlats &"<br />")
'Response.Write (AktuellSida &"<br />")
IF Request.QueryString("offset") = "" Then
AktuellPlats = 0
AktuellSida = 1
End IF
TotaltAntalSidor = Round(TotaltAntalPoster/PosterPerSida)
min = AktuellPlats
max = aktuellplats + PosterPerSida
Set objRS = objConn.Execute("SELECT spelare.playID, spelare.lagID, spelare.landID AS spelare_landID, spelare.playFnamn, spelare.playEnamn, spelare.playFodd, spelare.playFodelseort, spelare.playPosition, spelare.playSkott, spelare.playAktiv, land.landID AS land_landID, land.land, land.flagga, klubbar.lagNamn FROM land INNER JOIN spelare ON land.landID = spelare.landID LEFT JOIN klubbar ON spelare.lagID = klubbar.lagID WHERE playAktiv = 1 ORDER BY "&order_spelare&" LIMIT "& min & "," & max&"")
' # Kontroll ser till att du får rätt antal poster per sida.
Kontroll = min
Do until objRS.EOF OR Kontroll = Max - 1
%>
<tr class="spelare_tabell_brodtext spelare_tabell_varannan">
<td class="spelare_tabell_lank">
<a title="Visa spelarinfo" href="index.asp?do=players&play=player&ID=<%=objRS("playID")%>">
<%response.Write ""&objRS("playEnamn")&", "&objRS("playFnamn")&""%>
</a>
</td>
</tr>
%>
Kontroll = Kontroll + 1
objRS.MoveNext
Loop
' # Loopa ut alla poster här enligt principen nedan.
' For J = min To max - 1
' IF J <= TotaltAntalPoster Then
' Response.Write ( J &"<br />"& vbCrlf)
' End IF
' Next
objRS.Close
SET objRS = Nothing
%>
<%
' # Visar Tidigare, Antal sidor, samt Nästa sida - allt för navigeringens skull ;-)
' Några få ändringar sedan sist, men bugfixar och liknande
response.Write "<div class=""spelare_sidNavigering"">"
IF AktuellSida > 0 Then
Response.Write ("<a href='index.asp?do=players&sida="& AktuellPlats - PosterPerSida &"'>Tidigare</a>")
Else
Response.Write ("Tidigare")
End IF
Response.Write (" || ")
z = 1
For i = 0 To TotaltAntalSidor
IF I = AktuellSida Then
Response.Write ( z &" ")
Else
Response.Write(" <a href='index.asp?do=players&sida="& I*PosterPerSida &"'>"& z &"</a> ")
End IF
z = z + 1
Next
Response.Write (" || ")
IF AktuellSida < TotaltAntalSidor Then
Response.Write ("<a href='index.asp?do=players&sida="& AktuellPlats + PosterPerSida &"'>Nästa</a>")
Else
Response.Write ("Nästa")
End IF
response.Write "</div>"
Jag har moddat mitt "skript" så att det bör fungera för dig nu - vill du kan du ju göra egna utträkningar för att få "sida" till att vara sida och inte offset - som det fungerar nu för övrigt. Du bör dock kika igenom första anropet (där man räknar ut totalt antal poster för totala sammanräkningen) då du ska skriva in ditt tabellnamn där.
Även gjort mindre bugfixningar i navigeringen så att det ska stämma lite bättre. Lycka till nu då för nu är det tekniskt sett bara att klippa och klistra över ditt förra skriveri.
VinnarenMedlem sedan sep. 2005833 inlägg ok tack, nu kommer det inte fram samma poster. men navigeringen funkar inte. det står bara 1.
när man trycker på tillbaka så blir det:
index.asp?do=players&sida=-50
framåt går inte klicka på :r
SaschMedlem sedan nov. 2002830 inlägg
Vinnaren skrev:
ok tack, nu kommer det inte fram samma poster. men navigeringen funkar inte. det står bara 1.
när man trycker på tillbaka så blir det:
index.asp?do=players&sida=-50
framåt går inte klicka på :r
Suck. Ändra alla Request.QueryString("offset") till Request.QueryString("sida"). Klart det inte navigeringen fungerar då. :OO
Tydligen missat ett par.
/R:
Du får göra en egen fix så att man inte kan gå minus på pagingsystemet. ;)
IF Summan av = aktuellsida - antalposterpersida < 0 Then
aktuellsida = 0
End IF
eller nåt sånt nere vid "tidigare"-navigationen. Se igenom och så. Det klarar du väl själv?
VinnarenMedlem sedan sep. 2005833 inlägg fixat, men problemet är att det bara kommer fram en etta, rätt "svar" ska vara 1 tom 15. Går trycka tillbaka, blir då
index.asp?do=players&sida=-50
sen framåt
index.asp?do=players&sida=0
sen går det inte navigera mer :r
SaschMedlem sedan nov. 2002830 inlägg Du ska egentligen få error på -50 egentligen. Men den grejjen ska väl gå och lösa på egen hand om du går igenom hur det hela fungerar. Se http://www.webforum.nu/showthread.php?p=1353685#post1353685 (redigerade avsnittet).
/r igen: Du kan flytta den kollen till toppen nästan egentligen.