Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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
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 av kvikks
Lenke til kommentar

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 av Kirikiri
Lenke til kommentar

Ble ikkje helt uten problem dette :hmm:

 

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 av kvikks
Lenke til kommentar

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

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

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 av kvikks
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...