Just nu i M3-nätverket
Gå till innehåll

visa bilder random


eddie66

Rekommendera Poster

hej

 

jag undrar om någon kan hjälpa mig med följande.

 

jag har en massa sökvägar i min db(acess) och jag vill slumpa fram 3 st varje gång någon besöker sidan. Ungefär som adrotater men jag vill kunna ta fram 3 av alla mina sökvägar i db.

 

jag har sökt på nätet men kan inte hitta något bra exempel. någon av er kanske vet eller har något exempel.

 

tacksam för hjälp.

 

Länk till kommentar
Dela på andra webbplatser

Kort:

Ta reda på hur många sökvägar det finns i databasen mha av en SQL-sats tex. Slumpa fram ett tal mellan 0 och antalet bilder i databasen minus 1. Hämta bilden mha av den generade siffran.

 

Länk till kommentar
Dela på andra webbplatser

låter vettigt men eftersom jag ny på asp så skulle lite hjälp med detta vara tacksamt, eller en länk till någon sida där dom har ett sådant här exempel.

 

har du möjligtvis någon länk eller nåt?

 

Länk till kommentar
Dela på andra webbplatser

<% 
Dim tbl, i, j
tbl = "bildtabell"
i=0
j=0
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "[color="#ff0000"]SELECT * FROM " & tbl[/color]
rs.open sql, con
Do While Not RS.EOF 
i = i + 1
RS.MoveNext
Loop 

rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF
if intNum = j then
%>
[color="#ff0000"]visa bilden[/color]
<%
end if
RS.MoveNext
Loop

RS.close
Set RS = nothing %>

Ändra där jag har markerat rött.

------------------------------------------------------------

Se om jag är online:

http://www.xfire.com/profile/darkluna/

// Codler

http://www.metrobloggen.se/codler

 

Länk till kommentar
Dela på andra webbplatser

ok testade detta och ändrade koden något. dock så får jag detta fel medd. jag har en include fil där sökvägen till db finns.

 

det går inte att använda anslutningen för den här åtgärden. Den är stängd eller ogiltig i det här sammanhanget.

 

vet du felet?

 

Dim tbl, i, j
tbl = "tblbilder"
i=0
j=0
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM " & tbl
rs.open sql, connect
Do While Not RS.EOF 
i = i + 1
RS.MoveNext
Loop 

rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF
if intNum = j then
%>
<%=rs("sokvag")%>
<%
end if
RS.MoveNext
Loop

RS.close
Set RS = nothing 

 

Länk till kommentar
Dela på andra webbplatser

oj, missade markera ett ställe till som du ska ändra

 

rs.open sql, [color="#ff0000"]con[/color]

 

och när jag kollade igen så ska du lägga till

 

j = j + 1

 

efter end if

------------------------------------------------------------

Se om jag är online:

http://www.xfire.com/profile/darkluna/

// Codler

http://www.metrobloggen.se/codler

 

Länk till kommentar
Dela på andra webbplatser

ja, jag ändrade con till connect som du ser i koden jag klippte in förra gången. jag har Set Connect = server.createObject("ADODB.Connection") i min include fil.

 

har lagt till ändringen du angav, men jag får fortfarande samma fel medd.

 

någon ide?

 

Länk till kommentar
Dela på andra webbplatser

har sett en liknande kod tidigare men jag får inte ihop det. har försökt sätta det med delar av din kod men jag får inte det att funka.

 

om jag ska enbart plocka en fält ur db så funkar väl detta? mina sökvägar ligger i fältet med röd text.

strSQL = "SELECT TOP 3 [color="#ff0000"]sokvag[/color], Rnd(" & -1 * intRandomNumber) & "* tblbilder)" & _
  "FROM tblbilder " & _
  "ORDER BY 3"

 

får du detta att fungera annars?

 

Länk till kommentar
Dela på andra webbplatser

jag har nu testat och jag fick inga felmeddelande, det är nog fel på din connect tror jag

 

<% dim con, db_url
' database url
db_url = "[color="#ff0000"]x.mdb[/color]"
' Connection
Set con = Server.CreateObject("ADODB.Connection")
con.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath(db_url)
%>

<% 
Dim tbl, i, j
tbl = "[color="#ff0000"]plugin_guestbook[/color]"
i=0
j=0
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "[color="#ff0000"]SELECT * FROM " & tbl[/color]
rs.open sql, con
Do While Not RS.EOF 
i = i + 1
RS.MoveNext
Loop 

rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
%>
[color="#ff0000"]<% =rs("p_name") %>[/color]
<%
end if
j = j + 1
RS.MoveNext
Loop

RS.close
Set RS = nothing %>

 

------------------------------------------------------------

Se om jag är online:

http://www.xfire.com/profile/darkluna/

// Codler

http://www.metrobloggen.se/codler

 

Länk till kommentar
Dela på andra webbplatser

ok fick det att funka nu med nedan kod. dock så villl jag få fram 3 resultat varje gång man uppdaterar sidan.

 

försökte med TOP 3 i sql satsen men då hämtar den enbart dom 3 översta fälten som finns i db och den visar fortfarande bara 1 resultat, om du förstår vad jag menar.

 

förslag hur jag får fram 3 åt gången?

 

detta är koden som funkar nu.

<%
Connect.open
Dim tbl, i, j
tbl = "tblbilder"
i=0
j=0
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT sokvag FROM " & tbl
rs.open sql, connect
Do While Not RS.EOF 
i = i + 1
RS.MoveNext
Loop 

rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
%>
<% =rs("sokvag") %>
<%
end if
j = j + 1
RS.MoveNext
Loop

RS.close
Set RS = nothing 
%>

 

[inlägget ändrat 2007-12-18 18:45:13 av eddie66]

[inlägget ändrat 2007-12-18 18:45:54 av eddie66]

Länk till kommentar
Dela på andra webbplatser

Ha denna kod 3ggr om

j=0
rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
%>
<% =rs("p_name") %>
<%
end if
j = j + 1
RS.MoveNext
Loop

 

dvs

 

<% dim con, db_url
' database url
db_url = "/lh6haya/data/codler.mdb"
' Connection
Set con = Server.CreateObject("ADODB.Connection")
con.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath(db_url)
%>

<% 
Dim tbl, i, j
tbl = "plugin_guestbook"
i=0
j=0
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT * FROM " & tbl
rs.open sql, con
Do While Not RS.EOF 
i = i + 1
RS.MoveNext
Loop 

j=0
rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
%>
<% =rs("p_name") %>
<%
end if
j = j + 1
RS.MoveNext
Loop

j=0
rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
%>
<% =rs("p_name") %>
<%
end if
j = j + 1
RS.MoveNext
Loop

j=0
rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
%>
<% =rs("p_name") %>
<%
end if
j = j + 1
RS.MoveNext
Loop



RS.close
Set RS = nothing %>

 

------------------------------------------------------------

Se om jag är online:

http://www.xfire.com/profile/darkluna/

// Codler

http://www.metrobloggen.se/codler

 

Länk till kommentar
Dela på andra webbplatser

jepp funkar fint, dock så vill jag kunna skriva ut resultatet i olika celler i en tabell, som nedan försök. detta funkar då inte och jag fick detta medd.

 

 

Antingen är BOF eller EOF satt till True, eller så har aktuell post raderats. Den begärda åtgärden kräver en aktuell post.

 

tabellen jag har ser inte ut som denna test sida, jag kommer inte att kunna loopa igenom så att det skrivs ut en ny rad för varje bild. utan jag måste kunna lägga ut resultaten i olika celler,ungefär som mitt exempel här.

 

har du förslag?

 

 

<!--#include file="aspworkfiles/connection.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%
Connect.open
Dim tbl, i, j
tbl = "tblbilder"
i=0
j=0
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT sokvag FROM " & tbl
rs.open sql, connect
Do While Not RS.EOF 
i = i + 1
RS.MoveNext
Loop 

rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then

end if
j = j + 1
RS.MoveNext
Loop
'andra

j=0
rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then

end if
j = j + 1
RS.MoveNext
Loop

'tredje
j=0
rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then

end if
j = j + 1
RS.MoveNext
Loop 
%>
<title>Untitled Document</title>
</head>

<body>

<table width="795" border="0" cellpadding="0" cellspacing="0">
 <tr>
   <td><%=rs("sokvag")%></td>
 </tr>
 <tr>
   <td><%=rs("sokvag")%></td>
 </tr>
 <tr>
   <td><%=rs("sokvag")%></td>
 </tr>
</table>
</body>
<%
RS.close
Set RS = nothing 

%>
</html>

 

Länk till kommentar
Dela på andra webbplatser

du kan använda variablar

 

<!--#include file="aspworkfiles/connection.asp" -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
;
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%
Connect.open
Dim tbl, i, j
tbl = "tblbilder"
i=0
j=0
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT sokvag FROM " & tbl
rs.open sql, connect
Do While Not RS.EOF 
i = i + 1
RS.MoveNext
Loop 

rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
[color="#0000ff"]bild1 = rs("sokvag")[/color]
end if
j = j + 1
RS.MoveNext
Loop
'andra

j=0
rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
[color="#0000ff"]bild2 = rs("sokvag")[/color]
end if
j = j + 1
RS.MoveNext
Loop

'tredje
j=0
rs.movefirst
Randomize 
intNum = Int(i * Rnd) 
Do While Not RS.EOF

if intNum = j then
[color="#0000ff"]bild3 = rs("sokvag")[/color]
end if
j = j + 1
RS.MoveNext
Loop 
%>
<title>Untitled Document</title>
</head>

<body>

<table width="795" border="0" cellpadding="0" cellspacing="0">
 <tr>
   <td><%=[color="#0000ff"]bild1[/color]%></td>
 </tr>
 <tr>
   <td><%=[color="#0000ff"]bild2[/color]%></td>
 </tr>
 <tr>
   <td><%=[color="#0000ff"]bild3[/color]%></td>
 </tr>
</table>
</body>
<%
RS.close
Set RS = nothing 

%>
</html>

det blå markerade ändrade jag

ah, hinner inte skriva så snabbt, blir attackerad i WoW :P

------------------------------------------------------------

Se om jag är online:

http://www.xfire.com/profile/darkluna/

// Codler

http://www.metrobloggen.se/codler

 

Länk till kommentar
Dela på andra webbplatser

:thumbsup: det är full poäng till dig!

 

funkar hur bra som helst!

 

tack så hemskt mycket för hjälpen.

 

GOD JUL

 

Länk till kommentar
Dela på andra webbplatser

Känns onödigt med så mycket kod och att dessutom loopa igenom recordsetet så pass många gånger är ju rent resursslöseri. Hur skulle det bli om man skulle vilja slumpa ut 100 bilder ur en tabell med 10 000 tror du?

 

Testa:[log]Om du kör Access:

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath("myDBfile.mdb")

Randomize()
randNum = (CInt(1000 * Rnd) + 1) * -1

strSQL = "SELECT top 3 sokvag FROM tblbilder ORDER BY Sin(id * Rnd("&randNum&") * 1000)"

SET objRS = objConn.execute(strSQL)
DO Until objRS.EOF
  strTablecells = strTablecells &"<tr><td>"&objRS(0)&"</td></tr>"
  objRS.MoveNext
Loop
SET objRS=Nothing

objConn.close
Set objConn=Nothing
%>
<table width="795" border="0" cellpadding="0" cellspacing="0">
<%=strTablecells%>
</table>

Om du kör MS SQL:

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.open "DRIVER=SQL Server; SERVER=127.0.0.1; DATABASE=myDB; UID=myUser; PWD=myPass;"

strSQL = "SELECT TOP 3 sokvag from tblbilder ORDER BY NEWID()"

SET objRS = objConn.execute(strSQL)
DO Until objRS.EOF
  strTablecells = strTablecells &"<tr><td>"&objRS(0)&"</td></tr>"
  objRS.MoveNext
Loop
SET objRS=Nothing

objConn.close
Set objConn=Nothing
%>
<table width="795" border="0" cellpadding="0" cellspacing="0">
<%=strTablecells%>
</table>

[/log]

 

[edit1:] Jag utgår i access-exemplet från att det finns en id-kolumn med unika värden (exv. räknare).

 

[edit2:] Såg att Jonas_Bo redan visat vägen, varför Codler fortsätter att krångla till vet jag inte :)

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

[inlägget ändrat 2007-12-18 23:18:12 av Cluster]

 

 

[inlägget ändrat 2007-12-18 23:21:13 av Cluster]

Länk till kommentar
Dela på andra webbplatser

hej

 

jag vill inte skriva ut en rad för varje slumpad resultat. utan jag vill att den hämtar 3 resultat som jag kan skriva ut på respektive plats. precis som Codler fick till det i sista försöket.

 

tabellen som är i denna kod är bara ett exempel och ínget som ska användas.

 

jag vill alltså "lägga" ut dessa 3 resultat på olika platser på min sida.

 

hoppas du förstår vad jag menar?

 

 

Länk till kommentar
Dela på andra webbplatser

Jodå, det går ju naturligtvis bra att hantera i loopen. Istället för att bygga upp strTablecells som jag har gjort så tilldelar du variabler de framslumpade värdena istället.

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

Länk till kommentar
Dela på andra webbplatser

ok, skulle du kunna vissa med den koden du skrev in tidigare?

 

eftersom jag inte riktigt förstår hur det ska lägga in i din kod :-)

 

Länk till kommentar
Dela på andra webbplatser

Ok...

Det enklaste tror jag är att lägga in bilderna i en array (om du inte låter recordsetet leva och använder det istället).

Typ:

<%
SET objConn = Server.CreateObject("ADODB.Connection")
objConn.open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="&Server.MapPath("myDBfile.mdb")

Randomize()
randNum = (CInt(1000 * Rnd) + 1) * -1

strSQL = "SELECT TOP 3 sokvag FROM tblbilder ORDER BY Sin(id * Rnd("&randNum&") * 1000)"

SET objRS = objConn.execute(strSQL)
IF NOT objRS.EOF THEN
  DO Until objRS.EOF
     strImages=strImages&objRS(0)&"|"
     objRS.MoveNext
  Loop
END IF
SET objRS=Nothing
strImages=Left(strImages,Len(strImages)-1)

arrImages=Split(strImages,"|")

objConn.close
SET objConn=Nothing
%>
<p>Skriv ut bilderna var du vill:</p>
<p>Bild 1: <%=arrImages(0)%></p>
<p>Bild 2: <%=arrImages(1)%></p>
<p>Bild 3: <%=arrImages(2)%></p>

 

/Cluster

------------------------------------------------------------

Ditt vetande är värdelöst om inte andra vet att du vet

-----------> http://eforum.kicks-ass.net <------------

 

 

[inlägget ändrat 2007-12-19 14:14:15 av Cluster]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...