webForumDet fria alternativet

Randomize visa produkter i kolumn

ASP

10 svar · 191 visningar · startad av Addeladde

Medlem sedan jan. 20013 406 inlägg
Frågan#1

Jag får inte riktigt denna kod att fungera. Jag ska visa randomerade produkter ur databasen i en tabell med två kolumner.

<%
Randomize
CONST numFeatured = 4

' Hämta produkter som är erbjudanden
sqlString = "SELECT produkt_id, produkt_bild_liten, produkt_namn, produkt_info_liten, produkt_pris " &_
  "FROM Produkter " &_
  "WHERE produkt_status=1 " &_
  "ORDER BY produkt_namn "

SET Featured = Con.Execute( sqlString )
IF NOT Featured.EOF THEN
  featuredArray = Featured.GetRows()
Featured.Close
set featured = nothing

' Visa produkterbjudanden
topFeatured =  UBOUND( featuredArray, 2 ) + 1
skip =  topFeatured  / numFeatured 
IF topFeatured <= numFeatured THEN skip = 1
%>
<table width="350" border=0
 cellpadding=0 cellspacing=0>
<table border="0" cellpadding="0" cellspacing="0" width="530">

<%
FOR i = 0 TO topFeatured - 1 STEP skip
  offset = RND * ( skip - 1 )
  produktID = featuredArray( 0, i + offset )
  produktBildliten = featuredArray( 1, i + offset )
  produktNamn = featuredArray( 2, i + offset )
  produktInfoliten = featuredArray( 3, i + offset )
  produktPris = featuredArray( 4, i + offset )
%><font size="2" face="Verdana">
<% 
                numcols=2
                pryl = 1
                produkter = 0
                Do until produkter = 4
                produkter = produkter + 1
              
                response.write "<TR>"
      			  for i=1 to numcols
         			  response.write "<TD>"
         			  if hyraRS.eof then
           		   response.write "&nbsp;"
         			  else
         			  %> </font><font size="2" face="Verdana">
                       <img border="0" src="http://www.teamdivers.com/butik/bilder/<%=produktBildliten%>" align="left">
					   <a href="produkt.asp?pid=<%=produktID%>"><b><font class="text" style="color: #000000"><%=produktNamn%></font></b></a><br>
					   <font class="text" style="color: #000000"><%=produktInfoliten%></font><br>
					   <font class="text" style="color: #000000">Pris:&nbsp;<%=produktPris%>&nbsp;</font><br>
            		  <%
            		  end if
            		    
            		    pryl = pryl + 1
            		    response.write hyraRS("hyra_namn")
            		    
            		    hyraRS.movenext
         			  end if
         			    response.write "</TD>"
      				  next
      				    response.write "</TR>"
   					  loop 

NEXT
END IF
%> </font>
</table>

------------------
Adde

Medlem sedan dec. 200012 464 inlägg
#2

Lite mer info tack. Vad vill du åstadkomma och vad är problemet?

Så vitt jag kan se av koden så skriver du ut samma produkt 10 gånger.

Hur kommer rshyra in i bilden?

När du räknar ut offset så måste du lägga in en koll på att den inte går utanför arraygränsen

offset = int(RND * ( skip - 1 ))
       if  i + offset > topFetaured - 1 then offset = topFetaured - 1 - i

Verkar som om det är ett end if för mycket i koden.

else
%> </font><font size="2" face="Verdana">
<img border="0" src="http://www.teamdivers.com/butik/bilder/<%=produktBildliten%>" align="left">
<a href="produkt.asp?pid=<%=produktID%>"><b><font class="text" style="color: #000000"><%=produktNamn%></font></b></a><br>
<font class="text" style="color: #000000"><%=produktInfoliten%></font><br>
<font class="text" style="color: #000000">Pris: <%=produktPris%> </font><br>
<%
[b]end if[/b]

pryl = pryl + 1
'här kan hyraRS.eof vara sant
response.write hyraRS("hyra_namn")

------------------
essentitia preter non sans multiplicandum

Medlem sedan jan. 20013 406 inlägg
#3

Så här ser orginalkoden ut som jag lyckades knåpa ihop med hjälp av en bok.

Jag vill att produkterna ska visas med två i vågrätt. Alltså en tabbel med två kolumner i stället för 1. Fyra produkter ska visas

produkt1 produkt2
produkt3 produkt4

<%
Randomize
CONST numFeatured = 4

' Hämta produkter som är erbjudanden
sqlString = "SELECT produkt_id, produkt_bild_liten, produkt_namn, produkt_info_liten " &_
  "FROM Produkter " &_
  "WHERE produkt_status=1 " &_
  "ORDER BY produkt_namn "

SET Featured = Con.Execute( sqlString )
IF NOT Featured.EOF THEN
  featuredArray = Featured.GetRows()
Featured.Close
set featured = nothing

' Visa produkterbjudanden
topFeatured =  UBOUND( featuredArray, 2 ) + 1
skip =  topFeatured  / numFeatured 
IF topFeatured <= numFeatured THEN skip = 1
%>
<table width="350" border=0
 cellpadding=0 cellspacing=0>
<%
FOR i = 0 TO topFeatured - 1 STEP skip
  offset = RND * ( skip - 1 )
  produktID = featuredArray( 0, i + offset )
  produktBildliten = featuredArray( 1, i + offset )
  produktNamn = featuredArray( 2, i + offset )
  produktInfoliten = featuredArray( 3, i + offset )
%>
<tr>
  <td width="70">
  <% IF produktBildliten <> "liten.gif" THEN %>
  <a href="produkt.asp?pid=<%=produktID%>"><IMG SRC="bilder/<%=produktBildliten%>" 
   HSPACE=4 VSPACE=4 BORDER=0 align="center" width="60" height="60"></a>
  <% END IF %>
  </td>
  <td width="256">
  <a href="produkt.asp?pid=<%=produktID%>"><font class="text_fet" style="color: #000000"><%=produktNamn%></font></a>
   <font class="text" size="2">
  <br><%=produktInfoliten%></font>
  <br><a href="produkt.asp?pid=<%=produktID%>" class="text_fet" style="color: #000080">
  Mer information</a></font>
  </td>
</tr>
<tr>
  <td colspan=2 align="center" height="3" background="../bilder/avgransare.gif">
   
  </td>
</tr>
<%
NEXT
%>
</table>
<%
END IF
%>

------------------
Adde

[Redigerat av Addeladde den 02 sep 2001]

[Redigerat av Addeladde den 02 sep 2001]

[Redigerat av Addeladde den 02 sep 2001]

Medlem sedan dec. 200012 464 inlägg
#4

Jag har infört en variable, colno, för att veta hur många kolumner man har skrivit.

<%
Randomize
CONST numFeatured = 4
' Hämta produkter som är erbjudanden
sqlString = "SELECT produkt_id, produkt_bild_liten, produkt_namn, produkt_info_liten " &_
"FROM Produkter " &_
"WHERE produkt_status=1 " &_
"ORDER BY produkt_namn "

SET Featured = Con.Execute( sqlString )
IF NOT Featured.EOF THEN
   featuredArray = Featured.GetRows()
   Featured.Close
   set featured = nothing

' Visa produkterbjudanden

   topFeatured = UBOUND( featuredArray, 2 ) + 1
   skip = topFeatured / numFeatured 
   IF topFeatured <= numFeatured THEN skip = 1
   %>
   <table width="350" border=0
   cellpadding=0 cellspacing=0>
<%
   colno = 0
   FOR i = 0 TO topFeatured - 1 STEP skip
       offset = int(RND * ( skip - 1 ))
       if i + offset > topFetaured - 1 then offset = topFetaured - 1 - i
       produktID = featuredArray( 0, i + offset )
       produktBildliten = featuredArray( 1, i + offset )
       produktNamn = featuredArray( 2, i + offset )
       produktInfoliten = featuredArray( 3, i + offset )
       if colno mod 2 = 0 then
       %>
       <tr>
       <% end if%>
       <td width="70">
       <% IF produktBildliten <> "liten.gif" THEN %>
           <a href="produkt.asp?pid=<%=produktID%>"><IMG SRC="bilder/<%=produktBildliten%>" 
                HSPACE=4 VSPACE=4 BORDER=0 align="center" width="60" height="60"></a>
       <% END IF %>
       </td>
       <td width="256">
       <a href="produkt.asp?pid=<%=produktID%>"><font class="text_fet" style="color: #000000"><%=produktNamn%></font></a>
       <font class="text" size="2">
       <br><%=produktInfoliten%></font>
       <br><a href="produkt.asp?pid=<%=produktID%>" class="text_fet" style="color: #000080">
           Mer information</a></font>
       </td>
       </tr>
       <tr>
       <td colspan=2 align="center" height="3" background="../bilder/avgransare.gif">
       </td>
       <% if colno mod 2 = 0 then
       </tr>
       <%end if
       colno = colno + 1
       if  colno = 4 then exit for
   NEXT
%>
</table>
<%
END IF
%>

------------------
essentitia preter non sans multiplicandum

Medlem sedan jan. 20013 406 inlägg
#5

Jag får felmeddelandet

Feltyp:
Körningsfel i Microsoft VBScript (0x800A0009)
Felaktigt matrisindex: '[number: -1]'
/Td/butik/4_produkter.asp, line 28

Har ingen aning om vad det betyder

------------------
Adde

Medlem sedan jan. 20013 406 inlägg
#6

Jag tog bort -1 men då blev det att den visade samma produkt 4 gånger.

Den visade dem heller inte i två kolumner

produkt1 produkt2
produkt3 produkt4

så ska det visas.

Tack för all hjälp

------------------
Adde

Medlem sedan dec. 200012 464 inlägg
#7

Felet du får beror på att ett index är utanför arrayens gränser.

Vilken -1 tog du bort?

Flyttade på en if. Det börjat bli mycket HTML för mitt kunnande.

<%
Randomize
CONST numFeatured = 4
' Hämta produkter som är erbjudanden
sqlString = "SELECT produkt_id, produkt_bild_liten, produkt_namn, produkt_info_liten " &_
"FROM Produkter " &_
"WHERE produkt_status=1 " &_
"ORDER BY produkt_namn "
SET Featured = Con.Execute( sqlString )
IF NOT Featured.EOF THEN
featuredArray = Featured.GetRows()
Featured.Close
set featured = nothing

' Visa produkterbjudanden

topFeatured = UBOUND( featuredArray, 2 ) + 1
skip = topFeatured / numFeatured 
IF topFeatured <= numFeatured THEN skip = 1
%>
<table width="350" border=0
cellpadding=0 cellspacing=0>
<%
colno = 0
FOR i = 0 TO topFeatured - 1 STEP skip
offset = int(RND * ( skip - 1 ))
if i + offset > topFetaured - 1 then offset = topFetaured - 1 - i
produktID = featuredArray( 0, i + offset )
produktBildliten = featuredArray( 1, i + offset )
produktNamn = featuredArray( 2, i + offset )
produktInfoliten = featuredArray( 3, i + offset )
if colno mod 2 = 0 then
%>
<tr>
<% end if%>
<td width="70">
<% IF produktBildliten <> "liten.gif" THEN %>
<a href="produkt.asp?pid=<%=produktID%>"><IMG SRC="bilder/<%=produktBildliten%>" 
HSPACE=4 VSPACE=4 BORDER=0 align="center" width="60" height="60"></a>
<% END IF %>
</td>
<td width="256">
<a href="produkt.asp?pid=<%=produktID%>"><font class="text_fet" style="color: #000000"><%=produktNamn%></font></a>
<font class="text" size="2">
<br><%=produktInfoliten%></font>
<br><a href="produkt.asp?pid=<%=produktID%>" class="text_fet" style="color: #000080">
Mer information</a></font>
</td>
<% if colno mod 2 = 0 then %>
</tr>
<tr>
<td colspan=2 align="center" height="3" background="../bilder/avgransare.gif">
</td>
</tr>
<%
end if
colno = colno + 1
if colno = 4 then exit for
NEXT
%>
</table>
<%
END IF
%>

------------------
essentitia preter non sans multiplicandum

Medlem sedan jan. 20013 406 inlägg
#8

Jag får fortfarande samma felmeddelande.

Jag får inget felmeddelande när jag tar bort -1 på denna den sista 1:an

if i + offset > topFetaured - 1 then offset = topFetaured -1 - i

den visar samma produkt och inte i två kolumner.

------------------
Adde

Medlem sedan dec. 200012 464 inlägg
#9

Jag förstår nu varför du får felet. Jag har stavat fel

if i + offset > topFeatured - 1 then offset = topFeatured -1 - i

Det borde lösa problemet med att du får samma produkter också

Det verkar inte vara min dag idag :x.

(Detta hade inte hänt om du haft med option explicit i din kod (och dimmat alla variabler). ;))

red:
Det där med två kolumner handlar väl mer om hur man lägger ut HTML. Om man tittar koden i browsern så brukar det vara enklare att upptäcka.
Förmodligen är det något problem med nästling av <tr> och <td> som int matchar. Egentligen kan jag för lite om HTML för att ge mig in på sådant.

------------------
essentitia preter non sans multiplicandum

[Redigerat av LarsG den 02 sep 2001]

Medlem sedan jan. 20013 406 inlägg
#10

okej

Jag ska försöka själv med att få två kolumner

------------------
Adde

Medlem sedan jan. 20013 406 inlägg
#11

Jag löste det till slut. Det blev 3 kolumner med 6 produkter

så här ser koden ut

<%
Randomize
CONST numFeatured = 6
' Hämta produkter som är erbjudanden
sqlString = "SELECT produkt_id, produkt_bild_liten, produkt_namn, produkt_info_liten, produkt_pris " &_
"FROM Produkter " &_
"WHERE produkt_status=1 " &_
"ORDER BY produkt_namn "
SET Featured = Con.Execute( sqlString )
IF NOT Featured.EOF THEN
featuredArray = Featured.GetRows()
Featured.Close
set featured = nothing

' Visa produkterbjudanden
topFeatured = UBOUND( featuredArray, 2 ) + 1
skip = topFeatured / numFeatured 
IF topFeatured <= numFeatured THEN skip = 1
%>
<table width="350" border="0" cellpadding="4" cellspacing="2">
<%
row = 0
FOR i = 0 TO topFeatured - 1 STEP skip
offset = int(RND * ( skip - 1 ))
if i + offset > topFeatured - 1 then offset = topFeatured -1 - i
produktID = featuredArray( 0, i + offset )
produktBildliten = featuredArray( 1, i + offset )
produktNamn = featuredArray( 2, i + offset )
produktInfoliten = featuredArray( 3, i + offset )
produktPris = featuredArray( 4, i + offset )

IF row = 0 or(row) = 3 THEN 
%>
<tr>
<% end if %>
<td valign="top"><a href="produkt.asp?pid=<%=produktID%>"><IMG SRC="bilder/<%=produktBildliten%>" border="0" align="left" width="60" height="60"></a></td>
<td width="300" valign="top">
<a href="produkt.asp?pid=<%=produktID%>"><font class="text_fet" style="color: #000000"><%=produktNamn%></font></a>
<font class="text" size="2"><br><%=TRIM(produktInfoliten)%></font>
<br><font class="text" align="right" style="color: #000080">Pris:&nbsp;<%=produktPris%>&nbsp;kr</font>
<% IF row = 5 or(row) = 6 THEN  %>
</tr>
<%
END IF
row = row +1
NEXT
%>
</table>
<%
END IF
%>

------------------
Adde

275 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)