Frågan 2 sep. 2001 13:29 #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 " "
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>
<%
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
L LarsG Medlem sedan dec. 2000 12 464 inlägg 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
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]
L LarsG Medlem sedan dec. 2000 12 464 inlägg 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
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
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
L LarsG Medlem sedan dec. 2000 12 464 inlägg 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
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
L LarsG Medlem sedan dec. 2000 12 464 inlägg 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]
okej
Jag ska försöka själv med att få två kolumner
------------------
Adde
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: <%=produktPris%> kr</font>
<% IF row = 5 or(row) = 6 THEN %>
</tr>
<%
END IF
row = row +1
NEXT
%>
</table>
<%
END IF
%>
------------------
Adde