2016-08-20 142 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

感謝您的解釋! –

相關問題