Inserting data into a database using forms in web2py

I want to store my data in a database using forms.

How can I do it without using SQLFORM like in php we use $var = $_POST['var_form']

I created a table in modul file called Produit

db.define_table('Produit',`enter code here`
           Field('Nom', requires = IS_NOT_EMPTY()),
           Field('Poid', 'float', requires = IS_NOT_EMPTY()),
           Field('Prix', 'float', requires = IS_NOT_EMPTY()),
           Field('Expiration', 'datetime'),
           auth.signature)

And created a form like

{{extend 'layout.html'}}

<form action="create" method=post>

<fieldset>
<legend><h1><center><em>Ajouter un produit</em></center></h1></legend>
Nom:<br>
<input type="text" name="nom" required/>
<br>
Poid:<br>
<input type="text" name="poid" required/>
<br>
 Prix:<br>
<input type="text" name="prix" required/>
<br>
Date d'expiration:<br>
<input type="date" name="exp" required/>
<br>
<br><br>
<input type="submit" value="Ajouter">

Upvotes: 1

Views: 1239

Answers (2)

Anthony
Anthony

Reputation: 25536

This answer has the right idea, but to make things a little easier, you should use HTML field names that exactly match the database table field names. In that case, you can simplify the insert to:

db.Produit.insert(**db.Produit._filter_fields(request.post_vars))

Beware, though, that your manual approach lacks any protection against CSRF attacks (which the web2py form system would provide). As an alternative, note that you can still use SQLFORM even if you want to generate a custom form layout in the view. This approach is covered in the documentation here and here.

Upvotes: 0

Gaurav Vichare
Gaurav Vichare

Reputation: 1183

Use URL helper to specify action of the form.

<form action="{{=URL('create')}}" method=post>
...
</form>

Then in create controller, you can access submitted values using request.vars

db.Produit.insert(Nom=request.vars.nom, Poid=request.vars.poid,
                  Prix=request.vars.prix, Expiration=request.vars.exp)

Upvotes: 1

Related Questions