Avatar billede webbe Nybegynder
04. marts 2005 - 10:04 Der er 13 kommentarer og
1 løsning

Vælg 8 tilfældige bannerreklamer

Hejsa

Jeg har tidligere brugt en random funktion til at vælge én tilfældig post i en database.

Jeg har nu brug for at udvide den til at vælge 8 tilfældige poster/bannerreklamer (samme post må ikke fremgå 2 gange).
En anden catch ved det er, at hvis der ikke er 8 poster skal der vises en standard.

Den kode jeg pt. ahr ser sådan ud:

'vælger et tilfældigt galleri
Set rsBAdds = Server.CreateObject("ADODB.RecordSet")
sqlBAdds = "SELECT * FROM Banneradds"
rsBAdds.open sqlBAdds,Conn,3,1
    rndMax = rsBAdds.RecordCount
    Randomize
    rndNumber = Int((RND * rndMax))  'Find et random nummer
    rsBAdds.Move rndNumber 'Flyt til den valgte record

Nogen der kan rette den til?
Avatar billede cpufan Juniormester
04. marts 2005 - 11:11 #1
display = 8 ' her kan du sætte det antal du ønsker 
rndMax = CInt(rsrand.RecordCount) ' rsrand svarer til din rsBAdds
  if display>rndMax then
    display=rndMax
  end if
  rndNumber=0
  lastrndNumber=0
'  For Z=1 to display
relatecount = 0
Do while relatecount < display
    rsrand.MoveFirst
    Randomize Timer
    rndNumber = Int(RND * rndMax)
    if display>1 then
      Do While instr(sofar, ":" & rndNumber & ":")>0
        Randomize Timer
        rndNumber = Int(RND * rndMax)
      Loop   
    else
      Randomize Timer
      rndNumber = Int(RND * rndMax)
    end if
    rsrand.Move rndNumber
'her kan du enten udskrive resultat, eller ligger resultat i arrays, til senere udskrift
loop
Avatar billede cpufan Juniormester
04. marts 2005 - 11:13 #2
hov der mangler lige:

sofar = "" ' denne skal være øverst
Avatar billede cpufan Juniormester
04. marts 2005 - 11:15 #3
Der manglede også en sofar nederst, så her er den samlede kode:


display = 8 ' her kan du sætte det antal du ønsker 
sofar = "" ' nulstiller kontrol
rndMax = CInt(rsrand.RecordCount) ' rsrand svarer til din rsBAdds
  if display>rndMax then
    display=rndMax
  end if
  rndNumber=0
  lastrndNumber=0
'  For Z=1 to display
relatecount = 0
Do while relatecount < display
    rsrand.MoveFirst
    Randomize Timer
    rndNumber = Int(RND * rndMax)
    if display>1 then
      Do While instr(sofar, ":" & rndNumber & ":")>0
        Randomize Timer
        rndNumber = Int(RND * rndMax)
      Loop   
    else
      Randomize Timer
      rndNumber = Int(RND * rndMax)
    end if
    rsrand.Move rndNumber
sofar=sofar & ":" & rndNumber & ":"
'her kan du enten udskrive resultat, eller ligger resultat i arrays, til senere udskrift
loop
Avatar billede cpufan Juniormester
04. marts 2005 - 11:17 #4
god dammit........

relatecount = relatecount + 1 ' denne linie manglede sgu også
Loop
Avatar billede webbe Nybegynder
04. marts 2005 - 11:20 #5
har nu følgende:

<%
'vælger et tilfældigt galleri
Set rsBAdds = Server.CreateObject("ADODB.RecordSet")
sqlBAdds = "SELECT * FROM Banneradds,Kundedata WHERE Kundedata.KID=Banneradds.BKID"
rsBAdds.open sqlBAdds,Conn,3,1
    rndMax = rsBAdds.RecordCount
    Randomize
    rndNumber = Int((RND * rndMax))  'Find et random nummer
    rsBAdds.Move rndNumber 'Flyt til den valgte record
%>
<%do until rsBAdds.eof%>
    <%if right(rsBAdds("BFile"),3) = "jpg" or right(rsBAdds("BFile"),3) = "JPG" then%>
        <a href="<%=rsBAdds("KWeb")%>" target="_blank"><img src="images/banneradds/<%=rsBAdds("BFile")%>" width="143" height="57" class="prodimg" title="<%=rsBAdds("BID")%>"></a>
    <%end if%>
    <%if right(rsBAdds("BFile"),3) = "swf" or right(rsBAdds("BFile"),3) = "SWF" then%>
        <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
        WIDTH="143" HEIGHT="57" id="flashbanner" ALIGN="" class="prodimg">
        <PARAM NAME=movie VALUE="images/banneradds/<%=rsBAdds("BFile")%>"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#CCCCCC><PARAM NAME=border VALUE=#74777A>
        <EMBED src="images/banneradds/<%=rsBAdds("BFile")%>" quality=high bgcolor=#CCCCCC  WIDTH="143" HEIGHT="57" NAME="falshbanner" ALIGN=""
        TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
        </OBJECT>
    <%end if%>
<%rsBAdds.movenext
loop%>
<%if rndMax < 8 then%>
    <%
    maxEmpty = CInt(8)-rndMax
    %>
    <%for i = 1 to maxEmpty%>
        <img src="images/banneradds/empty.jpg" width="143" height="57" class="prodimg">
    <%next%>
<%end if%>

Kan du prøve at rette min kode til, så den bruger din løsning?
Kan nemlig ikke lige finde hoved eller hale i det du skrev.

Flere point er på vej, hvis du retter koden til! ;0)
Avatar billede cpufan Juniormester
04. marts 2005 - 11:21 #6
Sådan: og så har jeg rettet den til, så du kan paste den ind direkte

display = 8 ' her kan du sætte det antal du ønsker 
sofar = "" ' nulstiller kontrol
rndMax = CInt(rsBAdds.RecordCount)
  if display>rndMax then
    display=rndMax
  end if
  rndNumber=0
  lastrndNumber=0

relatecount = 0
Do while relatecount < display
    rsBAdds.MoveFirst
    Randomize Timer
    rndNumber = Int(RND * rndMax)
    if display>1 then
      Do While instr(sofar, ":" & rndNumber & ":")>0
        Randomize Timer
        rndNumber = Int(RND * rndMax)
      Loop   
    else
      Randomize Timer
      rndNumber = Int(RND * rndMax)
    end if
    rsBAdds.Move rndNumber
sofar=sofar & ":" & rndNumber & ":"
'her kan du enten udskrive resultat, eller ligger resultat i arrays, til senere udskrift
relatecount = relatecount + 1
loop
Avatar billede cpufan Juniormester
04. marts 2005 - 11:24 #7
prøv dette.......
<%
display = 8 ' her kan du sætte det antal du ønsker 
sofar = "" ' nulstiller kontrol
rndMax = CInt(rsBAdds.RecordCount)
  if display>rndMax then
    display=rndMax
  end if
  rndNumber=0
  lastrndNumber=0

relatecount = 0
Do while relatecount < display
    rsBAdds.MoveFirst
    Randomize Timer
    rndNumber = Int(RND * rndMax)
    if display>1 then
      Do While instr(sofar, ":" & rndNumber & ":")>0
        Randomize Timer
        rndNumber = Int(RND * rndMax)
      Loop   
    else
      Randomize Timer
      rndNumber = Int(RND * rndMax)
    end if
    rsBAdds.Move rndNumber
sofar=sofar & ":" & rndNumber & ":"
if right(rsBAdds("BFile"),3) = "jpg" or right(rsBAdds("BFile"),3) = "JPG" then%>
        <a href="<%=rsBAdds("KWeb")%>" target="_blank"><img src="images/banneradds/<%=rsBAdds("BFile")%>" width="143" height="57" class="prodimg" title="<%=rsBAdds("BID")%>"></a>
    <%end if%>
    <%if right(rsBAdds("BFile"),3) = "swf" or right(rsBAdds("BFile"),3) = "SWF" then%>
        <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
        WIDTH="143" HEIGHT="57" id="flashbanner" ALIGN=" class="prodimg">
        <PARAM NAME=movie VALUE="images/banneradds/<%=rsBAdds("BFile")%>"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#CCCCCC><PARAM NAME=border VALUE=#74777A>
        <EMBED src="images/banneradds/<%=rsBAdds("BFile")%>" quality=high bgcolor=#CCCCCC  WIDTH="143" HEIGHT="57" NAME="falshbanner" ALIGN=""
        TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
        </OBJECT>
    <%end if
relatecount = relatecount + 1
loop %>
Avatar billede cpufan Juniormester
04. marts 2005 - 11:26 #8
du skal lige have dette her med ind i toppen efter <%
men før kode

'vælger et tilfældigt galleri
Set rsBAdds = Server.CreateObject("ADODB.RecordSet")
sqlBAdds = "SELECT * FROM Banneradds,Kundedata WHERE Kundedata.KID=Banneradds.BKID"
rsBAdds.open sqlBAdds,Conn,3,1
Avatar billede webbe Nybegynder
04. marts 2005 - 11:31 #9
det havde jeg fundet ud af - tusind tak for hjælpen - det virker....
Avatar billede cpufan Juniormester
04. marts 2005 - 11:36 #10
fint, tak for point
Avatar billede cpufan Juniormester
04. marts 2005 - 11:39 #11
hvis der kan opstå situationer hvor der ikke findes et db-resultat fejler scriptet.

det kan du ordne ved at fjerne "Do"
så den kun hedder
while relatecount < display
Avatar billede webbe Nybegynder
04. marts 2005 - 11:48 #12
nope - det giver en fejl:

Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A040E)
'Loop' uden 'Do'
/startfirma/include/adds.inc, line 45
loop
Avatar billede webbe Nybegynder
04. marts 2005 - 11:49 #13
virker faktisk fint med "do while" selv om der ikke er nogen records ;0)
Avatar billede cpufan Juniormester
04. marts 2005 - 12:04 #14
ja det skal forresten være

while
..
..
wend

istedet for

Do while
..
..
loop
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