Avatar billede Slettet bruger
01. januar 2005 - 21:07 Der er 8 kommentarer og
1 løsning

En Frem/Tilbage-funktion til en MySQL-database

Jeg sidder og leger med en hjemmeside, hvor jeg har lavet en billed-sektion opdelt i kategorier, som har ID'er.

Når man er i en kategori, skal der være to links:
- Tilbage-link der fører tilbage til forrig billed-sektion: Altså ID - 1
- Frem-link der fører frem til næste billed-sektion: Altså ID + 1

Derudover skal siden checke om den ID overhovedet eksisterer i databasen. Hvis den ikke gør, skal linket før frem til næste ID igen hvis det er et frem-link, eller til forrige ID igen hvis det er et tilbage-link.

Er der nogen der har forslag til hvordan dette kan gøres?
Avatar billede mortvader Nybegynder
01. januar 2005 - 21:54 #1
curid=request.querystring("picno")

if curid<>"" then
else
  curid=1
end if

rs.open "select * from billeder where id="&curid-1
if not rs.eof then
  response.write "<a href='?picno="&curid-1&"'>Forrige</a>"
end if
rs.close

rs.open "select * from billeder where id="&curid
if not rs.eof
  response.write "<img src='..billeder..'>"
end if
rs.close

rs.open "select * from billeder where id="&curid+1
if not rs.eof then
  response.write "<a href='?picno="&curid+1&"'>Forrige</a>"
end if
rs.close
Avatar billede ellebaek Nybegynder
02. januar 2005 - 01:07 #2
<%
curid=request.querystring("picno")
set myConn = Server.createObject("adodb.connection")
myConn.open strtildb

if curid = "" then
  curid=1
end if

set rs = myConn.execute("select * from billeder where id= " & curid & " LIMIT 1")
if not rs.eof
  billede = rs("billede")
else
set rs2 = myConn.execute("SELECT id from billeder where id > " & curid & " LIMIT 1")
if not rs2.eof then
response.redirect ("?picno="&rs2("id"))
else
rs2.close
set rs2 = myConn.execute("SELECT id FROM billeder WHERE id < " & curid & " LIMIT 1")
if not rs2.eof then
response.redirect ("?picno="&rs2("id"))
else
response.write "No pictures found"
end if
rs2.close

set rs2 = myConn.execute("select id from billeder where id < " & curid & " LIMIT 1")
if not rs2.eof then
  response.write "<a href='?picno="&rs2("id")&"'>Forrige</a>"
end if
rs2.close


response.write "<img src="""&rs("billede")&""">"


set rs2 = myConn.execute("select id from billeder where id > " & curid+1 & "LIMIT 1")
if not rs2.eof then
  response.write "<a href='?picno="&rs2("id")&"'>Forrige</a>"
end if
rs2.close
set rs2 = nothing
rs.close
set rs = nothing
%>

Du kan gøre det på denne måde...
Det gør dog ikke helt som du ønsker med hensyn til frem og tilbage links.
Hvis den møder et id den ikke kender, så spørger den efter et id der er en større.

Hvis det ikke findes spørger den på et der er en lavere..
Hvis det heller ikke findes, så er der ikke nogen billeder, og det skrives til brugeren...
Ellers vises frem og tilbagelinks.. samt billeder...

Så skal du bare tilpasse stien til databasen, samt feltnavnene..
Avatar billede ellebaek Nybegynder
02. januar 2005 - 01:09 #3
hmm..

lige lidt rod i if og end if..

Sådan her skal det være:

<%
curid=request.querystring("picno")
set myConn = Server.createObject("adodb.connection")
myConn.open strtildb

if curid = "" then
  curid=1
end if

set rs = myConn.execute("select * from billeder where id= " & curid & " LIMIT 1")
if not rs.eof
  billede = rs("billede")
else
  set rs2 = myConn.execute("SELECT id from billeder where id > " & curid & " LIMIT 1")
  if not rs2.eof then
    response.redirect ("?picno="&rs2("id"))
  else
    rs2.close
    set rs2 = myConn.execute("SELECT id FROM billeder WHERE id < " & curid & " LIMIT 1")
    if not rs2.eof then
      response.redirect ("?picno="&rs2("id"))
    else
      response.write "No pictures found"
    end if
  end if
end if
rs2.close

set rs2 = myConn.execute("select id from billeder where id < " & curid & " LIMIT 1")
if not rs2.eof then
  response.write "<a href='?picno="&rs2("id")&"'>Forrige</a>"
end if
rs2.close


response.write "<img src="""&rs("billede")&""">"


set rs2 = myConn.execute("select id from billeder where id > " & curid+1 & "LIMIT 1")
if not rs2.eof then
  response.write "<a href='?picno="&rs2("id")&"'>Forrige</a>"
end if
rs2.close
set rs2 = nothing
rs.close
set rs = nothing
%>
Avatar billede ellebaek Nybegynder
02. januar 2005 - 01:10 #4
og måske skal du skrive denne:
if curid = "" then
  curid=1
end if

om til:
if curid = "" OR not isNumeric(curid) then
  curid=1
end if

så er du sikker på at brugeren ikke skriver en værdi i adressefeltet og derfor får siden til at lave en database fejl...
Avatar billede ellebaek Nybegynder
02. januar 2005 - 01:11 #5
og så et svar.. Så tror jeg jeg har husket det hele..
Så smutter jeg vidst i seng..
Avatar billede Slettet bruger
02. januar 2005 - 12:40 #6
@ellebaek: Jeg sad og knoklede med koden i næsten en time, men kunne bare ikke få de til at fungere, desværre.

@mortvader: Din kode fungerede fint, når jeg lavede små ændringer og justeringer. Her er hvad jeg har gjort:

StrCatNow = request("cat")
if StrCatNow = "" OR not isNumeric(StrCatNow) then
    StrCatNow = 1
end if

Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open "SELECT * FROM galleri_cat where ID = "&StrCatNow-1&"", Conn, 1, 3
if not rs.EOF then
    response.write("<a href='?content=galleri&cat="&StrCatNow-1&"'>Forrige</a>")
else
    response.write("Forrige")
end if
rs.close

Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open "SELECT * FROM galleri_cat where ID = "&StrCatNow+1&"", Conn, 1, 3
if not rs.EOF then
    response.write("<a href='?content=galleri&cat="&StrCatNow+1&"'>Næste</a>")
else
    response.write("Næste")
end if
rs.close
Avatar billede ellebaek Nybegynder
02. januar 2005 - 13:52 #7
vil jeg gerne lige kommentere lidt på..

For det du nu har givet points for kan jo ikke chekke for om et id ikke eksistere ??

Altså hvis du har en billedeserie med følgende id:
1
2
4
5
6
8
så vil du få problemer med billederne 3 og 7, da de ikke eksistere..

vil mene du skal benytte den her for at sikre brugerne ikke rammer billeder der ikke findes: prøv det og se om det ikke virker også..!?

<%
curid=request.querystring("picno")
set myConn = Server.createObject("adodb.recordset")

if curid = "" or NOT isnumeric(curid) then
  curid=1
end if

rs.Open "select * FROM galleri_cat where id= " & curid & " LIMIT 1", Conn, 1, 3

if not rs.eof
  billede = rs("billede")
  rs.close
else
  rs.close
  rs.open "SELECT id FROM galleri_cat where id > " & curid & " LIMIT 1", Conn, 1, 3
  if not rs.eof then
    response.redirect ("?picno="&rs("id"))
    rs.close
  else
    rs.close
    rs.open SELECT id FROM galleri_cat WHERE id < " & curid & " LIMIT 1", Conn, 1, 3
    if not rs.eof then
      rs.close
      response.redirect ("?picno="&rs2("id"))
    else
      rs.close
      response.write "No pictures found"
    end if
  end if
end if

rs.open "select id FROM galleri_cat where id < " & curid & " LIMIT 1", Conn, 1, 3
if not rs.eof then
  response.write "<a href='?picno="&rs("id")&"'>Forrige</a>"
else
  response.write "Forrige"
end if
rs.close


response.write "<img src="""&billede&""">"


rs.open "select id FROM galleri_cat where id > " & curid+1 & "LIMIT 1", Conn, 1, 3
if not rs.eof then
  response.write "<a href='?picno="&rs("id")&"'>Næste</a>"
else
  response.write "Næste"
end if
rs.close
set rs = nothing
%>
Avatar billede mortvader Nybegynder
02. januar 2005 - 14:05 #8
Kan sagtens se din pointe, ellebaek. Jeg ville nok heller ikke selv lave det sådan, men det er det han efterlyser i sin oprindelige post.
Avatar billede ellebaek Nybegynder
02. januar 2005 - 14:39 #9
mortvader-> Ja selvfølgelig... ;-)

Havde lidt misforstået den del..
derudover skal siden checke om den ID overhovedet eksisterer i databasen. Hvis den ikke gør, skal linket før frem til næste ID igen hvis det er et frem-link, eller til forrige ID igen hvis det er et tilbage-link.

Havde egentlig forstået ovenstående som at hvis id'et for billedet ikke fandtes i databasen, så skulle der sendes videre til det næste billede der fandtes i databasen..

men aliaarhus -> Jeg synes du skal prøve det jeg skrev til sidst netop for at sikre der er et billede der bliver vist til brugeren..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester