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.
In the special case of a file upload, the value returned is the name of the file as passed for upload.
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.
*, will return all (joined by joiner). If a range, such as 0 .. 2, will return multiple elements.
1 for tests and the empty string for uploads.