19. juli 2002 - 16:16Der er
82 kommentarer og 1 løsning
Hente billede fra database
I min bildatabase vil jeg gerne have lavet en mulighed for også at vise billeder. Jeg har en allerede en form/script, som indsætter data i db'en og jeg har også et script, som uploader filer til serveren og smider et link i db'en. Disse ting vil jeg gerne have kombineret, men det skal laves, så man efterfølgende kan uploade et billede af en bil, som allerede ligger i db'en. Desuden ved jeg heller ikke, hvordan jeg skal hente billederne i db'en, da stien i db'en som refererer til billederne på db'en er stien på serveren (hvis I forstår hvad jeg mener) Her er de scripts som jeg bruger.
' Skaber et recordset udfra SQL strengen Set rs = Conn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<h4 align=center><font face=Verdana>Her er resultatet af din søgning</font></h4><hr><br>" Response.Write "<table border=0 cellpadding=3>"
Response.Write "<tr bgcolor=#336699><th ><font color=white face=verdana size=2>Bilmærke</font></th><th><font color=white face=verdana size=2>Model</font></th><th><font color=white face=verdana size=2>Årgang</th><th><font color=white face=verdana size=2>Km</th><th><font color=white face=verdana size=2>Pris</th><th><font color=white face=verdana size=2>Forhandler</th></tr>" Do While Not rs.EOF Response.Write "<tr bgcolor=#000066><td><font color=white face=verdana size=2>" & rs("Bilmaerke") & "</font></td>" Response.Write "<td><font color=white face=verdana size=2>" & rs("Model") & "</td>" Response.Write "<td align=center><font color=white face=verdana size=2>" & rs("Aargang") & "</td>" Response.Write "<td align=right><font color=white face=verdana size=2>" & rs("Km") & "</td>" Response.Write "<td align=right><font color=white face=verdana size=2>" & rs("Pris") & "</td>" 'Find link til forhandleren... strSQL = "SELECT link FROM for WHERE forhandlerId =" & rs("forhandlerId") set linkRs = Conn.execute(strSQL) if (linkRs.EOF) OR (Len("" & linkRs("link") & "") = 0) then Response.Write "<td align=left><font color=white face=verdana size=2>" & rs("Forhandler") & "</td></tr>" else Response.Write "<td align=left><font color=white face=verdana size=2><a href=""" & linkRs("link") & """>" & rs("Forhandler") & "</a></td></tr>" end if
rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p><font color=black face=verdana size=3><b>Der er ikke fundet noget på denne søgning</b></p><br>" End If
' Rydder op efter os Conn.Close Set Conn = Nothing %>
Script til at uploade billeder til serveren og link til db'en.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Ligger filen i databasen eller linker der et link i databasen???
Hvis der ligger et link i databasen kan du vise billedet ved at skriver: <img scr="<%=rs("filsti")%>">
Det vil være en god ide at gemme filstien så du gemmer fra roden af din web-server og ikke noget med ../..blabla/ i sti navnet da det bliver umuligt at udregne hvor billede filen befinder sig.
OK. Kan det lade sig gøre at indsætte et link til et billede til en allerede eksisterende post i db'en? Sådan som uploadfunktionen virker nu, så lægger den bare et link som den næste post i db'en. Eks. Hvis jeg efterfølgende vil uploade et billede af bil nr. 7 i db'en, hvordan undgår jeg så, at linket ender som post nr. 11 i db'en? (altså hvis der i forvejen er 10 poster i db'en?
Ja, det er det jeg mener. Det skal bare laves, så man indsætter billedet (linket) sammen med de andre de andre data på bilen i db'en, men hvis man i første omgang undlader at indsætte et billede, så skal man bagefter kunne indsætte et billede af en hvilken som helst bil i db'en!
Hvordan får jeg kombineret de de forskellige scripts, som indsætter data og billede (link) i db'en, altså
Nu kende jeg ikke lige Chili.Upload men typisk med andre upload kompunenter kan man lave en form som både indeholder billede filer og andre felter. Når man hendter de andre form elementer kan man ikke bruge Request.Form("felt") men man skal bruger navnet .Form på upload objectet, fbase.Form("felt")
Nu ved jeg ikke hvordan indsaet.asp ser ud.. Jeg ville tror det er i en linie med Request.form, som sagt hvis man bruger andre upload kompunenter skal kan man ikke brige request.form..
Dette kode er som det skulle være hvis det var en anden upload kompunetn og jeg ville tror det var noget i samme stil....:
Kan du for test prøve at lave en fil som formen bliver send til som indeholder dette:
<% Set fbase = Server.CreateObject("Chili.Upload.1") dim strSentence, arrWords, strOneWord, element
Der var en fejl i min db-forbindelse, som jeg har rettet. Nu får jeg fejlen
ADODB.Connection.1 error '80004005'
SQLState: 22005 Native Error Code: -3030 [INTERSOLV][ODBC SequeLink driver][ACCESS][Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
Insert into biler (Bilmaerke,Model,Aargang,Km,Pris,Forhandler, ForhandlerId) values('','','','','','','') ADODB.Connection.1 error '80004005'
SQLState: 22005 Native Error Code: -3030 [INTERSOLV][ODBC SequeLink driver][ACCESS][Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
Ok.. Jeg har kigget på det link og jeg kan ikke se man kan få form data med over... Har du prøvet st skrive en mail og spørge dem som du har dit web-hotel ved??
Jeg kan heller ikke finde så meget på nettet omkring det. Eller kan du bruge en Upload function som ikke bruger en Upload kompunent??
Kan jeg adskille de 2 funktioner,- de fungerer jo ok hver for sig? Jeg kan godt leve med, at man skal uploade billederne seperat. Problemet er så at få scriptet til at finde den dbpost som billedet (linket) er knyttet til, og ikke bare optræde som en ny post i db'en. Ved du hvordan jeg gør det. Er det det her jeg så skal bruge?
Eks: "UPDATE tabel SET filsti = '" & nyt_billede & "' WHERE id = " & valgt_bil
og hvordan får jeg det puttet ind i Chili.Upload-scriptet?
Det er support på mit webhotel som har lavet scriptet, og de er ikke villige til yderligere programmering.
De skriver at der kan være en anden mulighed, nemlig upload uden komponent. Hvordan virker det? Jeg har læst andre steder, at det skulle være langsomt, men det er ok, hvis det ikke kan være anderledes.
Så kommer vi til om Request.Querystring virker med Chili.Upload. Så kan du lave dit script som gemmer som du har lavet, og så sette SQL fra INSERT INTO til:
valgt_bil = Request.QueryString("valgt_bil_id") strSQL = "UPDATE tabel SET filsti = '" & FILSTI & "' WHERE id = " & valgt_bil
Men jeg ved heller ikke om det virker med Querystring når nu FORM data ikke kommer over.
Det er et script som kan uploade uden brug af kompunenter og det kan havde både filer og andre input felter i FORM'en. Så du kan ligge billet ind med det samme.
Jeg har faktisk et script, som returnerer en tabel med bilerne. I tabellen er der mulighed for både at slette og opdatere poster. (Jeg tror faktisk, at det er dig som har hjulpet mig med at lave den!)Det ville være alle tiders hvis der også kunne være en knap til upload af billeder ud for hver bil.Scriptet ser sådan ud.
<% 'hvis session("brugerID") er tom så er man ikke logget ind. if session("brugerID") = "" then response.write "du skal være logget ind" else ' Databaseforbindelse ConnString = "DSN=riishojwebsoftdkdsn" Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open ConnString
strSQL = "SELECT ID, Bilmaerke, Model, Aargang, Km , Pris , for.navn as Forhandler FROM biler left join for ON biler.ForhandlerId = for.forhandlerId WHERE for.forhandlerId = " & Session("brugerID") & ";"
Set rs = Conn.Execute(strSQL) if NOT rs.EOF then ' Hvis der er fundet poster på søgningen Response.Write "<h4 align=center><font face=Verdana>Her er resultatet af din søgning</font></h4><hr color=#000000 size=1><br>"
Response.Write "</table><br>" Response.Write "<font color=black face=verdana size=2>Her kan du indsætte nye biler i bildatabasen<br>" Response.Write "<font color=#000000 face=verdana size=2><a href='indsaet.htm'>Indsæt</a><br>"
Jeg har prøvet dit forslag. Problemet er, at linket ikke bliver sat sammen med den bil, man vælger i tabellen, men bliver vist som den næste post i db-tabellen, og det er jo ikke smart.
Nej, nej eagleeye, det er ikke det jeg mener, det er meget værre! Når jeg f.eks. vil uploade et billede af bilen med f.eks ID=10, så ender linket ikke i kolonnen Link ud for bilen ID=10, men det bliver sat ind i den første tomme række i db-tabellen, hvis du forstår, hvad jeg mener
Et andet alternativ jeg kom til at tænke på var om man kan bruge Request.BinaryRead i sted for Form, hvis de to sidte indlæg ikke giver noget så prøv det jeg forslår i dette indlæg:
Prøv at lave din upload form om til dette: <FORM ACTION="fileupld.asp" METHOD="POST" ENCTYPE="multipart/form-data"> <input type="hidden" name="bil" value="<%=Request.QueryString("bilid")"> <INPUT TYPE="FILE" NAME="FILE"> <INPUT TYPE="SUBMIT" VALUE="Send"> </FORM>
I filen fileupld.asp skal denne linie: valgt_bil = Request.QueryString("valgt_bil_id")
Yes, så virker det!! Du er bare skrap til det her. Næste problem er så at hente billedet igen. Jeg har jo det her script, som henter alle biler i databasen. Jeg kunne godt tænke mig en celle i den tabel med et link til billedet. Det kunne være et billede af et lille fotoapparat (det har jeg set nogen steder) eller bare en tekst. Kan du også klare den for mig?? Scriptet ser sådan ud
' Skaber et recordset udfra SQL strengen Set rs = Conn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<h4 align=center><font face=Verdana>Her er resultatet af din søgning</font></h4><hr><br>" Response.Write "<table border=0 cellpadding=3>"
Response.Write "<tr bgcolor=#336699><th ><font color=white face=verdana size=2>Bilmærke</font></th><th><font color=white face=verdana size=2>Model</font></th><th><font color=white face=verdana size=2>Årgang</th><th><font color=white face=verdana size=2>Km</th><th><font color=white face=verdana size=2>Pris</th><th><font color=white face=verdana size=2>Forhandler</th></tr>" Do While Not rs.EOF Response.Write "<tr bgcolor=#000066><td><font color=white face=verdana size=2>" & rs("Bilmaerke") & "</font></td>" Response.Write "<td><font color=white face=verdana size=2>" & rs("Model") & "</td>" Response.Write "<td align=center><font color=white face=verdana size=2>" & rs("Aargang") & "</td>" Response.Write "<td align=right><font color=white face=verdana size=2>" & rs("Km") & "</td>" Response.Write "<td align=right><font color=white face=verdana size=2>" & rs("Pris") & "</td>" 'Find link til forhandleren... strSQL = "SELECT link FROM for WHERE forhandlerId =" & rs("forhandlerId") set linkRs = Conn.execute(strSQL) if (linkRs.EOF) OR (Len("" & linkRs("link") & "") = 0) then Response.Write "<td align=left><font color=white face=verdana size=2>" & rs("Forhandler") & "</td></tr>" else Response.Write "<td align=left><font color=white face=verdana size=2><a href=""" & linkRs("link") & """>" & rs("Forhandler") & "</a></td></tr>" end if
rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p><font color=black face=verdana size=3><b>Der er ikke fundet noget på denne søgning</b></p><br>" End If
' Rydder op efter os Conn.Close Set Conn = Nothing %>
if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Response.write "<img src=""" & rs("Filstier") & """>" else 'Ingen billede vis default billede Response.write "<img src=""/images/default.jpg"">" end if
Det kan være det skal ind i en <td> i den tabel du udskriver ??
' Skaber et recordset udfra SQL strengen Set rs = Conn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<h4 align=center><font face=Verdana>Her er resultatet af din søgning</font></h4><hr><br>" Response.Write "<table border=0 cellpadding=3>"
Response.Write "<tr bgcolor=#336699><th ><font color=white face=verdana size=2>Bilmærke</font></th><th><font color=white face=verdana size=2>Model</font></th><th><font color=white face=verdana size=2>Årgang</th><th><font color=white face=verdana size=2>Km</th><th><font color=white face=verdana size=2>Pris</th><th><font color=white face=verdana size=2>Forhandler</th></tr>" Do While Not rs.EOF Response.Write "<tr bgcolor=#000066><td><font color=white face=verdana size=2>" & rs("Bilmaerke") & "</font></td>" Response.Write "<td><font color=white face=verdana size=2>" & rs("Model") & "</td>" Response.Write "<td align=center><font color=white face=verdana size=2>" & rs("Aargang") & "</td>" Response.Write "<td align=right><font color=white face=verdana size=2>" & rs("Km") & "</td>" Response.Write "<td align=right><font color=white face=verdana size=2>" & rs("Pris") & "</td>" 'Find link til forhandleren... strSQL = "SELECT link FROM for WHERE forhandlerId =" & rs("forhandlerId") set linkRs = Conn.execute(strSQL) if (linkRs.EOF) OR (Len("" & linkRs("link") & "") = 0) then Response.Write "<td align=left><font color=white face=verdana size=2>" & rs("Forhandler") & "</td></tr>" else Response.Write "<td align=left><font color=white face=verdana size=2><a href=""" & linkRs("link") & """>" & rs("Forhandler") & "</a></td></tr>" end if
if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Response.write "<td align=left><font color=white face=verdana size=2><img src=""" & rs("Filstier") & """>" else 'Ingen billede vis default billede Response.write "<td align=left><font color=white face=verdana size=2><img src=""/images/default.jpg"">" end if
rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p><font color=black face=verdana size=3><b>Der er ikke fundet noget på denne søgning</b></p><br>" End If
' Rydder op efter os Conn.Close Set Conn = Nothing %>
men jeg får fejlen
error '800a0cc1' ADO Could not find the object in the collection corresponding to the name or ordinal reference requested by the collection.
Jeg tror de er rigtigt nu. Dvs. hvis der er et billede tilknyttet bilen, så vil det blive vist ved siden af tabellen. Hvordan vil det se ud hvis det er et stort billede? Kan det ikke laves, så det er en knap eller lille billede, evt. fotoapparat, som sender en videre til billedet? Der er også et problem med stien til billedet, da den virtuelle og den fyskiske stil bliver blandet sammen. Prøv at se her
Jeg har prøvet dit første forslag, men der kommer stadig intet billede, så de er altså et problem med stien til billedet. Jeg synes bedst om din sidste løsning, men problemet med stien skal vel løses først.
' Skaber et recordset udfra SQL strengen Set rs = Conn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then ' Hvis der er fundet poster på søgningen Response.Write "<h4 align=center><font face=Verdana>Her er resultatet af din søgning</font></h4><hr><br>" Response.Write "<table border=0 cellpadding=3>"
Response.Write "<tr bgcolor=#336699><th ><font color=white face=verdana size=2>Bilmærke</font></th><th><font color=white face=verdana size=2>Model</font></th><th><font color=white face=verdana size=2>Årgang</th><th><font color=white face=verdana size=2>Km</th><th><font color=white face=verdana size=2>Pris</th><th><font color=white face=verdana size=2>Forhandler</th></tr>" Do While Not rs.EOF Response.Write "<tr bgcolor=#000066><td><font color=white face=verdana size=2>" & rs("Bilmaerke") & "</font></td>" Response.Write "<td><font color=white face=verdana size=2>" & rs("Model") & "</td>" Response.Write "<td align=center><font color=white face=verdana size=2>" & rs("Aargang") & "</td>" Response.Write "<td align=right><font color=white face=verdana size=2>" & rs("Km") & "</td>" Response.Write "<td align=right><font color=white face=verdana size=2>" & rs("Pris") & "</td>" 'Find link til forhandleren... strSQL = "SELECT link FROM for WHERE forhandlerId =" & rs("forhandlerId") set linkRs = Conn.execute(strSQL) if (linkRs.EOF) OR (Len("" & linkRs("link") & "") = 0) then Response.Write "<td align=left><font color=white face=verdana size=2>" & rs("Forhandler") & "</td>" else Response.Write "<td align=left><font color=white face=verdana size=2><a href=""" & linkRs("link") & """>" & rs("Forhandler") & "</a></td>" end if
if Len("" & rs("Filstier")) > 0 then 'Billede findes i databasen Response.write "<td align=left><font color=white face=verdana size=2><img src=""/" & rs("Filstier") & """></td></tr>" else 'Ingen billede vis default billede Response.write "<td align=left><font color=white face=verdana size=2><img src=""/images/default.jpg""></td></tr>" end if
rs.MoveNext Loop Response.Write "</table>" Else ' Hvis der ikke er fundet poster på søgningen Response.Write "<p><font color=black face=verdana size=3><b>Der er ikke fundet noget på denne søgning</b></p><br>" End If
' Rydder op efter os Conn.Close Set Conn = Nothing %>
Billederne skal ligge på samme server for at blive vist hvis man angiver stien mend /upload/xxx.gif, hvis man hendter et billede fra en anden server skal man skriver http://www.xxx.dk/xxx.gif
Hva' gør jeg så nu? Problemet opstår ved at mit webhotel (Enavn) bruger Linux-servere, som ikke understøtter Access-databaser. Man har derfor lagt min Access-database på en Windows-server og lavet en DSN connection til denne. Skal stierne så angives anderledes i scriptet?
Puha, den var svær men nu virker det!!:) Hvis du stadig har energi til at hænge på, så vil jeg godt vende tilbage til din anden løsning, altså den med et link til billedet. Du skriver
I sted for at vise billedet af bilen kan man eksvis vise et lille billede og så link til en fil som viser billedet vha af en querystring med bilid:
<html> <body> <% Set rs = Conn.Execute(strSQL) If Not (rs.BOF Or rs.EOF) Then Response.write "<img src=""/" & rs("Filstier") & """>" end if %> </body> </html>
Det var den helt lette/skrabede vis bille fil, du kan evt indsætte nogle andre informationer omkring bilen???
Det var da godt nok underligt, men nu virker det. Jeg kunne godt tænke mig at udvide informationerne omkring de enkelte biler. Prøver lige at knokle med det selv, og kan jeg ikke finde ud af det, så opretter jeg et nyt spørgsmål. Du har sandelig arbejdet hårdt for de sølle 60 point, tusind tak for din indsats. Send lige et svar, så du kan får dine point:)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.