Source of form.tcl

ad_page_contract {
    Demo page
} {
    {user_id:integer,notnull ""}
    {state:word ""}
}

form create add_user -elements {
    user_id -label "User ID" -datatype integer -widget hidden 
    first_name -html { size 30 } -label "First Name" -datatype text
    last_name -html { size 30 } -label "Last Name"  -datatype text
    address1 -html { size 40 } -label "Address 1" -optional  -datatype text
    address2 -html { size 40 } -label "Address 2" -optional  -datatype text
    city -html { size 25 } -label "City" -optional  -datatype text
    state -html { size 3 maxlength 2 } \
	-label "State" -datatype keyword \
	-validate { \
           valid_length {expr {[string length $value] == 2} } { State must be 2 characters in length } \
           valid_range  {expr {$value in {CA HI NV}}}         { Invalid state } \
        }
}

template::add_confirm_handler -event submit -id add_user -message "Are you sure you want to submit?"

# set values

if { [form is_request add_user] } {
    #
    # get a fresh user_id
    #
    set user_id [db_string get_user_id ""]

    element set_properties add_user user_id -value $user_id
}

if { [form is_valid add_user] } {
    
    if {[db_0or1row user_exists {
        select 1 from ad_template_sample_users where user_id = :user_id
    }]} {
        ad_complain "duplicate user_id; looks like somebody tried to hack the form"
        ad_script_abort
    }
    db_dml insert_sample {
        insert into  ad_template_sample_users 
        values ( :user_id, :first_name, :last_name, :address1, :address2, :city, :state)
    } -bind [ns_getform]

    template::forward index.html
}

# Local variables:
#    mode: tcl
#    tcl-indent-level: 4
#    indent-tabs-mode: nil
# End: