Avatar billede labanen Nybegynder
14. februar 2008 - 23:32 Der er 26 kommentarer og
1 løsning

upload script find fem fejl

hej eksperter

Er der nogen der kan lure hvad jeg gør forkert her ?

Jeg har et script som skal uploade en fil. Men inden det gøres skal filen tjekkes for størrelse (200kb) samt format (gif, tif og jpg).

Variablen Billedenavn sættes til "nope" hvis ikke der uploades noget billede sammen med posten.

Nedenstående er sikkert et frygteligt rod. Da jeg har forsøgt at skrive mit gamle fungerende script sammen med et som tjekkede for type og størrelse, for det gjorde mit gamle script ikke. Adressen efter upload.save er den rette adresse, der gemte den til før jeg begyndte at lege med at tjekke ting :-)

God jagt og på forhånd tak.

-Labanen
-----------------
  fejl = false
  Billedenavn      = "nope"
  Set Upload = Server.CreateObject("Persits.Upload.1")
  If Not Upload.Files("FILE1") Is Nothing Then
    Set file = Upload.Files("FILE1")
      if lCase(file.ext) = "tif" Or lCase(file.ext) = "gif" or lCase(file.ext) = "jpg" and File.Size < 200000 Then
        Upload.Save("d:\home\feltkursus2008dk\www\mainframes\login\opslag_upload")
        Billedenavn = File.FileName
      Else
        fejl = True
        fejltekst = "billedet er for stort eller forkert format, kun .gif .tif og .jpg billeder virker"
      End if
  end If
  Tekst                = Upload.form("text")
  U_Id                = session("U_Id")
  Dag                = day(now)
  Maaned            = month(now)
  Aar                = ((year(now))-2000)
  Tid                = time
  Tekst                = replace(Tekst, vbCrLf, "<br>")
  Tekst                = replace(Tekst, "'", "´") 


If Not fejl then
    set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
    DSN = DSN & "DBQ=" & Server.MapPath ("../../../db/feltkursus.mdb")
    Conn.Open DSN
    strSQL = "Insert into Opslag (U_Id, O_Tekst, O_Dag, O_Maaned, O_Aar, O_Tid, O_Billede) values('" & U_Id & "','" & Tekst & "','" & Dag & "','" & Maaned & "','" & Aar & "','" & Tid & "','" & Billedenavn & "')"
    Set rs = Conn.Execute(strSQL)
    Conn.Close
    set Conn = Nothing
  Response.write "<span class='tekst'>Opslag tilføjet<br><a href='opslag.asp'>Tilbage</a></span>&nbsp;"
Else
  Response.write "<span class='tekst'>"& fejltekst &"<br><a href='opslag.asp'>Tilbage</a></span>&nbsp;"
End if
Avatar billede labanen Nybegynder
14. februar 2008 - 23:39 #1
jeg ved foresten ikke hvad det var for en hjerneblødning der fik mig til at putte tif på listen. Det er 100% lige gyldigt, men jeg fik ikke slettet det da mit script aldrig kom til at virke og jeg ledte efter andre fejl.

Altså se bort fra det. Der skal bare tjekkes for gif og jpg.
Avatar billede thesurfer Nybegynder
14. februar 2008 - 23:40 #2
Prøv med:

      if ( lCase(file.ext) = "tif" Or lCase(file.ext) = "gif" or lCase(file.ext) = "jpg" and File.Size < 200000 ) Then
Avatar billede thesurfer Nybegynder
14. februar 2008 - 23:41 #3
Forkert..

Sådan:

      if ( lCase(file.ext) = "tif" Or lCase(file.ext) = "gif" or lCase(file.ext) = "jpg" ) and File.Size < 200000 Then
Avatar billede labanen Nybegynder
14. februar 2008 - 23:43 #4
jeg prøvede at indsætte nogen response.write "test" linjer efter hver if sætning i starten. Jeg kommer slet ikke ind i den første if sætning.

Men det kan godt være at du har ret i den anden if sætning skal se sådan ud.
Avatar billede labanen Nybegynder
14. februar 2008 - 23:44 #5
og af en eller anden grund indsætter den heller ikke tekst felterne mere. kun dato og tid
Avatar billede thesurfer Nybegynder
14. februar 2008 - 23:45 #6
Huh? Kommer ikke ind i den første IF-sætning?

Prøv lige det her:

  If Not Upload.Files("FILE1") Is Nothing Then
    response.write "Yep"
      Else
    response.write "Nope"
      End if
  end If

Hvad skriver den så? "Yep" eller "Nope" ?
Avatar billede labanen Nybegynder
14. februar 2008 - 23:51 #7
siden kan ikke vises.. og det må være en gal fejl for den plejer at vise mig hvor i koden fejlen er.
Avatar billede labanen Nybegynder
14. februar 2008 - 23:54 #8
prøvede at sætte det ind sådan her...

  fejl = true
  Billedenavn      = "nope"
'  Set Upload = Server.CreateObject("Persits.Upload.1")
'  If Not Upload.Files("FILE1") Is Nothing Then
'    Set file = Upload.Files("FILE1")
'      if ( lCase(file.ext) = "tif" Or lCase(file.ext) = "gif" or lCase(file.ext) = "jpg" ) and File.Size < 200000 Then
'        Upload.Save("d:\home\feltkursus2008dk\www\mainframes\login\opslag_upload")
'        Billedenavn = File.FileName
'      Else
'        fejl = True
'        fejltekst = "billedet er for stort eller forkert format, kun .gif .tif og .jpg billeder virker"
'      End if
'  end If
'  Set file = Upload.Files("FILE1")
  If Not Upload.Files("FILE1") Is Nothing Then
    response.write "Yep"
      Else
    response.write "Nope"
      End if
  end If
'  Tekst                = Upload.form("text")
  Tekst                = "test"
  U_Id                = session("U_Id")
  Dag                = day(now)
  Maaned            = month(now)
  Aar                = ((year(now))-2000)
  Tid                = time
  Tekst                = replace(Tekst, vbCrLf, "<br>")
  Tekst                = replace(Tekst, "'", "´") 


If Not fejl then
  ' o p r e t n y h e d
    set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
    DSN = DSN & "DBQ=" & Server.MapPath ("../../../db/feltkursus.mdb")
    Conn.Open DSN
    strSQL = "Insert into Opslag (U_Id, O_Tekst, O_Dag, O_Maaned, O_Aar, O_Tid, O_Billede) values('" & U_Id & "','" & Tekst & "','" & Dag & "','" & Maaned & "','" & Aar & "','" & Tid & "','" & Billedenavn & "')"
    Set rs = Conn.Execute(strSQL)
    Conn.Close
    set Conn = Nothing
  Response.write "<span class='tekst'>Opslag tilføjet<br><a href='opslag.asp'>Tilbage</a></span>&nbsp;"
Else
  Response.write "<span class='tekst'>"& fejltekst &"<br><a href='opslag.asp'>Tilbage</a></span>&nbsp;"
End if
%>       


            </td>
          </tr>
        </TABLE>
      </td>
    </tr>
  </TABLE>
</CENTER>
</BODY>
</HTML>
Avatar billede labanen Nybegynder
14. februar 2008 - 23:57 #9
det her er scriptet som virker... men ikke tjekker, er det nemmere at lave det om ? :-)

Billedenavn      = "nope"
  Set Upload = Server.CreateObject("Persits.Upload.1")
  Count = Upload.Save("d:\home\feltkursus2008dk\www\mainframes\login\opslag_upload")
  If Not Upload.Files("FILE1") Is Nothing Then
    Set file = Upload.Files("FILE1")
    Billedenavn = File.FileName
  end If
  Tekst                = Upload.form("text")
  U_Id                = session("U_Id")
  Dag                = day(now)
  Maaned            = month(now)
  Aar                = ((year(now))-2000)
  Tid                = time
  Tekst                = replace(Tekst, vbCrLf, "<br>")
  Tekst                = replace(Tekst, "'", "´") 



  ' o p r e t n y h e d
    set Conn = Server.CreateObject("ADODB.Connection")
    DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
    DSN = DSN & "DBQ=" & Server.MapPath ("../../../db/feltkursus.mdb")
    Conn.Open DSN
    strSQL = "Insert into Opslag (U_Id, O_Tekst, O_Dag, O_Maaned, O_Aar, O_Tid, O_Billede) values('" & U_Id & "','" & Tekst & "','" & Dag & "','" & Maaned & "','" & Aar & "','" & Tid & "','" & Billedenavn & "')"
    Set rs = Conn.Execute(strSQL)
    Conn.Close
    set Conn = Nothing
  Response.write "<span class='tekst'>Opslag tilføjet<br><a href='opslag.asp'>Tilbage</a></span>&nbsp;"
Avatar billede thesurfer Nybegynder
15. februar 2008 - 00:13 #10
Ahh.., min fejl.. :-)

Sådan:

  If Not Upload.Files("FILE1") Is Nothing Then
      if ( lCase(file.ext) = "tif" Or lCase(file.ext) = "gif" or lCase(file.ext) = "jpg" ) and File.Size < 200000 Then
    response.write "Yep"
      Else
    response.write "Nope"
      End if
  end If
Avatar billede thesurfer Nybegynder
15. februar 2008 - 00:14 #11
Skriv lige:

1) hvilken type fil du uploader

2) hvor meget filen faktisk fylder

3) hvad den skriver (Yep/Nope)

:-)
Avatar billede labanen Nybegynder
15. februar 2008 - 00:26 #12
If Not Upload.Files("FILE1") Is Nothing Then
    Set file = Upload.Files("FILE1") 
    if ( lCase(file.ext) = ".gif" or lCase(file.ext) = ".jpg" ) and File.Size < 200000 Then
      Billedenavn = File.FileName
    Else
      response.write "Nope"
    End if
  end If


Det virker sådan her, men kun næsten. For nu uploader den stadig andre filer end det som den skal, men adressen bliver ikke gemt i databasen og de bliver derfor ikke vist på min side. stien bliver holdt i variablen "billedetekst"
Avatar billede labanen Nybegynder
15. februar 2008 - 00:27 #13
mit problem er at hvis jeg flytter

Set file = Upload.Files("FILE1")

op i den næste if sætning får jeg VBscript runtime error 800a01a8 object required: "
Avatar billede labanen Nybegynder
15. februar 2008 - 00:28 #14
og jeg ville jo gerne undgå at folk uploadede flere gb store filer... jeg har kun 150 mb at lege med
Avatar billede thesurfer Nybegynder
15. februar 2008 - 00:50 #15
Vi er enige om, at filen IKKE skal oploades, hvis den fylder mere end 200000, lige meget hvilken filtype?
Avatar billede labanen Nybegynder
15. februar 2008 - 00:52 #16
jeps
Avatar billede thesurfer Nybegynder
15. februar 2008 - 00:53 #17
Prøv:

If Not Upload.Files("FILE1") Is Nothing Then
    Set file = Upload.Files("FILE1")
    response.write "filtypen er: " & file.ext & "<br>"
    If File.Size > 200000 Then
        response.write "fejl i filstørrelsen"
    else
        if lCase(file.ext) = ".gif" or lCase(file.ext) = ".jpg" then
          Billedenavn = File.FileName
        Else
          response.write "fejl i filtypen"
        End If
    End if
end If
Avatar billede thesurfer Nybegynder
15. februar 2008 - 00:57 #18
Egentligt (for at være sikker):

If Upload.Files("FILE1") Is Nothing Then
    response.write "Upload.Files, FILE1, er NOTHING!<br>"
else
    response.write "Upload.Files, FILE1, er <b>IKKE</b> NOTHING!<br>"
    Set file = Upload.Files("FILE1")
    response.write "filtypen er: " & file.ext & "<br>"
    If File.Size > 200000 Then
        response.write "fejl i filstørrelsen<br>"
    Else
        response.write "filstørrelsen er ok<br>"
        if lCase(file.ext) = ".gif" or lCase(file.ext) = ".jpg" then
          Billedenavn = File.FileName
          response.write "filtypen er enten .gif eller .jpg"
        Else
          response.write "fejl i filtypen"
        End If
    End if
end If
Avatar billede labanen Nybegynder
15. februar 2008 - 01:01 #19
filen oploader stadig.

dit script virker så langt som at den da skriver fejl i filstørrelsen

men den uploader alligevel, men billedetekst opdateres ikke så billedet bliver trods alt ikke efterfølgende vist på siden
Avatar billede labanen Nybegynder
15. februar 2008 - 01:01 #20
prøver lige dit sidste script det havde jeg ikke set før jeg skrev mit sidste indlæg. 2 sekunder
Avatar billede thesurfer Nybegynder
15. februar 2008 - 01:07 #21
Jeg har over set din "fejl"-boolean..

Så du skal lige have sat "fejl = True" ind de rigtige steder:

If Upload.Files("FILE1") Is Nothing Then
    response.write "Upload.Files, FILE1, er NOTHING!<br>"
    fejl = True
else
    response.write "Upload.Files, FILE1, er <b>IKKE</b> NOTHING!<br>"
    Set file = Upload.Files("FILE1")
    response.write "filtypen er: " & file.ext & "<br>"
    If File.Size > 200000 Then
        response.write "fejl i filstørrelsen<br>"
        fejl = True
    Else
        response.write "filstørrelsen er ok<br>"
        if lCase(file.ext) = ".gif" or lCase(file.ext) = ".jpg" then
          Billedenavn = File.FileName
          response.write "filtypen er enten .gif eller .jpg"
        Else
          response.write "fejl i filtypen"
          fejl = True
        End If
    End if
end If
Avatar billede thesurfer Nybegynder
15. februar 2008 - 01:08 #22
Og så er det nok en god ide, at smide teksten (fejlbeskrivelsen) ind i variablen "fejltekst" som udskrives længere nede..
Avatar billede labanen Nybegynder
15. februar 2008 - 01:11 #23
jeg slog den del fra bare for at holde det så simpelt som muligt. men den uploader altså stadig den store fil.

Men ved du hvad, jeg vil godt give pointene for 1 times lang kamp midt om natten, så hvis du smider et svar til mig. så lukker jeg og går i seng :-)
Avatar billede thesurfer Nybegynder
15. februar 2008 - 01:14 #24
Ifølge http://www.aspupload.com/Manual.htm skulle du kunne bruge:

  Set Upload = Server.CreateObject("Persits.Upload.1")
  Upload.SetMaxSize 200000, False

Størrelse er i bytes.. 200000 = 200 KB, sådan cirka.. :-)
Avatar billede thesurfer Nybegynder
15. februar 2008 - 01:16 #25
Rettelse:

  Set Upload = Server.CreateObject("Persits.Upload.1")
  Upload.SetMaxSize 200000, True


Citat: "The optional second parameter specifies whether a file larger than the maximum should be truncated (if set to False or omitted), or rejected with an error exception (if set to True)."
Avatar billede labanen Nybegynder
15. februar 2008 - 01:19 #26
det virker faktisk med den linie der. ! ok det giver ikke verdens flotteste fejlbesked, men det kan jeg arbejde med. det vigtigste er at de ikke fylder mig med alle mulige giga filer.

tak for kampen du
Avatar billede thesurfer Nybegynder
15. februar 2008 - 01:22 #27
Der er faktisk en fusker måde at komme udenom fejl meldingerne på.. :-)

Eksempel:

On Error Resume Next
...din kode her...

If Err.Number <> 0 then
  Response.Write "Der opstod en fejl:<br>" & Err.Number & " - " & Err.Description
End If

Du kan også skrive din egen fejlbeskrivelse (i stedet for Err.Number & " - " & Err.Description)..

Prøv det lige, og se om det er noget du synes om..
Det skal lige siges, at denne form for fejlhåndtering ikke kan anbefales, men at det er muligt at gøre det på den måde..

Takker for points :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester