MiniVend as of 3.12 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=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>
The [value-extended ...] tag allows access to all of these things. If you
put on the test.html page and use with the above form you can see how it is used:
<PRE>
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"]|
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 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]
HTML examples:
No match found for <PARAM MV="value-extended"
MV.JOINER=" and "
MV.NAME=mv_searchspec>
<INPUT TYPE="text" NAME="mv_searchspec"
VALUE="[value-extended name=mv_searchspec index=0]">
<INPUT TYPE="text" NAME="mv_searchspec"
VALUE="[value-extended name=mv_searchspec index=1]">
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.