Ciao a tutti.
Premesso che non sono molto pratico di asp(faccio il grafico), mi sono ritrovato ad aggiornare il sito di un'associazione che ha bisogno di pagine in asp per caricare articoli, tipo giornale periodico, ai quali sia associata un'immagine, il tutto con un database access.
Ho girato un pò tra vari forum e sono riuscito a costruirmi le mie pagine per l'inserimento dei dati e dell'immagine
la form che l'utente riempie è:
codice:
FORM METHOD="Post" ENCTYPE="multipart/form-data" ACTION="add_comunicazioni.asp">
              <table width="100%" border="0" cellpadding="0" cellspacing="0" >
                <tr> 
                  <td width="19%"><font size="2" face="Verdana">titolo</font></td>
                  <td width="81%"> <input name="titolo" type="text" id="titolo" size="70" maxlength="255"></td>
                </tr>
                <tr> 
                  <td><font size="2" face="Verdana">sottotitolo</font></td>
                  <td> <input name="sottotitolo" type="text" id="sottotitolo" size="70" maxlength="255"></td>
                </tr>
                <tr> 
                  <td><font size="2" face="Verdana">contenuto</font></td>
                  <td><textarea name="corpo" cols="75" rows="30" id="corpo"></textarea></td>
                </tr>
                <tr> 
                  <td><font size="2" face="Verdana">immagine</font></td>
                  <td><input name="blob" type="file" size="70"></td>
                </tr>
                <tr> 
                  <td colspan="2"><div align="center"><font size="2" face="Verdana"> 
                      <input name="Submit" type="submit" value="Aggiungi">
                      <input type="reset" name="Submit2" value="Reimposta">
                      </font> </div></td>
                </tr>
              </table>
            </form>
la pagina add_comunicazioni.asp contiene:
codice:
<%@ Language=VBScript %>
<%
IF session("amministratore")<>true then
Response.Redirect "login.asp"
End if
%> 
<% response.buffer=true %>



<%Response.Expires=0
  Response.Clear
  byteCount = Request.TotalBytes
  RequestBin = Request.BinaryRead(byteCount)
  Dim UploadRequest
  Set UploadRequest = CreateObject("Scripting.Dictionary")
  BuildUploadRequest  RequestBin
  contentType = UploadRequest.Item("blob").Item("ContentType")
  filepathname = UploadRequest.Item("blob").Item("FileName")
  filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
  value = UploadRequest.Item("blob").Item("Value")
  titolo = UploadRequest.Item("titolo").Item("Value")
  sottotitolo = UploadRequest.Item("sottotitolo").Item("Value")
  corpo = UploadRequest.Item("corpo").Item("Value")

  'Create FileSytemObject Component
  Set ScriptObject = Server.CreateObject("Scripting.FileSystemObject")

  'Create and Write to a File
  Set MyFile = ScriptObject.CreateTextFile(Server.MapPath("\public\foto") & "\" & filename)
 
  For i = 1 to LenB(value)
	 MyFile.Write chr(AscB(MidB(value,i,1)))
  Next
  MyFile.Close%>
<%
Set RecSet = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM COMUNICAZIONI"
RecSet.Open SQL, objConn, adOpenStatic, adLockOptimistic
RecSet.Addnew
RecSet.Fields.Item("data").Value = date()
RecSet.Fields.Item("titolo").Value = titolo
RecSet.Fields.Item("sottotitolo").Value = sottotitolo
RecSet.Fields.Item("corpo").Value = corpo
RecSet.Fields.Item("foto").Value = filename 
RecSet.Update
RecSet.Close
Set RecSet = Nothing
%>
mentre la pagina inclusa upload.asp :
<%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")
Pos = InstrB(BoundaryPos,RequestBin,getByteString("Conte nt-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("filen ame="))
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),Requ estBin,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%>
Allora, sembra che tutto funzioni ma con un problema, facendo varie prove di inserimento ogni volta che inserisco un testo nella textarea del form il server mi restituisce l'errore:
Tipo di errore:
Errore di run-time di Microsoft VBScript (0x800A0005)
Chiamata di routine o argomento non validi: 'MidB'
/upload.asp, line 33
mentre se nella textarea immetto una singola parola il tutto va a buon fine(aggiornamento database e upload immagine).
Potete aiutarmi a capire cosa c'è che non va?
Grazie mille