Just nu i M3-nätverket
Jump to content

Random


Wepe

Recommended Posts

Skulle behöva hjälp med en random funktion. Har en databas innehållande bilder. Varje rad i databasen innehåller 6 bilder enligt följande; bild1, bild2, bild3 osv. Vad jag vill åstakomma är att plocka ut en av bilderna slumpmässigt men bara om det finns en bild angiven i kollumnen. Dvs om det finns en bild angiven i bild3, bild5 och bild6 så är det bland dessa som den slumpar fram en bild.

Någon som kan hjälpa mej med denna lilla nöt?

 

Link to comment
Share on other sites

Du skriver inte hur du väljer rad i tabellen, men du kan isf ändra SQLen så den passar.

set RS=Conn.execute("SELECT bild1, bild2, bild3, bild4, bild5, bild6 FROM tabellen WHERE Id= 1 ")

 

IF NOT RS.EOF THEN

RadBilderArray=RS.Getrows()

RS.CLOSE

 

'Först måste vi kolla så det inte bara är en bild bland kolumnerna

a=0

For i=0 To Ubound(RadBilderArray,1)

if RadBilderArray(i,0)<>"" then a=a+1

Next

 

'Om mer än en bild så slumpa mellan dem

if a>1 then

Dim lowestnumber, highestnumber, random_number, ActualImages, bildsomskallvisas

 

'Påbörja skapa array på bilder finns inlagda

ActualImages=""

For i=0 To Ubound(RadBilderArray,1)

If RadBilderArray(i,0) <> "" then

ActualImages= ActualImages & RadBilderArray(i,0)

if i <> Ubound(RadBilderArray,1) Then ActualImages = ActualImages &","

End if

Next

 

If ActualImages<>"" then

ImagesArray = split(ActualImages,",")

'Nu har vi en array med alla bilder som är angivna i tabellraden.

 

Randomize

'Nu skall vi slumpa mellan bilderna som finns

 

bildsomskallvisas=ImagesArray(Int((Ubound(ImagesArray)+1)* Rnd) + 1)

End if

 

Else

'om det bara är en bild lägg den i en variabel

For i=0 To Ubound(RadBilderArray,1)

if RadBilderArray(i,0)<>"" then bildsomskallvisas=RadBilderArray(i,0)

Next

 

End if

Response.Write bildsomskallvisas

ELSE

RS.CLOSE

END IF

 

 

 

 

Link to comment
Share on other sites

Snabbt svarat och inte så lite kod det blev...

Scriptet funkar ibland men ibland så funkar det inte...

Så här ser scriptet ut i min version

[log]<%

Set RecSet = Server.CreateObject("ADODB.RecordSet")

SQL = "SELECT bild1, bild2, bild3, bild4, bild5, bild6 FROM kategori WHERE Id= 1 "

RecSet.Open SQL, Connect

 

IF NOT RecSet.EOF THEN

RadBilderArray=RecSet.Getrows()

RecSet.CLOSE

 

'Först måste vi kolla så det inte bara är en bild bland kolumnerna

a=0

For i=0 To Ubound(RadBilderArray,1)

if RadBilderArray(i,0)<>"" then a=a+1

Next

 

'Om mer än en bild så slumpa mellan dem

if a>1 then

Dim lowestnumber, highestnumber, random_number, ActualImages, bildsomskallvisas

 

'Påbörja skapa array på bilder finns inlagda

ActualImages=""

For i=0 To Ubound(RadBilderArray,1)

If RadBilderArray(i,0) <> "" then

ActualImages= ActualImages & RadBilderArray(i,0)

if i <> Ubound(RadBilderArray,1) Then ActualImages = ActualImages &","

End if

Next

 

If ActualImages<>"" then

ImagesArray = split(ActualImages,",")

'Nu har vi en array med alla bilder som är angivna i tabellraden.

 

Randomize

'Nu skall vi slumpa mellan bilderna som finns

 

bildsomskallvisas=ImagesArray(Int((Ubound(ImagesArray)+1)* Rnd) + 1)

End if

 

Else

'om det bara är en bild lägg den i en variabel

For i=0 To Ubound(RadBilderArray,1)

if RadBilderArray(i,0)<>"" then bildsomskallvisas=RadBilderArray(i,0)

Next

 

End if

'Skriver ut bilden

Set RecSet = Server.CreateObject("ADODB.RecordSet")

SQL = "SELECT * FROM produkt Where ID =" & bildsomskallvisas

RecSet.Open SQL, Connect

 

If Not RecSet.EOF Then

 

Response.Write("<img src=""grafik/bilder/"&RecSet("bild")&""" width="""&RecSet("bredd")&""" height="""&RecSet("hojd")&""" alt="""" />")

 

End if

 

RecSet.Close

 

ELSE

RecSet.CLOSE

END IF[/log]

 

De felmeddelanden jag får är:

Syntax error (missing operator) in query expression 'ID ='.

/sida_startsida.asp, line 76

 

rad 76 = öppnandet av den andra tabellen (produkter) i slutet av scriptet.

dvs det finns inget värde på variabeln "bildsomskallvisas"

 

och det andra felet är

Subscript out of range: '[number: 4]'

/sida_startsida.asp, line 63

 

rad 63 = bildsomskallvisas=ImagesArray(Int((Ubound(ImagesArray)+1)* Rnd) + 1)

 

Link to comment
Share on other sites

Anjuna Moon

Jag tycker nog det vart lite tillkrånglat där. Jag skulle hellre välja att lägga in varje bild i en Dictionary, förutsatt att fältet inte är tomt. Därefter skapas slumpfunktionen (som slumpar mellan 1 och längden på Dictionaryn). Du skulle få ner din kod till ett par rader då.

 

Link to comment
Share on other sites

Anjuna Moon

Typ något sånt här:

Set oImg = CreateObject("Scripting.Dictionary")
nIdx=1
For i=0 To Ubound(RadBilderArray,1)
If RadBilderArray(i,0)<>"" Then 
	oImg.Add nIdx,RadBilderArray(i,0)
	nIdx=nIdx+1
End If
Next
Randomize Timer
nRnd=Int(Rnd(1)*oImg.Count)+1
sImg=oImg(nRnd) 

 

Link to comment
Share on other sites

<%

Set RecSet = Server.CreateObject("ADODB.RecordSet")

SQL = "SELECT bild1, bild2, bild3, bild4, bild5, bild6 FROM kategori WHERE Id= 1 "

RecSet.Open SQL, Connect

 

IF NOT RecSet.EOF THEN

RadBilderArray=RecSet.Getrows()

RecSet.CLOSE

 

'Först måste vi kolla så det inte bara är en bild bland kolumnerna

a=0

For i=0 To Ubound(RadBilderArray,1)

if RadBilderArray(i,0)<>"" then a=a+1

Next

 

'Om mer än en bild så slumpa mellan dem

if a>1 then

Dim lowestnumber, highestnumber, random_number, ActualImages, bildsomskallvisas

 

'Påbörja skapa array på bilder finns inlagda

ActualImages=""

For i=0 To Ubound(RadBilderArray,1)

If RadBilderArray(i,0) <> "" then

Set oImg = CreateObject("Scripting.Dictionary")

nIdx=1

For i=0 To Ubound(RadBilderArray,1)

If RadBilderArray(i,0)<>"" Then

oImg.Add nIdx,RadBilderArray(i,0)

nIdx=nIdx+1

End If

Next

 

If ActualImages<>"" then

 

Randomize Timer

nRnd=Int(Rnd(1)*oImg.Count)+1

bildsomskallvisas=oImg(nRnd)

 

End if

 

Else

'om det bara är en bild lägg den i en variabel

For i=0 To Ubound(RadBilderArray,1)

if RadBilderArray(i,0)<>"" then bildsomskallvisas=RadBilderArray(i,0)

Next

 

End if

'Skriver ut bilden

Set RecSet = Server.CreateObject("ADODB.RecordSet")

SQL = "SELECT * FROM produkt Where ID =" & bildsomskallvisas

RecSet.Open SQL, Connect

 

If Not RecSet.EOF Then

 

Response.Write("<img src=""grafik/bilder/"&RecSet("bild")&""" width="""&RecSet("bredd")&""" height="""&RecSet("hojd")&""" alt="""" />")

 

End if

 

RecSet.Close

 

ELSE

RecSet.CLOSE

END IF

 

 

 

Link to comment
Share on other sites

får fortfarande meddelandet:

 

Syntax error (missing operator) in query expression 'ID ='.

[inlägget ändrat 2006-03-15 17:52:23 av Wepe]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...