Jag har problem med en paging-sida (alltså en sida som delar upp poster på flera sidor). Du använder modulusoperatorn. Den talar om hur mycket som blir över vid en heltalsdivision, den så kallade resten. Det finns en bra artikel om paging här på asp-sektionen. Eftersom du måste använda ett annat sätt att öppna ditt recordset på och en lite annorlunda teknik kan det vara bra att få full förståelse hur du skall göra. Jag föreslår att du beräknar antalet sidor med:<br>paging med ASP + MySQL.
Om jag har 3 poster i databasen som skall visas och som i koden ovan vill visa 2 poster per sida så går det inte så bra. Detta eftersom 3/2 inte blir ett heltal. Så därför kan man bara se de första två posterna. Det borde egentligen visas 2 poster på sid 1 och 1 post på sid 2. Men eftersom värdet "totalpages" är 1,5 så finns ju inte sid 2.
Hade jag haft 4 poster i databasen som skulle visas så fungerar det eftersom 4/2 är 2 vilket är ett heltal.
Så hur skall jag skriva för att koden skall fungera.
Hade jag inte använt MySQL så hade jag kunnat använda Paging-exemplet som Pelle skrivit som finns under "Tips & tricks" tror jag.
Jag använder MySQL och koden som jag använder för detta är:
<%
'****************************************
'* mySQL paging, why so fucking hard? *
'* www.netsrac.dk *
'****************************************
'****************************************
'* SETTING *
'****************************************
'Antal records pr. side
pagesize = 2
this = Request.ServerVariables("SCRIPT_NAME")
'****************************************
'* CODE *
'****************************************
page = Request.QueryString("page")
If page = "" Then
page = 1
End if
start = (page - 1) * pagesize
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "lumba"
Set rs = Conn.Execute("select count(*) as antal from gb, medlemmar Where gb.tillID = "&Request.QueryString("tillid") &" AND medlemmar.id="&Session("id"))
total = rs("antal")
Set rs = nothing
totalpages = (total / pagesize)
If totalpages Mod 1 <> 0 Then
totalpages = Int(totalpages) + 1
End if
Response.write("Side " & page & " af " & totalpages)
%>
<table width="100%" border="0" cellspacing="0" cellpadding="2" STYLE="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #000000;">
<%
Set rs = Conn.Execute("SELECT gb.id, gb.id2, gb.tillid, gb.datum, gb.text, medlemmar.username FROM gb, medlemmar Where gb.tillID = "&Request.QueryString("tillid") &" AND medlemmar.id="&Session("id")&" Order By gb.id DESC LIMIT " & start & "," & pagesize)
Do until rs.eof
counter = counter + 1
if counter Mod 2 = 0 then
color="#ffffff"
else
color="#eeeeee"
end if
%>
<tr bgcolor="<%=color%>" width="100%" >
<td> "><%=rs("username")%> (<%=rs("datum")%>)
</td>
<td align="right">
<%If Session("id") = rs("tillID") Then
Response.Write "[Släng] "
else
If Session("id") = rs("ID2") Then
Response.Write "<span class=rod>[Släng]</span> "
End If
End If %>
</td>
</tr>
<tr bgcolor=<%=color%>>
<td colspan="2"><%=Replace(TRIM(Server.HTMLEncode(rs("text"))),vbcrlf,"<br>")%></td>
</tr>
<%
rs.movenext
Loop
%></table>
<table width="100%" border="0" cellspacing="2" cellpadding="0">
<tr>
<td>
<%
Set rs = nothing
Conn.Close
Set Conn = nothing
Response.Write("Gå til side: ")
For i = 1 to totalpages
Response.Write(" " & i & " ")
Next
%>
</td>
</tr>
</table> Sv: paging med ASP + MySQL.
antal_sidor = CInt(antal_poster / poster_per_sida)
if antal_poster MOD poster_per_sida then
antal_sidor = antal_sidor + 1
end ifSv: paging med ASP + MySQL.
Hälsningar
/PelleSv: paging med ASP + MySQL.
totalpages = ((total-1) \ pagesize) + 1<br>
<br>
Skrivit om koden lite. Dumt att skapa flera instanser av ett recordset. Helst när det tar tid att frigöra.<br>
<br>
Tycker allt din fråga ser lite skum ut. Borde inte Medlemmar var bunden till gb i Join'en?
<code>
<%
'Antal records pr. side
Const pagesize = 2
this = Request.ServerVariables("SCRIPT_NAME")
'****************************************
'* CODE *
'****************************************
page = Request.QueryString("page")
If Not IsNumeric(page) Then
page = 1
End if
start = (page - 1) * pagesize
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "lumba"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open "SELECT Count(*) As Antal FROM gbWHERE gb.tillID = " & Request.QueryString("tillid"), Conn
total = rs("antal")
rs.Close
totalpages = ((total-1) \ pagesize) + 1
Response.write("Sida " & page & " av " & totalpages)
Colors = Array("#ffffff", "#eeeeee")
%>
<table width="100%" border="0" cellspacing="0" cellpadding="2" STYLE="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; color: #000000;">
<%
rs.Open "SELECT gb.id, gb.id2, gb.tillid, gb.datum, gb.text, medlemmar.username FROM gb, medlemmar Where gb.tillID = "&Request.QueryString("tillid") &" AND medlemmar.id=" & Session("id") & " ORDER BY gb.id DESC LIMIT " & start & ", " & pagesize, Conn
Do until rs.eof
counter = (counter + 1) Mod 2
color = Colors(counter)
%>
<tr bgcolor="<%=color%>" width="100%" >
<td> "><%=rs("username")%> (<%=rs("datum")%>)
</td>
<td align="right">
<%
If rs("tillID") = Session("id") Then
Response.Write "[Släng] "
ElseIf Session("id") = rs("ID2") Then
Response.Write "<span class=rod>[Släng]</span> "
End If
%>
</td>
</tr>
<tr bgcolor=<%=color%>>
<td colspan="2"><%=Replace(TRIM(Server.HTMLEncode(rs("text"))),vbcrlf,"<br>")%></td>
</tr>
<%
rs.movenext
Loop
%></table>
<table width="100%" border="0" cellspacing="2" cellpadding="0">
<tr>
<td>
<%
rs.Close
Set rs = nothing
Conn.Close
Set Conn = nothing
Response.Write("Gå til side: ")
For i = 1 to totalpages
Response.Write(" " & i & " ")
Next
%>
</td>
</tr>
</table>
</code>