Wrox Programmer Forums
|
ASP Pro Code Clinic As of Oct 5, 2005, this forum is now locked. No posts have been deleted. Please use "Classic ASP Professional" at: http://p2p.wrox.com/forum.asp?FORUM_ID=56 for discussions similar to the old ASP Pro Code Clinic or one of the other many remaining ASP and ASP.NET forums here.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the ASP Pro Code Clinic section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old June 25th, 2003, 10:20 AM
Authorized User
 
Join Date: Jun 2003
Posts: 46
Thanks: 0
Thanked 0 Times in 0 Posts
Default Uploading and Updating in same page

Hi All,

I could really use some help with my application. I am puting on my website a place where scanned invoices can be accessed. The user can upload an invoice for display but in the same process the database will be updated with the information so that it appears within the page. I have made the code and it does upload the image, however, the same page contains code to update the database and although the page runs correctly and does not report any errors the database does not get updated... I will show you my code.


<%
    Response.Buffer = True

    Dim load
        Set load = new Loader
        load.initialize

    ' File binary data
    Dim fileData, fileName, filePath, filePathComplete, fileSize, fileSizeTranslated, contentType
    Dim countElements, nameInput, pathToFile, filuploadfacteUploaded, strSQL, dbDir
        varDate = Now()
        fileData = load.getFileData("file")
        fileName = LCase(load.getFileName("file"))
        filePath = load.getFilePath("file")
        filePathComplete = load.getFilePathComplete("file")
        fileSize = load.getFileSize("file")
        fileSizeTranslated = load.getFileSizeTranslated("file")
        contentType = load.getContentType("file")
        countElements = load.Count
        nameInput = load.getValue("name")
        pathToFile = Server.mapPath("fac/") & "\" & fileName
        fileUploaded = load.saveToFile ("file", pathToFile)
    Set load = Nothing

set DbConn = Server.CreateObject("ADODB.Connection")
DbConn.Open "DSN=sii"

strSQL = "UPDATE Facture SET" _
       & " [FScan] = '" & fileName & "'," _
       & " [FScanDate] = '" & varDate & "'" _
       & " WHERE FactureNum = '" & nameInput & "';"
DbConn.Execute(strSQL)
%>

At the top of the code you will see an attachment that includes process and prcedures to make the upload possible. This is the attachment:

<%
    Class Loader
        Private dict

        Private Sub Class_Initialize
            Set dict = Server.CreateObject("Scripting.Dictionary")
        End Sub

        Private Sub Class_Terminate
            If IsObject(intDict) Then
                intDict.RemoveAll
                Set intDict = Nothing
            End If
            If IsObject(dict) Then
                dict.RemoveAll
                Set dict = Nothing
            End If
        End Sub

        Public Property Get Count
            Count = dict.Count
        End Property

        Public Sub Initialize
            Dim binData
                binData = Request.BinaryRead(Request.TotalBytes)
                getData binData
        End Sub

        Public Function getFileData(name)
            If dict.Exists(name) Then
                getFileData = dict(name).Item("Value")
                Else
                getFileData = stringToByte("Not Found")
            End If
        End Function

        Public Function getValue(name)
            If dict.Exists(name) Then
                getValue = dict(name).Item("Value")
                Else
                getValue = "Not Found"
            End If
        End Function

        Public Function saveToFile(name, path)
            If dict.Exists(name) Then
                Dim temp
                    temp = dict(name).Item("Value")
                Dim fso
                    Set fso = Server.CreateObject("Scripting.FileSystemObject")
                Dim file
                    Set file = fso.CreateTextFile(path)
                        For tPoint = 1 to LenB(temp)
                            file.Write Chr(AscB(MidB(temp,tPoint,1)))
                        Next
                        file.Close
                    saveToFile = True
                Else
                    saveToFile = False
            End If
        End Function

        Public Function getFileName(name)
            If dict.Exists(name) Then
                Dim temp, tempPos
                    temp = dict(name).Item("FileName")
                    tempPos = 1 + InStrRev(temp, "\")
                    getFileName = Mid(temp, tempPos)
                Else
                getFileName = "Not Found"
            End If
        End Function

        Public Function getFilePath(name)
            If dict.Exists(name) Then
                Dim temp, tempPos
                    temp = dict(name).Item("FileName")
                    tempPos = InStrRev(temp, "\")
                    getFilePath = Mid(temp, 1, tempPos)
                Else
                getFilePath = "Not Found"
            End If
        End Function

        Public Function getFilePathComplete(name)
            If dict.Exists(name) Then
                getFilePathComplete = dict(name).Item("FileName")
                Else
                getFilePathComplete = "Not Found"
            End If
        End Function

        Public Function getFileSize(name)
            If dict.Exists(name) Then
                getFileSize = LenB(dict(name).Item("Value"))
                Else
                getFileSize = "Not Found"
            End If
        End Function

        Public Function getFileSizeTranslated(name)
            If dict.Exists(name) Then
                temp = 1 + LenB(dict(name).Item("Value"))
                    If Len(temp) <= 3 Then
                        getFileSizeTranslated = temp & " bytes"
                        ElseIf Len(temp) > 6 Then
                        temp = FormatNumber(((temp / 1024) / 1000), 2)
                        getFileSizeTranslated = temp & " megabytes"
                        Else
                        temp = FormatNumber((temp / 1024), 2)
                        getFileSizeTranslated = temp & " kilobytes"
                    End If
                Else
                getFileSize = "Not Found"
            End If
        End Function

        Public Function getContentType(name)
            If dict.Exists(name) Then
                getContentType = dict(name).Item("ContentType")
                Else
                getContentType = "Not Found"
            End If
        End Function

    Private Sub getData(rawData)
        Dim separator
            separator = MidB(rawData, 1, InstrB(1, rawData, ChrB(13)) - 1)

        Dim lenSeparator
            lenSeparator = LenB(separator)

        Dim currentPos
            currentPos = 1
        Dim inStrByte
            inStrByte = 1
        Dim value, mValue
        Dim tempValue
            tempValue = ""

        While inStrByte > 0
            inStrByte = InStrB(currentPos, rawData, separator)
            mValue = inStrByte - currentPos

            If mValue > 1 Then
                value = MidB(rawData, currentPos, mValue)

                Dim begPos, endPos, midValue, nValue
                Dim intDict
                    Set intDict = Server.CreateObject("Scripting.Dictionary")

                    begPos = 1 + InStrB(1, value, ChrB(34))
                    endPos = InStrB(begPos + 1, value, ChrB(34))
                    nValue = endPos

                Dim nameN
                    nameN = MidB(value, begPos, endPos - begPos)

                Dim nameValue
                    If InStrB(1, value, stringToByte("Content-Type")) > 1 Then

                        begPos = 1 + InStrB(endPos + 1, value, ChrB(34))
                        endPos = InStrB(begPos + 1, value, ChrB(34))

                        midValue = MidB(value, begPos, endPos - begPos)
                            intDict.Add "FileName", trim(byteToString(midValue))

                        begPos = 14 + InStrB(endPos + 1, value, stringToByte("Content-Type:"))
                        endPos = InStrB(begPos, value, ChrB(13))

                        midValue = MidB(value, begPos, endPos - begPos)
                            intDict.Add "ContentType", trim(byteToString(midValue))

                        begPos = endPos + 4
                        endPos = LenB(value)

                        nameValue = MidB(value, begPos, endPos - begPos)
                    Else
                        nameValue = trim(byteToString(MidB(value, nValue + 2)))
                    End If

                    intDict.Add "Value", nameValue
                    intDict.Add "Name", nameN

                    dict.Add byteToString(nameN), intDict
            End If

            currentPos = lenSeparator + inStrByte
        Wend
    End Sub

    End Class

    Private Function stringToByte(toConv)
        Dim tempChar
         For i = 1 to Len(toConv)
             tempChar = Mid(toConv, i, 1)
            stringToByte = stringToByte & chrB(AscB(tempChar))
         Next
    End Function

    Private Function byteToString(toConv)
        For i = 1 to LenB(toConv)
            byteToString = byteToString & chr(AscB(MidB(toConv,i,1)))
        Next
    End Function

%>

The previous page collects the relevant data, such as "file" and "name". Those are the names of the 2 fields... name contains the invoice number and file contains the file path...

What am I doing wrong.. is it because I am trying to use binary data to put in the database... I am not sure if that is the case as I used the VB Command "varType" and it told me 8... which is string...

If anyone knows what I am doing wrong.. please help me out.

With many thanks for your time and support,

Paul Jacobs
 
Old June 28th, 2003, 03:29 AM
Authorized User
 
Join Date: Jun 2003
Posts: 16
Thanks: 0
Thanked 0 Times in 0 Posts
Default

1) You didn't show your client-side code. Did you use INPUT Type="file" and ENCTYPE="multipart/form-data"

2) Did you save a file name which contains single quote "'" into DB ? If so make sure you replace it with 2 single quotes.

>What am I doing wrong.. is it because I am trying to use binary data to put in the database...
>strSQL = "UPDATE Facture SET" _
& " [FScan] = '" & fileName & "'," _
& " [FScanDate] = '" & varDate & "'" _
& " WHERE FactureNum = '" & nameInput & "';"

3) It looks to me you did save the upload file on the server, not into a binary field in database, and you just saved the file name and date into DB.

To simplify binary upload, try free component "aspSmartUpload.dll" from "http://www.aspsmart.com/"

Khoa Nguyen
 
Old August 9th, 2003, 03:23 PM
Registered User
 
Join Date: Aug 2003
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
Default

I believe you have a mistake in your stringToByte function. Instead of this

    chrB(AscB(tempChar))

you should do this

    chrB(Asc(tempChar))

Otherwise you corrupt all values between 130 and 159. See http://support.microsoft.com:80/supp.../Q145/7/45.asp.

Cole Brecheen
http://www.brecheen.org







Similar Threads
Thread Thread Starter Forum Replies Last Post
Updating Session Variab from Master Page gurbaksh ASP.NET 2.0 Professional 0 February 19th, 2008 05:50 PM
Uploading Rebel BOOK: ASP.NET 2.0 Instant Results ISBN: 978-0-471-74951-6 1 November 14th, 2007 06:13 AM
Uploading and Updating in same page neo_jakey Classic ASP Basics 5 August 30th, 2006 07:58 PM
Help in uploading sonurijs Pro JSP 3 March 5th, 2005 04:54 PM
Uploading derek Dreamweaver (all versions) 4 March 8th, 2004 04:28 PM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.