2014-09-01 43 views
0

我正在開發一個評論部分頁面,我使用了文本框,按鈕和一個gridview控件來插入註釋並分別顯示它們。我在gridview外部添加了一個用於添加註釋的文本框,同時我還在gridview中添加了另一個文本框來添加對每個註釋的回覆。我分別在gridview控件中顯示了所有的評論和回覆。我注意到,如果我進入從使用下面在asp.net中處理Gridview控件中的文本框?

string comment = Server.HtmlEncode(TextBox2.Text.Replace("'", "''")); 
comment = Server.HtmlEncode(comment.Replace("\r\n", "<br/>")); 

connection.Open(); 
string sql = "INSERT INTO [ComTab]([Name],[Comments]) Values('" + commentor + "','" + comment + "')"; 
SqlCommand cmd = new SqlCommand(sql, connection); 
cmd.CommandType = CommandType.Text; 

cmd.ExecuteNonQuery(); 
cmd.Dispose(); 
connection.Close(); 

這句法位於GridView控件外的文本框意見,我可以保存此行< BR/> < BR/>有我的評語成沿着我數據庫如果你正在做一個多段評論。所以沒有問題,這就是我想要的。 現在相反,如果我輸入回覆到位於GridView控件內部使用下面

Button btn2 = (Button)sender; 
GridViewRow row = (GridViewRow)btn2.NamingContainer; 
TextBox gridtxt2 = row.FindControl("TextBox4") as TextBox; 

string reply = Server.HtmlEncode(TextBox3.Text.Replace("'", "''")); 
reply = Server.HtmlEncode(reply.Replace("\r\n", "<br/>")); 

connection.Open(); 
string sql = "INSERT INTO [RepTab]([Name],[Replies]) Values('" + commentor + "','" + reply + "')"; 
SqlCommand cmd = new SqlCommand(sql, connection); 
cmd.CommandType = CommandType.Text; 

cmd.ExecuteNonQuery(); 
cmd.Dispose(); 
connection.Close(); 

以下代碼文本框無法保存這一行了< BR/> < BR/>以及我的回覆到我的數據庫,這就是爲什麼如果用戶輸入多段回覆,它不會顯示多段回覆,而是它被壓縮成一個長段。那麼我怎麼能夠保存這條線< br/> < br/>隨着我的回覆到我的數據庫?有什麼建議麼?謝謝...

+1

Sql注入檢測:)我希望有人會添加回復');丟表用戶; - – 2014-09-01 12:01:56

+0

你有什麼建議?你什麼意思? – timmack 2014-09-01 12:03:13

+0

Ondrej說的是,如果你使用字符串連接來創建一個SQL字符串,並且你發送到數據庫,那麼你很容易被某人添加一個額外的SQL命令給你試圖執行的命令。這意味着有人可能會放棄您的數據庫,因爲權限並未阻止他。更好的方法是在你的查詢中使用SQL參數,它可以防止SQL注入。所以你可以稱它爲sql =「insert into x(a,b)values(@paramA,@paramB)」。然後在下面你會調用cmd.Parameters.AddWithValue(「@ paramA」,textbox1.Value)等希望清除它。 – 2014-09-01 12:07:09

回答

0

沒有必要用<br/>替換\ n或對其進行編碼。您可以保存\ r \ n,並將其重新打印出來,文本框將顯示新行。如果您直接將文本直接寫入響應而不進行控制,則需要確保某人不會將JavaScript注入數據庫,這會在裝入數據庫時​​執行一些令人討厭的操作。

編輯 - 最終的解決方案:

嘗試設置列的Text屬性在網格渲染響應,

Text='<%# Eval("reply").ToString().Replace("\n", "<br />") %>' 

,當你保存到數據庫不更換\ n 。另外,請確保輸出JS乾淨的代碼以防止濫用。

+0

這就是爲什麼我想知道爲什麼我可以顯示多段評論,同時當他們使用相同的代碼時,不能顯示多段內容的回覆。因此另一個不能保存此行< br/> < br/>進入我的數據庫。 – timmack 2014-09-01 12:44:17

+0

我不能保存這條線< br/> < br/>連同我的回覆到我的數據庫這就是爲什麼如果用戶輸入一個多段回覆,它不會顯示多段回覆,而是它是壓縮成一個長段。那麼我該如何將這條線路保存下來< br/> < br/>以及我的回覆到我的數據庫中?有什麼建議麼?謝謝... – timmack 2014-09-01 12:50:11

+0

您使用哪種控件來顯示註釋,以及哪一個顯示回覆? – 2014-09-01 14:50:09