我想使用表单将数据存储在数据库中。
如何在不使用SQLFORM
的情况下执行此操作
就像在php
中一样,我们使用$var = $_POST['var_form']
我在modul文件中创建了一个名为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)
并创建了一个类似
的表单{{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">
答案 0 :(得分:1)
使用URL
帮助程序指定表单的操作。
<form action="{{=URL('create')}}" method=post>
...
</form>
然后在create
控制器中,您可以使用request.vars
db.Produit.insert(Nom=request.vars.nom, Poid=request.vars.poid,
Prix=request.vars.prix, Expiration=request.vars.exp)
答案 1 :(得分:0)
This answer有正确的想法,但为了使事情变得更容易,您应该使用与数据库表字段名称完全匹配的HTML字段名称。在这种情况下,您可以将插入简化为:
db.Produit.insert(**db.Produit._filter_fields(request.post_vars))
请注意,您的手动方法缺乏针对CSRF攻击(web2py表单系统将提供的)的任何保护。或者,请注意,即使您要在视图中生成自定义表单布局,仍可以使用SQLFORM
。文档here和here中介绍了此方法。