Avatar billede no_doubt Nybegynder
31. oktober 2006 - 23:01 Der er 12 kommentarer og
2 løsninger

fejl med "paging"

Siden her har koden under.
http://www.firmdesign.dk/galleri/vis.asp?mappe=Mark

Men i mappen Mark er der syv billeder så hvorfor kommer der ikke et "Vis næste side" frem ?
Hvis jeg smider 8 op, kommer linket
-------------------------------------------------
<%
function sortArr(myarr, myarrdato)

for k = 0 to ubound(myarr)
minindex = k
for j= k+1 to ubound(myarrdato)
if myarrdato(j) > myarrdato(minindex) then
minindex = j
end if
next
tmp = myarr(k)
myarr(k) = myarr(minindex)
myarr(minindex) = tmp
tmp2 = myarrdato(k)
myarrdato(k) = myarrdato(minindex)
myarrdato(minindex) = tmp2
next

end function

antal = 0
start = request.querystring("start")
if start = "" then
start = 0
end if

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(server.mappath("./"&request.querystring("mappe")&""))
Set fc = f.Files
thisfile = right(request.servervariables("script_name"), len(request.servervariables("script_name")) - instrrev(request.servervariables("script_name"), "/"))
For Each billed in fc

navn = lCase(Billed.name)
if navn <> thisfile AND right(navn, 3) <> "asp" AND right(navn, 3) <> "htm" AND right(navn, 4) <> "html" AND right(navn, 3) <> "mdb" then
arrayBuild = arrayBuild & billed.name & "|"
arraybuild2 = arraybuild2 & billed.datelastmodified & "|"
end if
next
arrayBuild = left(arrayBuild, (len(arrayBuild) - 1))
myArray = Split(arrayBuild, "|")
myArray2 = Split(arrayBuild2, "|")

call sortArr(myArray, myarray2)

Antalsider = int(ubound(myarray) / 6)

for i = start to (start + 5)
if i <= ubound(myarray) then

if antal = 0 then
Response.Write "<TR>"
end if
%>
        <td bordercolor="#000000" valign="middle"><p align="center">
        <a href="#" onclick="popWin('./<%=request.querystring("mappe")%>/<%=myarray(i)%>');return false;">
        <span style="text-decoration: none">
        <img src="./<%=request.querystring("mappe")%>/<%=myarray(i)%>" width="100" height="75" alt="" style="border: 1px solid #000000"></span></a>
        </td>
<%
end if

if antal = 1 then
Response.Write "</TR>"
antal = 0
else
antal = antal + 1
end if
next

%></tr>
</table>
        <p align="center">
<%
if start <> 0 then
response.write("<a href='"&request.servervariables("script_name")&"?mappe="&request.querystring("mappe")&"&start=" & (start - 6) & "''><font face='Arial' style='text-decoration: none' size='2' color='#000000'>Forrige side</font></a>")
end if

if start <> 0 AND ubound(myarray) > start + 6 then
response.write("<font color='#000000' face='Arial' size='2'>&nbsp;/&nbsp;</font>")
end if

if ubound(myarray) > start + 6 then
response.write("<a href='"&request.servervariables("script_name")&"?mappe="&request.querystring("mappe")&"&start=" & (start + 6) & "''><font face='Arial' style='text-decoration: none' size='2' color='#000000'>Næste side</font></a>")
end if
%>
Avatar billede thesurfer Nybegynder
01. november 2006 - 00:57 #1
Prøv med "+ 5": if ubound(myarray) > start + 6 then

Du skal også lige checke om start er < 0..
Avatar billede thesurfer Nybegynder
01. november 2006 - 00:59 #2
Denne her giver fejl: http://www.firmdesign.dk/galleri/vis.asp?mappe=Mark&start=-1

Når siden loades (når request.querystring("start") ikke har nogen værdi) skal start sættes til 0..

Men prøv med "+ 5" i stedet for "+ 6" her: if ubound(myarray) > start + 6 then
Avatar billede thesurfer Nybegynder
01. november 2006 - 01:31 #3
Jeg har lige testet det med 13 billeder og "+ 5" i stedet for "+6"..

Det virker perfekt: Man kan klikke 2x Næste, og så er der 1 billede tilbage.

6 * 2 = 12 og så er der 1 tilbage :-)

- Svar.
Avatar billede no_doubt Nybegynder
01. november 2006 - 09:19 #4
hvor skal jeg checke om starte er < 0 ?
Avatar billede thesurfer Nybegynder
01. november 2006 - 09:32 #5
Denne del er ikke helt iorden:

antal = 0
start = request.querystring("start")
if start = "" then
start = 0
end if

Du spørger på en lidt forkert måde.. En bedre måde ville være:

start = request.querystring("start")
if start = "" OR CInt(start) < 0 then start = 0

Dvs, "HVIS start er tom ELLER start er under nul SÅ sæt start til 0"

Eventuelt sådan her:
if start = "" then
start = 0
else
start = 0
if CInt(start) < 0 then start = 0
end if

..hvis du skulle få et problem med [start = "" OR CInt(start)]-delen, hvis start indeholder bogstaver..

Du kunne nok undgå et crash ved at bruge "On Error Resume Next" i toppen af siden..
Det betyder at den skal forsætte, selvom der opstår fejl..
Avatar billede thesurfer Nybegynder
01. november 2006 - 09:38 #6
Du sikre dig heller ikke, om man nu også har valgt en mappe:

Set f = fs.GetFolder(server.mappath("./"&request.querystring("mappe")&""))

Du skal tænke mere på sikkerhed osv.. der er f.eks. include-filer, som typisk har endelsen "inc".. eksempel: database_forbindelse.inc

Med dit nuværende script, vil man kunne downloade database_forbindelse.inc og se forbindelsen til din database.. og hvis din database ikke er placeret i en sikret mappe (typisk "db" ude i roden), hvor man ikke har adgang, vil man kunne downloade din database, og se alle brugernavn og kodeord..

En forbedring til dit script vil være:
- Undersøger querystrengen for nøgleord, som f.eks. "./", ".." osv
- Undersøg om den angivne mappe findes
- I stedet for at spørge om endelsen IKKE ER "asp,htm,html,mdb", spørg om endelsen ER "jpg,gif,png,bmp"


Man må aldrig stole på brugeren!
Alt hvad der foregår på klientsiden SKAL valideres, da det kan crashe din side.
Avatar billede thesurfer Nybegynder
01. november 2006 - 09:42 #7
Jeg retter lige "if start =" sætningen..
Avatar billede no_doubt Nybegynder
01. november 2006 - 09:43 #8
kan du hjælpe med omskrivningen, også således den ikke melder fejl når mappen er tom
Avatar billede thesurfer Nybegynder
01. november 2006 - 09:52 #9
En stor del af scriptet skal skrives om..
Jeg vil kigge på det i løbet af dagen / efter skole..
Avatar billede no_doubt Nybegynder
01. november 2006 - 10:08 #10
fedt - takker
Avatar billede thesurfer Nybegynder
01. november 2006 - 15:34 #11
Der er sikkert plads til forbedringer, men her er koden:

<%
option explicit ' Alle variabler SKAL defineres/dimmes! -- Så undgår du stavefejl
response.buffer = true
on error resume next ' Fortsæt, selv om der opstår fejl -- Check med If err.number <> 0 then DerErOpståetEnFejl
dim stop_udskrivning, fejlBesked
stop_udskrivning = false
fejlBesked = ""

dim start

function sortArr(arrFilnavn, arrDato)
dim k, minindex, j, tmp, tmp2
for k = 0 to ubound(arrFilnavn)
    minindex = k
    for j= k+1 to ubound(arrDato)
        if arrDato(j) > arrDato(minindex) then minindex = j
    next
    tmp = arrFilnavn(k)
    arrFilnavn(k) = arrFilnavn(minindex)
    arrFilnavn(minindex) = tmp
    tmp2 = arrDato(k)
    arrDato(k) = arrDato(minindex)
    arrDato(minindex) = tmp2
next
end function

sub UdskrivForrigeNaeste(arrFilnavne)
dim link
link = "<a href='?mappe=" & billede_mappe & "&start="

dim slash, forrige, naeste
forrige = "Forrige side"
slash = "/"
naeste = "N&aelig;ste side"

if start <> 0 then forrige = link & (start - 6) & "'>Forrige side</a>"
if start <> 0 AND ubound(arrFilnavne) > start + 5 then slash = " / "
if ubound(arrFilnavne) > start + 5 then naeste = link & (start + 6) & "'>Næste side</a>"

dim tabel
tabel = ""
tabel = tabel & "<table border=0 style=""width:237px;color:#000000;font-family:arial;font-size:12px"">"
tabel = tabel & "<tr>"
tabel = tabel & "    <td style=""width:78px;text-align:right"">$forrige</td>"
tabel = tabel & "    <td style=""width:5px;text-align:center"">$slash</td>"
tabel = tabel & "    <td style=""width:78px;text-align:left"">$naeste</td>"
tabel = tabel & "</tr>"
tabel = tabel & "</table>"

tabel = replace(tabel, "$forrige", forrige)
tabel = replace(tabel, "$slash", slash)
tabel = replace(tabel, "$naeste", naeste)
response.write tabel
end sub


%>
<script language="javascript" type="text/javascript">
    function popWin(file){
      newWin=window.open("","","width=300,height=200,status=no");
      txt='<ht'+'ml><he'+'ad><ti'+'tle>filen<\57ti'+'tle><scri';
      txt+='pt language="javascript" type="text/javascript">';
      txt+='function resPic(){h=document.images[0].scrollHeight;';
      txt+='w=document.images[0].scrollWidth;hm=screen.availHeight;wm=screen.availWidth;';
      txt+='if(h>hm){w=w*hm/h;h=hm;document.images[0].style.width=w+"px";document.images[0].style.height=h+"px";};'
      txt+='if(w>wm){h=h*wm/w;w=wm;document.images[0].style.width=w+"px";document.images[0].style.height=h+"px";};'
      txt+='window.resizeTo(w+6,h+32);window.moveTo((screen.availWidth-w-6)/2,(screen.availHeight-h-32)/2)}<\57scri';
      txt+='pt><\57he'+'ad><bo'+'dy style="overflow:hidden;';
      txt+='border:0px;margin:0px"><i'+'mg src="'+file+'" style="top:0px;left:0px;border:0px;';
      txt+='" onload="resPic();" onclick="self.close()" title="Tryk for at lukke vinduet"><\57bo'+'dy><\57ht'+'ml>';
      newWin.document.write(txt);
      newWin.document.close();
    }
  </script>
<%
dim antal

antal = 0

start = request.querystring("start")
if start = "" then
    start = 0
else
    start = CInt(start)
    if err.number <> 0 OR start < 0 then start = 0
end if


dim billede_root, billede_mappe
billede_root = "billeder"
billede_mappe = request.querystring("mappe")

if instr(billede_mappe, "..") > 0 or len(billede_mappe) = 0 then
    fejlBesked = "Der er fejl i mappenavnet."
else
    if instr("/\%", left(billede_mappe, 1)) > 0    then ' check om der er forbudte tegn, først i mappenavnet
        fejlBesked = "Der er fejl i mappenavnet."
        response.write fejlBesked
        response.end
    end if
end if

dim fs, f, fc
Set fs = CreateObject("Scripting.FileSystemObject")
if fs.FolderExists(server.mappath(billede_root & "/" & billede_mappe)) = false then
    fejlBesked = "Den angivne mappe '" & billede_mappe & "' findes ikke."
    set fs = nothing
end if

if fejlBesked <> "" then
    response.write fejlBesked
    response.end
end if

Set f = fs.GetFolder(server.mappath(billede_root & "/" & billede_mappe & ""))
Set fc = f.Files


dim billed, navn, filtype, tilladte_filtyper
dim tmpArrFilnavn, tmpArrDato
dim arrFilnavn, arrDato
For Each billed in fc
    navn = lCase(Billed.name)
    if instr(navn, ".") > 0 then
        filtype = mid(navn, instrrev(navn, ".") + 1)
        tilladte_filtyper = "jpg:jpeg:gif:png:" ' Sidste tegn skal altid være kolon (":")
        if instr(navn, filtype & ":") > -1 then
                tmpArrFilnavn = tmpArrFilnavn & billed.name & "|"
                tmpArrDato = tmpArrDato & billed.datelastmodified & "|"
        end if
    end if
next
tmpArrFilnavn = left(tmpArrFilnavn, (len(tmpArrFilnavn) - 1))
tmpArrDato = left(tmpArrDato, (len(tmpArrDato) - 1))
arrFilnavn = Split(tmpArrFilnavn, "|")
arrDato = Split(tmpArrDato, "|")

call sortArr(arrFilnavn, arrDato)
UdskrivForrigeNaeste(arrFilnavn)


dim antalSider
Antalsider = int(ubound(arrFilnavn) / 6)

%><table border=0 style="width:237px;color:#000000;font-family:arial;font-size:12px"><%

dim i, sti_til_fil
for i = start to (start + 5)
    if i <= ubound(arrFilnavn) then
        if antal = 0 then Response.Write "<TR>"
        sti_til_fil = "./" & billede_root & "/" & billede_mappe & "/" & arrFilnavn(i)
        %>
                        <td bordercolor="#000000" valign="middle"><p align="center">
                        <a href="#" onclick="popWin('<%=sti_til_fil%>');return false;">
                        <span style="text-decoration: none">
                        <img src="<%=sti_til_fil%>" width="100" height="75" alt="" style="border: 1px solid #000000"></span></a>
                        </td>
        <%
    end if

    if i = start and ubound(arrFilnavn) - start = 0 then
        response.write "<td><img src=""gfx/space.gif"" width=""100"" height=""75""></td>"
    end if

    if antal = 1 then
        Response.Write "</TR>"
        antal = 0
    else
        antal = antal + 1
    end if
next
%></tr>
</table>
<% if err.number <> 0 then response.write "<br><br><b>Der opstod en fejl:<br>" & err.number & " - " & err.description & "</b>" %>
Avatar billede thesurfer Nybegynder
06. november 2006 - 16:22 #12
Har du fået testet det?
Avatar billede no_doubt Nybegynder
06. november 2006 - 16:48 #13
Ikke endnu..
Avatar billede no_doubt Nybegynder
05. april 2007 - 14:01 #14
Bingo
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