Index  Up  <<  >>  


Extended Value Access and File Upload

MiniVend has a facility for greater control over the display of form variables; it also can parse multipart/form-data forms for file upload.

File upload is simple. You define a form like:

    <FORM ACTION="[process-target] METHOD=POST ENCTYPE="multipart/form-data">
    <INPUT TYPE=hidden NAME=mv_todo     VALUE=return>
    <INPUT TYPE=hidden NAME=mv_nextpage VALUE=test>
    <INPUT TYPE=file NAME=newfile>
    <INPUT TYPE=submit VALUE="Go!">
    </FORM>

The [value-extended ...] tag performs the fetch and storage of the file. If you put the below on the test.html page (as you specified with mv_nextpage and use with the above form it will write the file you have specified:

    <PRE>
    Uploaded file name: [value-extended name=newfile]
    Is newfile a file? [value-extended name=newfile yes=Yes no=No test=isfile]
 
    Write the file. [value-extended name=newfile outfile=junk.upload]
    Write again with
     indication: [value-extended name=newfile
                                outfile=junk.upload
                                yes="Written."]
                                no=FAILED]
 
    And the file contents:
    [value-extended name=newfile file_contents=1]
    </PRE>

The [value-extended] tag also allows access to the array values of stacked variables. Use the following form:

    <FORM ACTION="[process-target] METHOD=POST ENCTYPE="multipart/form-data">
    <INPUT TYPE=hidden NAME=testvar VALUE="value0">
    <INPUT TYPE=hidden NAME=testvar VALUE="value1">
    <INPUT TYPE=hidden NAME=testvar VALUE="value2">
    <INPUT TYPE=submit VALUE="Go!">
    </FORM>

and page:

    testvar element 0: [value-extended name=testvar index=0]
    testvar element 1: [value-extended name=testvar index=1]
    testvar elements:
     joined with a space:   |[value-extended name=testvar]|
     joined with a newline: |[value-extended
                                joiner="\n"
                                name=testvar
                                index="*"]|
     first two only:    |[value-extended
                                name=testvar
                                index="0..1"]|
     first and last:    |[value-extended
                                name=testvar
                                index="0,2"]|

to observe this in action.

The syntax for [value-extended ...] is:

 named: [value-extended 
            name=formfield
            outfile=filename*
            ascii=1*
            yes="Yes"*
            no="No"*
            joiner="char|string"*
            test="isfile|length|defined"*
            index="N|N..N|*"
            file_contents=1*
            elements=1*]

positional: [value-extended name]

Expands into the current value of the customer/form input field named by field. If there are multiple elements of that variable, it will return the value at index; by default all joined together with a space.

If the variable is a file variable coming from a multipart/form-data file upload, then the contents of that upload can be returned to the page or optionally written to the outfile.

name
The form variable NAME. If no other parameters are present, then the value of the variable will be returned. If there are multiple elements, then by default they will all be returned joined by a space. If joiner is present, then they will be joined by its value.

In the special case of a file upload, the value returned is the name of the file as passed for upload.

joiner
The character or string that will join the elements of the array. Will accept string literals such as ``\n'' or ``\r''.

test
Three tests -- isfile returns true if the variable is a file upload. length returns the length. defined returns whether the value has ever been set at all on a form.

index
The index of the element to return if not all are wanted. This is useful especially for pre-setting multiple search variables. If set to *, will return all (joined by joiner). If a range, such as 0 .. 2, will return multiple elements.

file_contents
Returns the contents of a file upload if set to a non-blank, non-zero value. If the variable is not a file, returns nothing.

outfile
Names a file to write the contents of a file upload to. It will not accept an absolute file name; the name must be relative to the catalog directory. If you wish to write images or other files that would go to HTML space, you must use the HTTP server's Alias facilities or make a symbolic link.

ascii
To do an auto-ASCII translation before writing the outfile, set the ascii parameter to a non-blank, non-zero value. Default is no translation.

yes
The value that will be returned if a test is true or a file is written successfully. Defaults to 1 for tests and the empty string for uploads.

no
The value that will be returned if a test is false or a file write fails. Defaults to the empty string.


Index  Up  <<  >>