Newbie questions about Pliant

Newbie questions about Pliant

complex data-type for "input" in a form

I want to group several fields in a datatype,
and then access their values when the form is submitted.
Message posted by maybe Boris Reitman on 2005/08/21 04:27:42
Hi,

Why doesn't this complie ?

--------------->8----------------
type Name
  field Str first last
var Name name
input "First: " name:first 
input "Last: " name:last
button "Submit"
  text "Name : " + name:first + " " + name:last
-------------------8<--------------
Message posted by hubert.tonneau on 2005/08/21 10:27:54
When you have an input field, you also have a 'button'.
It means that the .page contains two functions, one executed before the button
is pressed, and the other after (you know, HTTP is session less).

So, for variables, Pliant need a way pass (local variables used in both parts)
or assign (local variable with 'input' instruction) the variables in the
second function.

For a database field, the path of the field is used as the way to find it in
the second function.
For a local variable, it's name is used.
So basically, 'input' want's either a Data:xxx argument or an ident matching a
local variable.

If we want 'input' to accept a field in a structure, we have to make it a little
smarter.
The question being: does it worth the extra effort ?
Message posted by maybe Boris Reitman            header "Sender Phone: "
              input "Phone 1:  " sender:tel1:number noeol
              select " type: " sender:tel1:location
                option "home" "home"
                option "work" "work"
                option "cell" "cell"
              input "Phone 2:  " sender:tel2:number noeol
              select " type: " sender:tel2:location
                option "work" "work"
                option "cell" "cell"
                option "home" "home"
              input "Phone 3:  " sender:tel3:number noeol
              select " type: " sender:tel3:location
                option "cell" "cell"
                option "work" "work"
Boris Reitman 
on 2005/08/23 03:28:09
Here is a scenario.  I have a purchace form,
and i need to collect a bunch of information.
For example, i have,
           
            header "Delivery Info"
              input "Sender Name: " sender:name
              input "Recipient Name: " recipient:name
            header "Sender Phone: "
              input "Phone 1:  " sender:tel1:number noeol
              select " type: " sender:tel1:location
                option "home" "home"
                option "work" "work"
                option "cell" "cell"
              input "Phone 2:  " sender:tel2:number noeol
              select " type: " sender:tel2:location
                option "work" "work"
                option "cell" "cell"
                option "home" "home"
              input "Phone 3:  " sender:tel3:number noeol
              select " type: " sender:tel3:location
                option "cell" "cell"
                option "work" "work"
                option "home" "home"

If I am to use a database, then 'recipient' must be a Data:Person 
and I have to create a record. If a user fills in all the information
and hits submit then everything is ok. But, if he closes his
browser or leaves this page without pressing submit, 
i will have a blank record in the database.

Is there a way to create a transient record that only stays in 
the memory and if I don't do anything special with it, like saving it,
it will go away by itself ? 

Thanks,
Boris
Message posted by hubert.tonneau on 2005/08/23 09:11:04
Just keep in mind that HTTP is session less, so the browser won't tell you
when the window closes. What you might do could be:

Have the following fields in your record:
  field DateTime timestamp
  field Bool valid <- false

When you submit the form 'sender' to the client, you do:
sender timestamp := datetime

When the client hits the 'record' button, you do:
sender timestamp := datetime
sender valid := true

Now, you have a simple way to scan only valid orders, and to discard not valid
orders that are more than 24 hours old.