2016-02-04 91 views
0

每當我提交表格,它就會起作用。如果我嘗試刷新頁面,它會問這樣的:網頁在刷新後重新提交數據到表格[確認表格重新提交]

click to see

然後如果我點擊繼續,它會再次重新提交數據到表。所以基本上我問我怎麼能阻止它重新提交數據到表中,一旦刷新點擊?它可以停止嗎?我在這裏錯過了什麼嗎?我能繞過這個嗎?

我SQLDB表:

table

指數

def index(): 
if request.vars: 
    sqldb.uevent.insert(name=request.vars.name, latitude=request.vars.lat, longitude=request.vars.lng, phone=request.vars.phone, description=request.vars.description) 

視圖

<form method="post"> 
        <div class="form-group"> 
         <label>Name of Uevent:</label> 
         <input class="form-control" id="formName" placeholder="Uevent..." name="name"> 
        </div> 
        <div class="form-group"> 
        <input type="hidden" class="form-control" id="formLat" name="lat"> 
        </div> 
        <div class="form-group"> 
        <input type="hidden" class="form-control" id="formLong" name="lng"> 
        </div> 
        <div class="form-group"> 
        <label>Phone:</label> 
        <input class="form-control" id="formPhone" placeholder="Phone..." name="phone"> 
        </div> 
       <div class="form-group"> 
        <label>Description of Uevent:</label> 
        <textarea class="form-control" rows="3" id="formDescription" placeholder="Description..." name="description"></textarea> 
        </div> 
       <button type="submit" class="btn btn-primary">Submit</button> 
       <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button> 
      </form> 

模型

sqldb.define_table('uevent', 
       Field('name', label="Name"), 
       Field('latitude', 'float', label="Latitude",readable=False), 
       Field('longitude', 'float', label="Longitude",readable=False), 
       Field('phone', label="Phone"), 
       Field('description', 'text' ,label="Description", default="No Description"), 
       Field('appropriate', label="Appropriate",writable=False,readable=False)) 

回答

0

簡短的回答是,你不應該刷新瀏覽器頁面中的POST請求(例如,一個典型的表單提交)之後,爲你指示瀏覽器重新提交POST(這就是瀏覽器彈出警告的原因 - 你通常不想多次​​發佈相同的數據)。

在web2py結尾,如果您使用FORMSQLFORM助手,則可以防止重複的數據庫插入。默認情況下,他們在表單中添加一個唯一的_formkey字段,該字段可防止CSRF攻擊,並防止多次提交相同的表單。

如果你不想使用web2py表單助手,你可以自己編寫類似的邏輯。只需使用您在會話中存儲的唯一密鑰向表單添加隱藏字段(每次請求頁面時都必須生成一個新的唯一密鑰)。提交表單時,請確保提交的鍵與會話中的值匹配。提交後,從會話中刪除密鑰,以便任何後續提交將被拒絕。