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.