2011-07-07 17 views
0

我正在嘗試更新我的表格。我有一個只有一個TextBox的頁面,用戶可以輸入數量,但它不會更新。沒有任何錯誤或任何事情。而且,讓我們假設列中已經有'1',然後我更新它以說'6',然後我回到表格,那個特定行現在變成了'0'。我不明白。正在更新只是無效

當我看着URL的查詢字符串部分..無論我發佈的表單是什麼值,它總是說0是查詢字符串。

下面是我得到了什麼:

var UpdateQuantityQuery = ""; 
    if(Request.Form["IsBoxed"].AsBool() == true) 
    { 
     UpdateQuantityQuery = "UPDATE Cart SET Boxes = '" + Request.Form["quantity"].AsInt() + "' WHERE PartNumber = '" + Request.Form["PartNumber"] + "' AND IsBoxed = 'True' AND OrderId = '" + Session["OSFOID"] + "'"; 
     database.Execute(UpdateQuantityQuery); 

     // Redirect back to their SHopping Cart now. 
     Response.Redirect("~/Account/Cart.cshtml"); 
    } 
    else 
    { 
     UpdateQuantityQuery = "UPDATE Cart SET Units = '" + Request.Form["quantity"].AsInt() + "' WHERE PartNumber = '" + Request.Form["PartNumber"] + "' AND IsBoxed = 'False' AND OrderId = '" + Session["OSFOID"] + "'"; 
     database.Execute(UpdateQuantityQuery); 

     // Redirect back to their SHopping Cart now. 
     Response.Redirect("~/Account/Cart.cshtml"); 
    } 

和表單代碼:

<form method="post" action="EditQuantity.cshtml?Update=OK&[email protected]["PartNumber"]&[email protected]["IsBoxed"]"> 
    <fieldset> 
     <legend>Edit Quantity</legend> 
     <label for="quantity"> 
       @Message 
     </label> 
     <input type="text" name="quantity" title="Edit Quantity" /> 
     <input type="submit" value="Confirm" title="Confirm Change" /> 
    </fieldset> 
</form> 

難道我做錯了什麼在這裏,可能是造成這cojombulate?

+1

也打印'UpdateQuantityQuery'來查看發送到數據庫的確切內容。 '.AsInt()'做了什麼? –

+4

不回答你的問題,但看着你的代碼,你可能想了解SQL注入攻擊以及如何避免它們。您編寫查詢的方式是如何不在SQL查詢中使用用戶輸入的教科書示例。 http://msdn.microsoft.com/en-us/library/ff648339.aspx – David

+4

我想提交一個帶有參數「PartNumber」的表單文章作爲''; DROP TABLE CART'您的代碼極易受SQL注入攻擊。緊急查找參數化查詢。 – spender

回答

2

您應該使用

if(Request.QueryString["IsBoxed"].AsBool() == true) 

沒有形成,你是通過查詢字符串不是表單元素

+1

Argh。我希望你不會在GET請求背後鼓勵數據庫更新?通過查詢字符串發送更改數據是一件很大的事情。真正的答案是將請求更改爲帖子,而不是使用查詢字符串。 – spender

+0

+1。這可能是爲什麼更新沒有執行的正確答案。然而,即使這是一個非常糟糕的主意。篡改查詢字符串非常容易。並不是說創建一個表單來從另一個服務器發佈到他的表單會很困難,但至少與篡改查詢字符串變量相比,更多的工作是篡改表單發佈變量。 – David

+0

嗅探URL比嗅探表單傳送的有效載荷要容易得多。網址常規地記錄在網絡上......我們不希望用戶數據在這些日誌中彈出。 – spender

1

只是一個猜測發送此信息,但會不會是你的更新查詢您要更新帶字符串的整數類型?看起來你正在用單引號將你正在投射的整數值包裝起來。我想這一切都取決於如何在數據庫中定義類型。如果它們被定義爲整數,請嘗試刪除單引號。如果它們被定義爲字符串,那麼沒有理由將它們轉換爲整數。只是一個猜測。

+0

嗯,我想這可能是,我現在正在檢查。謝謝你指出! – bendr

+0

謝謝 - 但我只是改變它,並刪除了數量的報價 - 但它仍然不更新。 – bendr

+0

你是否在IsBoxed ='True'處引用了單引號。如果IsBoxed被定義爲位類型,那麼這也可能不起作用。 –