[web2py] Re: Iterate through form input

2010-02-28 Thread mr.freeze
Whoops, that's response.flash :)

On Feb 28, 12:39 am, mr.freeze nat...@freezable.com wrote:
 Try this. It builds the form dynamically on the client and server so
 you get to keep the benefits of SQLFORM (validation, etc):

 def invite():
     fields = [Field('email',requires=IS_EMAIL())]
     for r in range(1, len(request.vars)):
         if 'email%s' % str(r) in request.vars.keys():
             fields.append(Field('email%s' %
 str(r),requires=IS_EMAIL()))
     form = SQLFORM.factory(table_name='invited',*fields)
     submit = form.element('tr',_id='submit_record__row')
     if form.accepts(request.vars,session,keepvalues=True):
         request.flash = 'got it'
     add_row = XML(form.element('tr'))
     add_invite = INPUT(_type='button',_value='Add',
                        _onclick=var c = jQuery('input[type=\text
 \]').size();\
                                 jQuery('#%s').remove();var newrow =
 '%s';\
                                 newrow = newrow.replace(new
 RegExp('email','g'),'email'+c.toString());\
                                 jQuery('form:first
 table').append(newrow + '%s'); % \

 (submit['_id'],add_row,submit.xml()))
     return dict(form=form,add_invite=add_invite)

 On Feb 26, 2:50 pm, minh mdn0...@gmail.com wrote:

  Hi,

  I want to make a page where users can enter e-mails to send an invite.
  There will be an array of input boxes (1 e-mail each box) and a send
  button.

  I was wondering what the best way to generate the form dynamically
  was... in case the user wanted to add more e-mails.

  Also, is there a way to iterate through the form elements so I don't
  have to worry about number/name of input fields?

  Thanks,
  Minh



-- 
You received this message because you are subscribed to the Google Groups 
web2py-users group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.



[web2py] Re: Iterate through form input

2010-02-27 Thread mr.freeze
Try this. It builds the form dynamically on the client and server so
you get to keep the benefits of SQLFORM (validation, etc):

def invite():
fields = [Field('email',requires=IS_EMAIL())]
for r in range(1, len(request.vars)):
if 'email%s' % str(r) in request.vars.keys():
fields.append(Field('email%s' %
str(r),requires=IS_EMAIL()))
form = SQLFORM.factory(table_name='invited',*fields)
submit = form.element('tr',_id='submit_record__row')
if form.accepts(request.vars,session,keepvalues=True):
request.flash = 'got it'
add_row = XML(form.element('tr'))
add_invite = INPUT(_type='button',_value='Add',
   _onclick=var c = jQuery('input[type=\text
\]').size();\
jQuery('#%s').remove();var newrow =
'%s';\
newrow = newrow.replace(new
RegExp('email','g'),'email'+c.toString());\
jQuery('form:first
table').append(newrow + '%s'); % \
 
(submit['_id'],add_row,submit.xml()))
return dict(form=form,add_invite=add_invite)



On Feb 26, 2:50 pm, minh mdn0...@gmail.com wrote:
 Hi,

 I want to make a page where users can enter e-mails to send an invite.
 There will be an array of input boxes (1 e-mail each box) and a send
 button.

 I was wondering what the best way to generate the form dynamically
 was... in case the user wanted to add more e-mails.

 Also, is there a way to iterate through the form elements so I don't
 have to worry about number/name of input fields?

 Thanks,
 Minh

-- 
You received this message because you are subscribed to the Google Groups 
web2py-users group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.



[web2py] Re: Iterate through form input

2010-02-26 Thread minh
I forgot to mention, the form loads fine... I get the error on submit.

On Feb 26, 1:58 pm, minh mdn0...@gmail.com wrote:
 I have something like this:

         form = FORM('Emails:', BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     'Message:', BR(),
                     TEXTAREA(_name='message'), BR(),
                     INPUT(_type='submit', _value='Invite'))

 However, it seems to crash if I have multiple elements named 'email'.
 It works fine if I name them email1, email2, etc. This is the error:

 Error traceback

 Traceback (most recent call last):
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \restricted.py, line 173, in restricted
     exec ccode in environment
   File C:/Documents and Settings/minh/My Documents/InvestP2P/
 applications/investp2p/controllers/loans.py, line 209, in module
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \globals.py, line 96, in lambda
     self._caller = lambda f: f()
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \tools.py, line 1848, in f
     return action(*a, **b)
   File C:/Documents and Settings/minh/My Documents/InvestP2P/
 applications/investp2p/controllers/loans.py, line 200, in
 invite_lenders
     if form.accepts(request.vars, session):
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \html.py, line 1267, in accepts
     status = self._traverse(status)
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \html.py, line 449, in _traverse
     newstatus = c._traverse(status) and newstatus
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \html.py, line 456, in _traverse
     newstatus = self._validate()
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \html.py, line 1074, in _validate
     (value, errors) = validator(value)
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \validators.py, line 2055, in __call__
     return self.other(value)
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \validators.py, line 774, in __call__
     match = self.regex.match(value)
 TypeError: expected string or buffer

 On Feb 26, 1:02 pm, Thadeus Burgess thade...@thadeusb.com wrote:

  if they all have the same name you will receive it as a list in
  request.vars as the name

  You will need to use jQuery to dynamically add more fields.

  Also, you could use a textarea instead and have them press enter, and
  then split the string on '\n'

  So considering the following html

  input type=text name=hi id=hi1 value=hello  /
  input type=text name=hi id=hi2 value=world /

  This will be serialized into

 www.example.com?hi=hellohi=world

  Which will be parsed by web2py into request.vars like so.

  request.vars.hi = ['hello', 'world']

  -Thadeus

  On Fri, Feb 26, 2010 at 2:50 PM, minh mdn0...@gmail.com wrote:
   Hi,

   I want to make a page where users can enter e-mails to send an invite.
   There will be an array of input boxes (1 e-mail each box) and a send
   button.

   I was wondering what the best way to generate the form dynamically
   was... in case the user wanted to add more e-mails.

   Also, is there a way to iterate through the form elements so I don't
   have to worry about number/name of input fields?

   Thanks,
   Minh

   --
   You received this message because you are subscribed to the Google Groups 
   web2py-users group.
   To post to this group, send email to web...@googlegroups.com.
   To unsubscribe from this group, send email to 
   web2py+unsubscr...@googlegroups.com.
   For more options, visit this group 
   athttp://groups.google.com/group/web2py?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
web2py-users group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.



Re: [web2py] Re: Iterate through form input

2010-02-26 Thread Thadeus Burgess
Unfortunately you will not be able to add fields when using FORM.
You will have to iterate over the request.vars manually.

-Thadeus





On Fri, Feb 26, 2010 at 3:59 PM, minh mdn0...@gmail.com wrote:
 I forgot to mention, the form loads fine... I get the error on submit.

 On Feb 26, 1:58 pm, minh mdn0...@gmail.com wrote:
 I have something like this:

         form = FORM('Emails:', BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     INPUT(_name='email',
 requires=IS_NULL_OR(IS_EMAIL())), BR(),
                     'Message:', BR(),
                     TEXTAREA(_name='message'), BR(),
                     INPUT(_type='submit', _value='Invite'))

 However, it seems to crash if I have multiple elements named 'email'.
 It works fine if I name them email1, email2, etc. This is the error:

 Error traceback

 Traceback (most recent call last):
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \restricted.py, line 173, in restricted
     exec ccode in environment
   File C:/Documents and Settings/minh/My Documents/InvestP2P/
 applications/investp2p/controllers/loans.py, line 209, in module
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \globals.py, line 96, in lambda
     self._caller = lambda f: f()
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \tools.py, line 1848, in f
     return action(*a, **b)
   File C:/Documents and Settings/minh/My Documents/InvestP2P/
 applications/investp2p/controllers/loans.py, line 200, in
 invite_lenders
     if form.accepts(request.vars, session):
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \html.py, line 1267, in accepts
     status = self._traverse(status)
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \html.py, line 449, in _traverse
     newstatus = c._traverse(status) and newstatus
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \html.py, line 456, in _traverse
     newstatus = self._validate()
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \html.py, line 1074, in _validate
     (value, errors) = validator(value)
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \validators.py, line 2055, in __call__
     return self.other(value)
   File C:\Documents and Settings\minh\My Documents\InvestP2P\gluon
 \validators.py, line 774, in __call__
     match = self.regex.match(value)
 TypeError: expected string or buffer

 On Feb 26, 1:02 pm, Thadeus Burgess thade...@thadeusb.com wrote:

  if they all have the same name you will receive it as a list in
  request.vars as the name

  You will need to use jQuery to dynamically add more fields.

  Also, you could use a textarea instead and have them press enter, and
  then split the string on '\n'

  So considering the following html

  input type=text name=hi id=hi1 value=hello  /
  input type=text name=hi id=hi2 value=world /

  This will be serialized into

 www.example.com?hi=hellohi=world

  Which will be parsed by web2py into request.vars like so.

  request.vars.hi = ['hello', 'world']

  -Thadeus

  On Fri, Feb 26, 2010 at 2:50 PM, minh mdn0...@gmail.com wrote:
   Hi,

   I want to make a page where users can enter e-mails to send an invite.
   There will be an array of input boxes (1 e-mail each box) and a send
   button.

   I was wondering what the best way to generate the form dynamically
   was... in case the user wanted to add more e-mails.

   Also, is there a way to iterate through the form elements so I don't
   have to worry about number/name of input fields?

   Thanks,
   Minh

   --
   You received this message because you are subscribed to the Google 
   Groups web2py-users group.
   To post to this group, send email to web...@googlegroups.com.
   To unsubscribe from this group, send email to 
   web2py+unsubscr...@googlegroups.com.
   For more options, visit this group 
   athttp://groups.google.com/group/web2py?hl=en.

 --
 You received this message because you are subscribed to the Google Groups 
 web2py-users group.
 To post to this group, send email to web...@googlegroups.com.
 To unsubscribe from this group, send email to 
 web2py+unsubscr...@googlegroups.com.
 For more options, visit this group at 
 http://groups.google.com/group/web2py?hl=en.



-- 
You received this message because you are subscribed to the Google Groups 
web2py-users group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.