kvikks Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 Heisann Prøver å få til et script som kan håndtere et skjema med filopplastning. Alt skal legges i SQL, evt bildet kan legges i en mappe på server, må bare ha bildets sti i databasen. Noen som kan gi meg litt tips i hvordan dette skal skrives? Jeg har fått til å laste opp, men plages med å finne ut hvordan eg kan få fanget opp stien til bildet. Kode: <% Wfolder="../filer/images/" Set Upload = Server.CreateObject("Persits.Upload") NumberOfFiles= Upload.SaveVirtual(Wfolder) Response.Redirect(filename.asp) %> Laster opp til server, men hvordan få dette til å virke mot en database. Har da funnet og kommet frem til dette; Kode: <% Set Upload = Server.CreateObject("Persits.Upload") ' Set max size Upload.SetMaxSize 50000, False ' Force Unique Filename Upload.OverwriteFiles = False ' Capture files Upload.Save "..\filer\images\" ' Obtain file object Set File = Upload.Files("THEFILE") If Not File Is Nothing Then ' Build ODBC connection string Connect = "string her" ' If you use SQL Server, the connecton string must look as follows: ' Connect = "Driver=SQL Server;Server=MYSERVER;UID=sa;PWD=xxxxxxxxx" ' Build SQL INSERT statement SQL = "INSERT INTO tabellTest(image_blob, filename, description, filesize) VALUES(?, '" SQL = SQL & File.Filename & "', '" SQL = SQL & Replace(Upload.Form("DESCR"), "'", "''") & "', " SQL = SQL & File.Size & ")" ' Save to database File.ToDatabase Connect, SQL Response.Write "File saved." Else Response.Write "File not selected." End If %> Men ser ikke ut til å virke veldig bra. Oppsummering; Tanken er et skjema med; Tittel; Spalte; Tekst; Bildesti; og evt. de kolonner bildeopplastning krever. Håper noen kan gi meg tips, er litt noob i ASP. Lenke til kommentar
Kirikiri Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 Prøv å gjøre response.write på SQL-statementet uten å sende det til databasen, så du ser at riktige verdier faktisk dukker opp. Jeg tror faktisk jeg ville opprettet egne variabler for de verdiene som er f.eks file.size og sånn, og evt. gjøre sjekker om det legges inn noe eller ikke. Jeg ville ha lastet opp filene utenfor databasen, og heller bare lagt inn filnavnet i databasen. Så må du legge inn filstien i html-koden når du skal lage visning av siden. Kirikiri Lenke til kommentar
kvikks Skrevet 7. desember 2004 Forfatter Del Skrevet 7. desember 2004 (endret) Prøv å gjøre response.write på SQL-statementet uten å sende det til databasen, så du ser at riktige verdier faktisk dukker opp. Jeg tror faktisk jeg ville opprettet egne variabler for de verdiene som er f.eks file.size og sånn, og evt. gjøre sjekker om det legges inn noe eller ikke. Jeg ville ha lastet opp filene utenfor databasen, og heller bare lagt inn filnavnet i databasen. Så må du legge inn filstien i html-koden når du skal lage visning av siden. Kirikiri Hm.. som sagt litt noob i ASP... kan du forklare litt bedre hva du mener? Har bare fulgt tutorials uten helt å ha kontroll over hva som skjer... Det hadde fungert utmerket laste fil direkte på disk, men må da få lagt stien i databasen, hvordan kan eg få til det? Stien som skal inn i html skal hentes fra db... Flott om noen kunne forklart steg for steg hvordan eg gjør det, altså får et skjema som dette; Tittel; tekst til db Tekst; tekst til db Spalte; tekst til db Bilde; felt og last opp bilde til disk eller db (trenger kun bildesti i db) Skal være til en av mine private sider, siden denne lå på ASP server tenkte eg hvorfor ikkje bruke ASP på denne... tabbe føler eg nå.. Endret 7. desember 2004 av kvikks Lenke til kommentar
Kirikiri Skrevet 7. desember 2004 Del Skrevet 7. desember 2004 (endret) Ville gjort noe sånn som <!-- lenge siden jeg skrev ASP-kode sist... men noe sånn er det vel --> Function LagreFilOgDatabase() dim sTittel, sTekst, sSpalte, sFilNavn, sSQL dim iFilStr sTittel = request.form("txtTittel") sTekst = request.form("txtTekst") sSpalte = request.form("txtSpalte") <!-- hvis filhåndteringen din fungerer, så bruk den slik den står. Der kan jeg ikke hjelpe deg. Men jeg ville lagt det i en egen funksjon som returnerer en boolean. Hvis filen blir lagret på serveren, så True, tilsvarende False. --> if LagreFilTilServer then if len(File.Filename) > 0 then sFilNavn = File.Filename iFilStr = File.FileSize else Response.Write("Finner ikke noe filnavn!") end function <!-- litt usikker på denne, men poenget er at du ikke trenger å gå videre hvis du ikke har noe filnavn --> end if <!-- Og så skriver du til databasen. Skal det kun knyttes en fil til en tittel? I så fall kan du legge alt i samme tabell. --> sSQL = "Insert into tblTekstOgBilde (dbTittel, dbTekst, dbSpalte, dbFilNavn, dbFilStr) " sSQL = sSQL & " values (" & sSQL = sSQL & "' " & sTittel &"', '"& sTekst &"'", '" & sSpalte "', '" & sFilNavn &"', " iFilStr &");" <!-- og legg inn connectionkode etc --> end if End Function Tilsvarende når du skal hente ut og vise fram: sSQL = "Select dbTittel, dbTekst, dbSpalte, dbFilnavn, dbFilStr from tblTekstOgBilde where dbID = " & ID if not rs.eof or rs.bof then <!-- forutsatt at du har brukt rs som navn på recordsettet ditt. Du må legge inn kode for å hente ut data fra databasen, dvs kobling og connection etc. --> < table > < tr> < td colspan=2> < %Response.Write("dbTittel")%> < /td> < /tr> < tr> < td> < % Response.Write("dbTekst")%> <br> < % Response.Write("dbSpalte")%> < /td> <td> < img src=http ://DinURLTilBildeKartoteket/" & < % Response.Write("dbFilnavn")%> &" alt=Mitt bilde> <br>Filstørrelse: < % Response.Write("dbFilStr")%> </td> </tr> </table> else Response.Write("Fant ingen data med den ID'en.") end if Koden stemmer konseptuelt, men det mangler håndtering av kobling til databasen. Den må du lage selv. Hvis bilde og tekst skal kunne brukes hver for seg, så må du gjøre det annerledes. En tabell for teksten, en for fildata, og en koblingstabell. I så fall må du lage 1) en funksjon som laster opp filen til serveren og skriver data til databasen. Denne må returnere en ID til fila. 2) en funksjon som skriver tekst til databasen. Denne må også returnere en ID til teksten. 3) En funksjon som skriver bilde-ID og tekst-ID til hjelpetabellen i databasen. For å hente ut, lager du en query der du henter ut tekst med ID og info om alle bilder som tilhører denne teksten, basert på hjelpetabellen. Kirikiri Endret 7. desember 2004 av Kirikiri Lenke til kommentar
kvikks Skrevet 7. desember 2004 Forfatter Del Skrevet 7. desember 2004 Tusen takk, skal teste dette i kveld.. blir sikkert litt trøbbel, men får komme å sutre her da Nok engang takk for hjelp så langt Lenke til kommentar
kvikks Skrevet 8. desember 2004 Forfatter Del Skrevet 8. desember 2004 (endret) Ble ikkje helt uten problem dette Får denne feilmeldinga; Microsoft VBScript compilation error '800a03f4' Expected 'If' /NO/admin/filename.asp, line 19 end function ----^ Det er end function her det er snakk om; else Response.Write("Finner ikke noe filnavn!") end function end if Sleger eg inn en if får eg; Microsoft VBScript compilation error '800a0401' Expected end of statement /NO/admin/filename.asp, line 19 end if function -------^ OK, fjernet end function, ser ut som det gikk bra... Men så får eg denne; Microsoft VBScript compilation error '800a03ea' Syntax error /NO/admin/filename.asp, line 22 sSQL = sSQL & " values (" & ---------------------------^ sSQL = "Insert into db (tittel, spalte, dato, tekst, skribent, filnavn, filstr)" sSQL = sSQL & " values (" & sSQL = sSQL & "', '" & sTittel & "', '" & sDato & "', '" & sTekst & "', '" & sSpalte & "', '" & sFilNavn & "', '" & iFilStr &");" Endret 8. desember 2004 av kvikks Lenke til kommentar
kvikks Skrevet 8. desember 2004 Forfatter Del Skrevet 8. desember 2004 Hm, dette var ikke lett. Er kommet frem til dette, som selvsagt ikke fungere... <% Function saveFileAddDB() dim sTittel, sSpalte, sDato, sTekst, sSkribent, sFilnavn, sSQL dim iFilStr sTittel = request.form("tittel") sSpalte = request.form("spalte") sDato = request.form("dato") sTekst = request.form("tekst") sSkribent = request.form("skribent") Set Upload = Server.CreateObject("Persits.Upload") ' Set max size Upload.SetMaxSize 50000, False ' Force Unique Filename Upload.OverwriteFiles = False ' Capture files Upload.Save "..\filer\images\" ' Obtain file object Set File = Upload.Files("THEFILE") if Upload then if len(File.Filename) > 0 then sFilNavn = File.Filename iFilStr = File.FileSize else Response.Write("Finner ikke noe filnavn!") end if Connect = "DRIVER={SQL Server};SERVER=IP;UID=Brukernavn;PWD=Passord;DATABASE=NavnDB" sSQL = "Insert into db(tittel, spalte, dato, tekst, skribent, filnavn, filstr)" sSQL = sSQL & "', '" sSQL = sSQL & "', '" & sTittel & "', '" & sDato & "', '" & sTekst & "', '" & sSpalte & "', '" & sFilNavn & "', '" & iFilStr &");" Response.Redirect(godkjent.asp) end if End function %> Får ingen feilmeldinger nå, men det virker som det ikkje skjer noe.. ingen ting havner db iallefall.. Hjelp... Lenke til kommentar
Kirikiri Skrevet 8. desember 2004 Del Skrevet 8. desember 2004 SQL-biten først: Det er et komma for mye i linja under den linja som feiler på value. Og så skal det ikke være ' foran iFilStr, hvis det er et int-felt i db. sSQL = "Insert into db (tittel, spalte, dato, tekst, skribent, filnavn, filstr)" sSQL = sSQL & " values ('" & sSQL = sSQL & "'" & sTittel & "', '" & sDato & "', '" & sTekst & "', '" & sSpalte & "', '" & sFilNavn & "', " & iFilStr &");" Mulig det ikke skal være End Function i ASP-kode. Husker ikke helt, snart 2 år siden jeg skrev det sist. Gjør litt debugging ved å skrive ut SQL-stringen din før du sender til database. Response.Write("SQL: " & sSQL) Men det ser ut som om du mangler det å skrive til databasen. Du må sette opp slik at du får sendt SQL-statementet til databasen. Mangler det helt i koden, eller har du klippet det ut av eksempelet? Kirikiri Lenke til kommentar
kvikks Skrevet 9. desember 2004 Forfatter Del Skrevet 9. desember 2004 (endret) Eg får feil i SQL biten din; Microsoft VBScript compilation error '800a03ea' Syntax error /NO/admin/post_nettnaa.asp, line 39 sSQL = sSQL & " values ('" & ----------------------------^ hva kan man gjøre med dette? Nå ser min kode slik ut; <% Function saveFileAddDB() dim sTittel, sSpalte, sDato, sTekst, sSkribent, sFilnavn, sSQL dim iFilStr sTittel = request.form("tittel") sSpalte = request.form("spalte") sDato = request.form("dato") sTekst = request.form("tekst") sSkribent = request.form("skribent") Set Upload = Server.CreateObject("Persits.Upload") ' Set max size Upload.SetMaxSize 50000, False ' Force Unique Filename Upload.OverwriteFiles = False ' Capture files Upload.Save "..\filer\images\" ' Obtain file object Set File = Upload.Files("THEFILE") if Upload then if len(File.Filename) > 0 then sFilNavn = File.Filename iFilStr = File.FileSize else Response.Write("Finner ikke noe filnavn!") end if Response.Write("SQL: " & sSQL) Connect = "db_string" sSQL = "Insert into db (tittel, spalte, dato, tekst, skribent, filnavn, filstr)" sSQL = sSQL & " values ('" & sSQL = sSQL & "'" & sTittel & "', '" & sDato & "', '" & sTekst & "', '" & sSpalte & "', '" & sFilNavn & "', " & iFilStr &");" ' Save to database File.ToDatabase Connect, SQL Response.Write "File saved." Else Response.Write "File not selected." End If %> Endret 9. desember 2004 av kvikks Lenke til kommentar
Kirikiri Skrevet 9. desember 2004 Del Skrevet 9. desember 2004 Response.Write("SQL: " & sSQL) Connect = "db_string" sSQL = "Insert into db (tittel, spalte, dato, tekst, skribent, filnavn, filstr)" sSQL = sSQL & " values ('" & sSQL = sSQL & "'" & sTittel & "', '" & sDato & "', '" & sTekst & "', '" & sSpalte & "', '" & sFilNavn & "', " & iFilStr &");" ' Save to database File.ToDatabase Connect, SQL My bad på SQL-strengen. Nå er det to enkeltfnutter (') etter hverandre. FJern ' fra linja sSQL = sSQL & " values ('" & og så setter du Response.Write("SQL: " & sSQL) ETTER at du har fylt sSQL, ikke før. Kjør bare den, og dropp resten av sjekkene, for å teste hvordan SQL-statementet ditt faktisk ser ut. Hvordan er syntax, og hva er det som blir sendt inn, spesielt fra File-biten. Kirikiri Lenke til kommentar
kvikks Skrevet 9. desember 2004 Forfatter Del Skrevet 9. desember 2004 Har endelig fått det til! Funke som bare det nå! Takk for all hjelp, Kirikiri Lenke til kommentar
Kirikiri Skrevet 10. desember 2004 Del Skrevet 10. desember 2004 Bare hyggelig. KK Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå