Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    8

    UPLOAD - errore MidB & textarea

    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

  2. #2
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,854
    tanto per cominciare qualè la riga 33?
    e poi non è che inserisci carateri speciali nella textarea?
    es:'%

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    8
    la riga 33 è questa
    codice:
    Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
    no, non inserisco nessuna carattere speciale, il problema esiste solo se scrivo più di una parola.
    Grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    8

    ... caratteri speciali

    Ciao in effetti mi sono accorto che il problema si verifica quando copio e incollo il testo dell'articolo da word che probabilmente passa alla textarea informazioni sulla formattazione, anche se dopo l'incolla tali informazioni non sono visibili. Infatti copiando il testo in blocco note e facendo di nuovo copia e incolla il problema non si presenta sempre ma solo alcune volte , ma non ho ancora capito perchè... (ance le virgolette fanno parte dei caratteri speciali??..).
    Comunque ora volevo sapere un'altra cosa: è possibile far passare il tag
    ?? Potrbbe andare bene anche così, è solo per motivi estetici di layout.

  5. #5
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,854
    ma è ovvio
    usa intanto html encode e poi fai un replace (sono sempre convinto che tu inserisca caratteri speciali tipo "'"

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    8
    usa intanto html encode e poi fai un replace
    Potresti spiegarmi come fare.... sono le prime cose che faccio in asp e scusami se approfitto della tua disponibilità.
    grazie

  7. #7
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,854
    dunque..

    per il replace quando ti arriva la variabile poniamo "testo":
    codice:
    server.htmlencode(testo) 
    testo = Replace( testo, "'", "''" )

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    8
    codice:
    server.htmlencode(corpo) 
    testo = Replace( corpo, "'", "''" )
    va inserito nel file add_comunucazione.asp subito dopo aver richiamato la variabile corpo
    codice:
     corpo = UploadRequest.Item("corpo").Item("Value")
    o non ho capito niente?

  9. #9
    Utente bannato
    Registrato dal
    Jun 2004
    Messaggi
    1,854
    beh sooto a dove requesti la variabile della textarea

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    8
    credo di aver capito di dover fare:
    codice:
    server.htmlencode(corpo) 
    corpo = Replace( corpo, "'", "''" )
    subito dopo aver richiamato la variabile corpo


    codice:
    corpo = UploadRequest.Item("corpo").Item("Value")
    e prima che aggiorno i campi del database.

    è così??

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.