2016-08-20 132 views
1

我想使用表单将数据存储在数据库中。使用web2py中的表格插入数据到数据库中

我怎么能做到这一点,而无需使用SQLFORMphp我们使用$var = $_POST['var_form']

我创建了模件文件中的表名为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"> 

回答

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) 
+0

谢谢 但我有另一个问题 当我在数据库“产品”上插入产品时,我发现它,但我发现其他产品的值为'无'。 –

+0

@ AmineSghiouriEl-idrissi这意味着你的控制器包含'insert'语句调用两次。您是否刷新了该控制器的视图或直接打开了上述控制器的视图。添加[pdb](http://stackoverflow.com/questions/4228637/getting-started-with-the-python-debugger-pdb)并检查。 –

0

This answer看法是正确的访问提交值,但为了让事情变得更容易一些,你应该使用HTML字段名完全匹配数据库表字段名称。在这种情况下,可以简化插入到:

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

要小心,虽然,你的手工方法缺乏对CSRF攻击任何保护(这web2py的形式,系统将提供)。或者,请注意,即使您想在视图中生成自定义表单布局,仍然可以使用SQLFORM。文档herehere中涵盖了此方法。

+0

感谢您的解释! –

相关问题