Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: Problema upload e db

  1. #1

    Problema upload e db

    Ho creato un form dove 2 campi (valuta, data)sono di testo, invece altri 2 servono per l'upload delle immagini (dritto, rovescio).

    Ecco la pagina "inseriremoneta.asp":
    codice:
    <form name="form1" method="post" enctype="multipart/form-data" action="inseriscidatimoneta.asp">
     <input name="valuta" type="text" id="valuta">
    <input name="data" type="text" id="data" maxlength="4">
    <input name="dritto" type="file" id="dritto" > 
     <input name="rovescio" type="file" id="rovescio" >
    <input type="submit" name="Submit" value="Invia">
    </form>
    Per fare l'upload dei file ho creato la pagina "inseriscidatimoneta.asp", ecco cosa c'è:

    codice:
    <%
    'variabili di configurazione
    Dim folder
    folder = "\public" 
    Response.Expires=0
    Response.Buffer = TRUE
    Response.Clear
    
    Sub BuildUploadRequest(RequestBin)
    	PosBeg = 1
    	PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
    	boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
    	boundaryPos = InstrB(1,RequestBin,boundary)
    		Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
    		Dim UploadControl
    		Set UploadControl = CreateObject("Scripting.Dictionary")
    		'Get an object name
    		Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
    		Pos = InstrB(Pos,RequestBin,getByteString("name="))
    		PosBeg = Pos+6
    		PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
    		Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    		PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
    		PosBound = InstrB(PosEnd,RequestBin,boundary)
    			If  PosFile<>0 AND (PosFile<PosBound) Then
    			PosBeg = PosFile + 10
    			PosEnd =  InstrB(PosBeg,RequestBin,getByteString(chr(34)))
    			FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    			UploadControl.Add "FileName", FileName
    			Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
    			PosBeg = Pos+14
    			PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
    			ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    			UploadControl.Add "ContentType",ContentType
    			PosBeg = PosEnd+4
    			PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
    			Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
    			Else
    			Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
    			PosBeg = Pos+4
    			PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
    			Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    		End If
    		UploadControl.Add "Value" , Value	
    		UploadRequest.Add name, UploadControl	
    		BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
    	Loop
    End Sub
    Function getByteString(StringStr)
     For i = 1 to Len(StringStr)
     	char = Mid(StringStr,i,1)
    	getByteString = getByteString & chrB(AscB(char))
     Next
    End Function
    Function getString(StringBin)
     getString =""
     For intCount = 1 to LenB(StringBin)
    	getString = getString & chr(AscB(MidB(StringBin,intCount,1))) 
     Next
    End Function
    
    byteCount = Request.TotalBytes
    
    RequestBin = Request.BinaryRead(byteCount)
    Dim UploadRequest
    Dim UploadRequest1
    Set UploadRequest = CreateObject("Scripting.Dictionary")
    Set UploadRequest1 = CreateObject("Scripting.Dictionary")
    BuildUploadRequest  RequestBin
    
    contentType = UploadRequest.Item("dritto").Item("ContentType")
    contentType = UploadRequest.Item("rovescio").Item("ContentType")
    filepathname = UploadRequest.Item("dritto").Item("FileName")
    filepathname1 = UploadRequest.Item("rovescio").Item("FileName")
    filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
    filename1 = Right(filepathname1,Len(filepathname1)-InstrRev(filepathname1,"\"))
    value = UploadRequest.Item("dritto").Item("Value")
    value = UploadRequest.Item("rovescio").Item("Value")
    'Create FileSytemObject Component
    Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")
    
    'Create and Write to a File
    Set MyFile = ScriptObject.CreateTextFile(Server.mappath(folder)&"\"&filename)
    Set MyFile1 = ScriptObject.CreateTextFile(Server.mappath(folder)&"\"&filename1)
    For i = 1 to LenB(value)
    	MyFile.Write chr(AscB(MidB(value,i,1)))
    	MyFile1.Write chr(AscB(MidB(value,i,1)))
    Next
    %>
    
    
    
    <%
     Dim conn3
     Dim rs3
    
    valuta=request.form("valuta")  <-------------
    data=request.form("data")
     'apro la connessione
    Set conn3 = Server.CreateObject("ADODB.Connection")
    conn3.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/mdb-database/dbmonete.mdb")
    Set rs3=server.CreateObject("ADODB.Recordset")
    rs3.Open "tabmonete",conn2,3,3
    rs3.AddNew
    rs3("valuta")=valuta
    rs3("data")=data
    rs3("dritto")= MyFile
    rs3("rovescio")=MyFile1
    MyFile1.Close
    rs3.update
    rs3.Close
    conn3.Close
    %>
    
    <%
    MyFile.Close
    MyFile1.Close					
    %>

    Io vorrei oltre fare l'upload delle 2 immagini nella cartella "public" anche inserire nel database il collegamento delle 2 immagini di cui ho fatto l'upload prima in modo tale da richiamare l'immagine in un'latra pagina.
    Tutto questo non funziona mi da questo errore:


    Request object error 'ASP 0207 : 80004005'
    Cannot use Request.Form

    /collezioni/inseriscidatimoneta.asp, line 866 (dove c'è la freccia)

    Cannot use Request.Form collection after calling BinaryRead

  2. #2
    Credo non si possa usare un form per fare contemporanemate l'upload di un file e passare parametri.
    Ripeto credo...

  3. #3
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Si può. Non con quel codice, ma si può.

  4. #4
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Con il mio upload dovresti fare una cosa del genere:
    codice:
    <%
    	If Request.QueryString("Save")="1" then
    		Dim oUpload
    		Set oUpload = new cUpload
    		oUpload.AutoRename = True
    		oUpload.Overwrite = False
    		oUpload.SetPath "/public" 'Impostazione del percorso
    		oUpload.Load
    		While Not oUpload.EOF
    			oUpload.Save()
    			Select Case lCase(oUpload.Files("InputName"))
    				Case "dritto"
    					FileName_Dritto = oUpload.GetFileName()
    				Case "rovescio"
    					FileName_Rovescio = oUpload.GetFileName()
    			End Select
    			oUpload.MoveNext
    		Wend			
    		Set Conn = Server.CreateObject("ADODB.Connection")
    		Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/mdb-database/dbmonete.mdb")
    		Set Rs=server.CreateObject("ADODB.Recordset")
    		Rs.Open "tabmonete",Conn,3,3
    		Rs.AddNew
    		Rs("valuta")	= oUpload.Form("valuta")
    		Rs("data")		= oUpload.Form("data")
    		Rs("dritto")	= FileName_Dritto
    		Rs("rovescio")	= FileName_Rovescio 
    		Rs.update
    		Rs.Close
    		Conn.Close
    		Set Rs = Nothing
    		Set Conn=Nothing				
    		Set oUpload = Nothing
    	End if
    %>
    <form name="form1" method="post" enctype="multipart/form-data" action="?save=1">
    valuta<input name="valuta" type="text" id="valuta">
    
    data<input name="data" type="text" id="data" maxlength="4">
    
    dritto<input name="dritto" type="file" id="dritto" > 
    
    rovescio<input name="rovescio" type="file" id="rovescio" >
    
    <input type="submit" name="Submit" value="Invia">
    
    </form>
    Questo codice salva il recodset anche se non hai caricato alcun file

  5. #5
    tutto funziona correttamente...grazie! (sei un mago!)

    Ma se volessi uplare solo le immagini come devo fare?

    se metto nel incluce Upload_soloimmagini.asp mi da errore dove c'è scritto dim oupload!

  6. #6
    Ma mi riporta sempre alla stessa pagina (quella del form), come posso dopo passare ad un'altra pagina?

  7. #7
    Anche con il metodo che ti avevo suggerito nel 3D precedente la cosa avrebbe funzionato, semplicemente mettendo PRIMA i due form di upload, ciascuno con il suo tag di chiusura (</form>) e DOPO, separato da quelli, il form per inserire i campi di testo.....
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  8. #8
    Utente di HTML.it L'avatar di Baol74
    Registrato dal
    Jul 2002
    Messaggi
    2,004
    Per cambiare pagina puoi aggiungere un redirect sul codice che ti ho dato, oppure prendere il codice di salvataggio e metterlo in un'altra pagina (quello nell'if)

    Per filtrare solo i files immagine aggiungi dopo oUpload.Load l'istruzione oUpload.UploadOnly "images"

    Per Teorema : no, non basta. Fare un upload significa inviare i dati con delle specifiche particolari (multipart). Per prendere i valori form su questo formato Asp disabilita Request.Form quando fai uso del metodo Request.BinaryRead perchè presuppone che vuoi gestire la richiesta a modo tuo. In Sostanza l'unico modo di prendere i valori form è estrarli dai dati inviati in upload, non c'è alternativa.

  9. #9
    Scsatemi ancora... ma se volessi ridimensionare l'immagine uploadata quando la visualizzo in un'altra pagina(a larghezza 150 pixel).. in più cliccandoci sopra mi si apre una popup che me a fa vedere nelle dimensioni reali come posso fare? VVoVe:

    GRAZIE ANCORA

  10. #10
    Per Teorema : no, non basta. Fare un upload significa inviare i dati con delle specifiche particolari (multipart). Per prendere i valori form su questo formato Asp disabilita Request.Form quando fai uso del metodo Request.BinaryRead perchè presuppone che vuoi gestire la richiesta a modo tuo. In Sostanza l'unico modo di prendere i valori form è estrarli dai dati inviati in upload, non c'è alternativa.
    Grazie Baol per la precisazione, so che viene da fonte autorevole e anzi, proprio per questo motivo, vorrei approfittarne per capirci qualcosa di più, l'argomento mi interessa........potresti spiegarmi meglio?

    Quello che avevo suggerito è il metodo che normalmente uso per uppare dei files e contemporaneamente inviare dei dati al database.

    Ti ringrazio in anticipo.

    Teo
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.