SoulGodMedlem sedan aug. 20051 200 inlägg Jag har problem med att "blanda" ASP och HTML.
Själva dokumentet är ASP, men jag försöker göra detta.
En normal bildlänk är ju:
<img src="products/2.jpg">
Men jag vill ha något liknande:
<img src="products/<% Request.QueryString(R("ID")) %>.jpg">
Så scriptet skall alltså hämta -> Request.QueryString(R("ID")) <-
och sedan lägga in den istället för x i kodraden:
<img src="products/x.jpg">
Får inte det att fungera. Hjälp :)
cyprysMedlem sedan dec. 20003 563 inlägg <img src="products/<%=Request.QueryString("ID")%>.jpg">
Däremot är någon slags felhantering att rekommendera. T.ex. genom att köra
<img src="products/<%=checkImg(Request.QueryString("ID"))%>.jpg">
där funktionen checkImg är i stil med
function checkImg(imgName)
if imgName exists then checkImg = imgName
else checkImg = notAvaliable
och notAvaliable.jpg används om inte bilden finns.
Peter SMedlem sedan dec. 20025 483 inlägg <img src="products/<%=Request.QueryString(("ID")) %>.jpg">
:)
SoulGodMedlem sedan aug. 20051 200 inlägg Jag lade in följande kod i min functions.inc som jag inkluderar på alla sidor
(har flera funktioner där)
<% function checkImg(imgName)
if imgName exists then checkImg = imgName
else checkImg = notAvaliable
end function %>
Och sedan la jag in denna sträng i asp-sidan:
<img src="products/<%=checkImg(Request.QueryString("ID"))%>.jpg">
Men då får jag:
Feltyp:
Kompileringsfel i Microsoft VBScript (0x800A03F9)
'Then' förväntas.
/webshop/inc/functions.asp, line 119, column 11
if imgName exists Then checkImg = imgName
----------^
Kan jag inte köra via include?
Peter SMedlem sedan dec. 20025 483 inlägg Vad är 'exists'? Det skall vara ett 'then' allra sist på den rad det klagas på.
cyprysMedlem sedan dec. 20003 563 inlägg Min kod fungerar inte nej. Se det som en psuedokod.
där funktionen checkImg är i stil med
Med exists menar jag att du kan kolla emot en databas/filsystem, beroende på hur systemet ser ut, om bilden verkligen existerar.
Om du tycker det verkar jobbigt kan du ta den enkla vägen och ignorera felhantering och få ett rött kryss istället. ;) Men hur lärande och kul är det?
SannyWMedlem sedan jan. 2003438 inlägg Ger ett alternativ hur man kan lösa din önskan.
<%= GetImg(Request.Querystring("id"))%>
<%
'// Kontrollerar om bild finns.
Function GetImg(str)
'// mappen som bilderna ligger.
strCat = "products/"
'// skapar bildnamn och lägger till ändelsen .jpg
strFile = str &".jpg"
'// bygger ihop mappen och filnamnet för kontroll.
strPath = strCat &""& strFile
'// Skapar objektet
Set file = Server.CreateObject("Scripting.FileSystemObject")
'// Kontrollera om filen finns
If file.FileExists(Server.MapPath(strPath)) Then
'// om bilden finns.
GetImg = "<img src='"& strPath &"' alt='"& strFile &"' />"
Else
'// om bilden saknas.
GetImg = "Bild saknas"
End if
End Function
%>
SoulGodMedlem sedan aug. 20051 200 inlägg Jag har nu lagt in SannyW's kod in i min function.inc (som är inkluderad):
<%
'// Kontrollerar om bild finns.
Function GetImg(str)
'// mappen som bilderna ligger.
strCat = "products/"
'// skapar bildnamn och lägger till ändelsen .jpg
strFile = str &".jpg"
'// bygger ihop mappen och filnamnet för kontroll.
strPath = strCat &""& strFile
'// Skapar objektet
Set file = Server.CreateObject("Scripting.FileSystemObject")
'// Kontrollera om filen finns
If file.FileExists(Server.MapPath(strPath)) Then
'// om bilden finns.
GetImg = "<img src='"& strPath &"' alt='"& strFile &"' />"
Else
'// om bilden saknas.
GetImg = "<img src='pics/nopic.gif' border='0'>"
End if
End Function
%>
Sedan kör jag med följande kod i själva dokumentet som används.
Dock får meddelandet "loop" förväntas på rad 1688. (det är <% else %> raden)
Jag har ju en loop längre ner, som ska "täcka" det, eftersom den ska rada upp flera saker. Kan någon säga mig vad som är fel?
<% ' *** Get the latest products from database
Set C = Server.CreateObject("ADODB.Connection")
C.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databejs.mdb")
Set R = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT TOP " & intAmountLatestProducts & " ID, product, price FROM products ORDER by ID DESC"
R.Open SQL, C, 1, 3
If Not R.EOF Then
Do Until R.EOF %>
<a href="default.asp?id=<%=R("ID")%>"><%= GetImg(Request.Querystring(R("id")))%>
<% Else %>
<a href="default.asp?id=<%=R("ID")%>"><%= GetImg(Request.Querystring("id"))%></a>
<% End if
Set fs = Nothing %>
<br>
<%=R("product")%></a><br>
<font class="price"><%=R("price") * Session("moms") & " " & strCurrency %></font> <a href="default.asp?add=<%=R("ID")%>"><%= buy %></a><br>
<br>
<% R.MoveNext
Loop
End if
R.Close
C.Close %>
esrangeMedlem sedan jan. 20065 inlägg Felet ligger i att du har skrivit:
If ... Then
Do Until R.EOF
Else
Loop
End If
Du måste skriva:
If ... Then
Do Until R.EOF
Loop
Else
End If
Om det nu är så att du innan loopen vill kolla om databasen har returnerat något eller inte. Titta på din kod igen så ser du felet.
SoulGodMedlem sedan aug. 20051 200 inlägg Ehm, ja, hänger med på vad du skriver. Dock är nu min fråga denna:
Jag kan ej lägga loopen före "else", för det är alltså....
Ska försöka förklara.
Först, skall scriptet söka igenom databasen efter nya produkter,
och därefter hämta bilderna ifrån den.
Och där använder jag delvis koden jag fick av SannyW
<a href="default.asp?id=<%=R("ID")%>"><%= GetImg(Request.Querystring(R("id")))%>
Men den ska ju OCKSÅ hämta informationen som står längre ner (products o.s.v.),
så det är alltså en "if" och en "else", inuti hela koden, så om jag flyttar upp LOOPEN,
så kommer inte products o.s.v. med....
Eller tänker jag helt fel nu?
SoulGodMedlem sedan aug. 20051 200 inlägg Kör en annan kod nu, bara för att testa ...
<% ' *** Get the latest products from database
Set C = Server.CreateObject("ADODB.Connection")
C.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("databejs.mdb")
Set R = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM products ORDER by ID DESC"
R.Open SQL, C, 1, 3 %>
<%=GetImg(Request.Querystring("id")) %>
<% Response.Write(R("ID")) %>
Och GetImg är fortfarande functionen jag fick av SannyW (se min föregående tråd)
Och jag får bara upp "nopic.gif" som alltså är felsökningskoden i funktionen.
Någon som vet vad som är fel?
SannyWMedlem sedan jan. 2003438 inlägg Finns det något värde?
Request.Querystring("id")
Typ: default.asp?id=1
Och finns det då en fil som heter 1.gif i katalogen products.
Om jag skall tro så skall väl
GetImg(Request.Querystring("id"))
bytas mot denna.
GetImg(R("id"))
SoulGodMedlem sedan aug. 20051 200 inlägg Tack så mycket, det fungerar nu. Var jag som gjort helt fel (använde request.querystring),
vilket bara fungerade på första-sidan, ej på denna. Tack så mycket till alla er som hjälpt mig!!