login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > .NET > C#.NET > Guestbook v2.0 (+ Admin)

Guestbook v2.0 (+ Admin)

Auteur: Abbas - 22 november 2009 - 18:04 - Gekeurd door: Abbas - Hits: 7912 - Aantal punten: 5.00 (1 stem)



Dit is de tweede versie van het gastenboek dat ik hier eerder al eens had gepost. Het is volledig herschreven en er zit nu ook een admin gedeelte bij. Het grote verschil met de vorige versie is dat er gebruik gemaakt wordt van een ASP.NET Repeater Control in plaats van telkens een Label. Voor de reactie is er ook een wijziging, nu wordt er gevalideerd met de Validator Controls van ASP.NET en het formuliertje zit in een CustomControl die in de Guestbook pagina wordt ingeladen. Het admin gedeelte maakt gebruik van een GridView om alle items te tonen, alle items kunnen dan ook gewijzigd/verwijderd worden (logisch voor een admin gedeelte). Er zit ook een aparte klasse bij om alle database werk en ander validatiewerk te scheiden van de andere code. De database is een MS SQL Database.

Zo ziet de projectstructuur eruit:
http://www.dump.../20331.png

Hier is de afbeelding van hoe de tabel eruit ziet:
http://www.dump.../20332.png

Edit:
De functie "SecureInput" deed niet echt veel aangezien ik vergeten was om de HtmlEncode() methode erbij te zetten. Je moet enkel in de pagina Deafult.aspx letten op de eerste regel, hier staat de eigenschap ValidateRequest nu op false. Anders krijg je de melding "A potential dangerous request... bla bla" als je HTML of JavaScript probeert in te voegen. Daarom bevat de functie SecureInput nu wél de methode HttpUtility.HtmlEncode() waardoor de speciale tekens omgezet worden in hun ASCII waarde. Ook moet je dan in die klasse "using System.Web;" toevoegen.
Mijn excuses! 

Code:
Hieronder volgt de code voor de tabel:
  1. CREATE TABLE TblGuestBook
  2. (
  3. Id int IDENTITY (1, 1) PRIMARY KEY,
  4. Naam nvarchar(25) NOT NULL,
  5. Email nvarchar(50) NOT NULL,
  6. Bericht text NOT NULL,
  7. Datum nvarchar(20) NOT NULL,
  8. IP nvarchar(15) NOT NULL
  9. )

Default.aspx
  1. <%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2. <%@ Register Src="~/ReactieControl.ascx" TagPrefix="asp" TagName="Reactie" %>
  3.  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  5.  
  6. <html xmlns="http://www.w3.org/1999/xhtml">
  7. <head runat="server">
  8. <title>Gastenboek v2.0</title>
  9. </head>
  10. <form id="formGb" runat="server">
  11. <div>
  12. <asp:Repeater ID="repeatItems" runat="server">
  13. <HeaderTemplate><h4>WELKOM OP HET GASTENBOEK!</h4></HeaderTemplate>
  14. <AlternatingItemTemplate>
  15. <div style="background-color:#CCFFFF">
  16. <asp:Label ID="lblNaam" runat="server" Text='<%# String.Format("Poster : {0} | ", DataBinder.Eval(Container.DataItem, "Naam")) %>' />
  17. <asp:Label ID="lblDatum" runat="server" Text='<%# String.Format("Gepost op : {0}<br />", DataBinder.Eval(Container.DataItem, "Datum")) %>' />
  18. <asp:Label ID="lblBericht" runat="server" Text='<%# String.Format("Bericht :<br />{0}", DataBinder.Eval(Container.DataItem, "Bericht")) %>' />
  19. </div>
  20. </AlternatingItemTemplate>
  21. <ItemTemplate>
  22. <div style="background-color:#CCCCFF">
  23. <asp:Label ID="lblNaam" runat="server" Text='<%# String.Format("Poster : {0} | ", DataBinder.Eval(Container.DataItem, "Naam")) %>' />
  24. <asp:Label ID="lblDatum" runat="server" Text='<%# String.Format("Gepost op : {0}<br />", DataBinder.Eval(Container.DataItem, "Datum")) %>' />
  25. <asp:Label ID="lblBericht" runat="server" Text='<%# String.Format("Bericht :<br />{0}", DataBinder.Eval(Container.DataItem, "Bericht")) %>' />
  26. </div>
  27. </ItemTemplate>
  28. </asp:Repeater>
  29. <br /><br /><br />
  30. <asp:Reactie ID="reactieControl" runat="server" />
  31. </div>
  32. </form>
  33. </body>
  34. </html>

Default.aspx.cs
  1. using System;
  2. using Guestbook;
  3.  
  4. public partial class _Default : System.Web.UI.Page
  5. {
  6. protected void Page_Load(object sender, EventArgs e)
  7. {
  8. repeatItems.DataSource = Database.GetData("SELECT Naam, Bericht, Datum FROM TblGuestBook ORDER BY Id DESC");
  9. repeatItems.DataBind();
  10. }
  11. }

Admin.aspx
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Admin.aspx.cs" Inherits="Admin" %>
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml">
  6. <head runat="server">
  7. <title>Guestbook v2.0 - Admin</title>
  8. </head>
  9. <form id="frmAdmin" runat="server">
  10. <div>
  11. <asp:GridView ID="gridAdmin" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" OnRowEditing="gridAdmin_RowEditing" OnRowUpdating="gridAdmin_RowUpdating" OnRowCancelingEdit="gridAdmin_RowCancelingEdit" OnRowDeleting="gridAdmin_RowDeleting">
  12. <Columns>
  13.  
  14. <asp:TemplateField HeaderText="ID" SortExpression="Id">
  15. <ItemTemplate>
  16. <asp:Label ID="lblId" runat="server" Text='<%# Bind("Id") %>' />
  17. </ItemTemplate>
  18. </asp:TemplateField>
  19.  
  20. <asp:TemplateField HeaderText="Naam" SortExpression="Naam">
  21. <EditItemTemplate>
  22. <asp:TextBox ID="txtNaam" runat="server" Text='<%# Eval("Naam") %>' />
  23. </EditItemTemplate>
  24. <ItemTemplate>
  25. <asp:Label ID="lblNaam" runat="server" Text='<%# Bind("Naam") %>' />
  26. </ItemTemplate>
  27. </asp:TemplateField>
  28.  
  29. <asp:TemplateField HeaderText="E-mail" SortExpression="Email">
  30. <EditItemTemplate>
  31. <asp:TextBox ID="txtEmail" runat="server" Text='<%# Eval("Email") %>' />
  32. </EditItemTemplate>
  33. <ItemTemplate>
  34. <asp:Label ID="lblEmail" runat="server" Text='<%# Bind("Email") %>' />
  35. </ItemTemplate>
  36. </asp:TemplateField>
  37.  
  38. <asp:TemplateField HeaderText="Bericht" SortExpression="Bericht">
  39. <EditItemTemplate>
  40. <asp:TextBox ID="txtBericht" runat="server" Text='<%# Eval("Bericht") %>' />
  41. </EditItemTemplate>
  42. <ItemTemplate>
  43. <asp:Label ID="lblBericht" runat="server" Text='<%# Bind("Bericht") %>' />
  44. </ItemTemplate>
  45. </asp:TemplateField>
  46.  
  47. <asp:TemplateField HeaderText="Datum" SortExpression="Datum">
  48. <EditItemTemplate>
  49. <asp:TextBox ID="txtDatum" runat="server" Text='<%# Eval("Datum") %>' />
  50. </EditItemTemplate>
  51. <ItemTemplate>
  52. <asp:Label ID="lblDatum" runat="server" Text='<%# Bind("Datum") %>' />
  53. </ItemTemplate>
  54. </asp:TemplateField>
  55.  
  56. <asp:TemplateField HeaderText="IP adres" SortExpression="IP">
  57. <EditItemTemplate>
  58. <asp:TextBox ID="txtIP" runat="server" Text='<%# Eval("IP") %>' />
  59. </EditItemTemplate>
  60. <ItemTemplate>
  61. <asp:Label ID="lblIP" runat="server" Text='<%# Bind("IP") %>' />
  62. </ItemTemplate>
  63. </asp:TemplateField>
  64.  
  65. <asp:TemplateField HeaderText="Edit">
  66. <EditItemTemplate>
  67. <asp:LinkButton ID="lnkUpdate" runat="server" CausesValidation="True" CommandName="Update" Text="Update" />
  68. <asp:LinkButton ID="lnkCancel" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
  69. </EditItemTemplate>
  70. <ItemTemplate>
  71. <asp:LinkButton ID="lnkEdit" runat="server" CausesValidation="False" CommandName="Edit" Text="Edit" />
  72. </ItemTemplate>
  73. </asp:TemplateField>
  74. <asp:CommandField HeaderText="Delete" ShowDeleteButton="True" ShowHeader="True" />
  75.  
  76. </Columns>
  77. </asp:GridView>
  78. </div>
  79. </form>
  80. </body>
  81. </html>

Admin.aspx.cs
  1. using System;
  2. using System.Web.UI;
  3. using System.Web.UI.WebControls;
  4. using Guestbook;
  5.  
  6. public partial class Admin : Page
  7. {
  8. protected void Page_Load(object sender, EventArgs e)
  9. {
  10. if (!IsPostBack)
  11. Bind();
  12. }
  13.  
  14. protected void gridAdmin_RowEditing(object sender, GridViewEditEventArgs e)
  15. {
  16. gridAdmin.EditIndex = e.NewEditIndex;
  17. Bind();
  18. }
  19.  
  20. protected void gridAdmin_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
  21. {
  22. gridAdmin.EditIndex = -1;
  23. Bind();
  24. }
  25.  
  26. protected void gridAdmin_RowUpdating(object sender, GridViewUpdateEventArgs e)
  27. {
  28. TextBox txtNaam = (TextBox)gridAdmin.Rows[e.RowIndex].FindControl("txtNaam");
  29. TextBox txtEmail = (TextBox)gridAdmin.Rows[e.RowIndex].FindControl("txtEmail");
  30. TextBox txtBericht = (TextBox)gridAdmin.Rows[e.RowIndex].FindControl("txtBericht");
  31. TextBox txtDatum = (TextBox)gridAdmin.Rows[e.RowIndex].FindControl("txtDatum");
  32. TextBox txtIP = (TextBox)gridAdmin.Rows[e.RowIndex].FindControl("txtIP");
  33. String[] txtValues = new String[] { txtNaam.Text, txtEmail.Text, txtBericht.Text, txtDatum.Text, txtIP.Text };
  34.  
  35. if (Functions.IsValidInput(txtValues))
  36. {
  37. txtValues = Functions.SecureInput(txtValues);
  38. Database.Update(Convert.ToInt32(gridAdmin.DataKeys[e.RowIndex].Values[0]), txtValues[0], txtValues[1], txtValues[2], txtValues[3], txtValues[4]);
  39. gridAdmin.EditIndex = -1;
  40. Bind();
  41. }
  42. }
  43.  
  44. protected void gridAdmin_RowDeleting(object sender, GridViewDeleteEventArgs e)
  45. {
  46. Database.Delete(Convert.ToInt32(gridAdmin.DataKeys[e.RowIndex].Values[0]));
  47. Bind();
  48. }
  49.  
  50. private void Bind()
  51. {
  52. gridAdmin.DataSource = Database.GetData("SELECT [Id], [Naam], [Email], [Bericht], [Datum], [IP] FROM TblGuestBook");
  53. gridAdmin.DataBind();
  54. }
  55. }

ReactieControl.ascx
  1. <%@ Control Language="C#" AutoEventWireup="true" CodeFile="ReactieControl.ascx.cs" Inherits="ReactieControl" %>
  2. <div>
  3. <asp:Table ID="ReactieTabel" runat="server">
  4. <asp:TableRow>
  5. <asp:TableCell>
  6. <asp:Label ID="lblNaam" AssociatedControlID="txtNaam" runat="server" Text="Naam : " />
  7. </asp:TableCell>
  8. <asp:TableCell>
  9. <asp:TextBox ID="txtNaam" runat="server" />
  10. <asp:RequiredFieldValidator ID="valNaam" runat="server" ErrorMessage="*" ControlToValidate="txtNaam" />
  11. </asp:TableCell>
  12. </asp:TableRow>
  13. <asp:TableRow>
  14. <asp:TableCell>
  15. <asp:Label ID="lblMail" AssociatedControlID="txtMail" runat="server" Text="Email : " />
  16. </asp:TableCell>
  17. <asp:TableCell>
  18. <asp:TextBox ID="txtMail" runat="server" />
  19. <asp:RegularExpressionValidator ID="valMail" runat="server" ControlToValidate="txtMail" ErrorMessage="*" ValidationExpression="\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" />
  20. </asp:TableCell>
  21. </asp:TableRow>
  22. <asp:TableRow>
  23. <asp:TableCell VerticalAlign="Top">
  24. <asp:Label ID="lblMessage" AssociatedControlID="txtMessage" runat="server" Text="Bericht : " />
  25. </asp:TableCell>
  26. <asp:TableCell>
  27. <asp:TextBox ID="txtMessage" runat="server" TextMode="MultiLine" Rows="8" Columns="35" />
  28. <asp:RequiredFieldValidator ID="valMessage" runat="server" ErrorMessage="*" ControlToValidate="txtMessage" />
  29. </asp:TableCell>
  30. </asp:TableRow>
  31. <asp:TableRow>
  32. <asp:TableCell ColumnSpan="2" HorizontalAlign="Center">
  33. <asp:Button ID="btnSubmit" runat="server" Text="Verzenden" OnClick="btnSubmit_Click" />
  34. </asp:TableCell>
  35. </asp:TableRow>
  36. </asp:Table>
  37. </div>

ReactieControl.ascx.cs
  1. using System;
  2. using System.Web;
  3. using System.Web.UI;
  4. using Guestbook;
  5.  
  6. public partial class ReactieControl : UserControl
  7. {
  8. protected void btnSubmit_Click(object sender, EventArgs e)
  9. {
  10. String[] insertValues = new String[] { txtNaam.Text, txtMail.Text, txtMessage.Text };
  11. insertValues = Functions.SecureInput(insertValues);
  12. Database.Insert(insertValues[0], insertValues[1], insertValues[2], DateTime.Now.ToUniversalTime().ToString(), HttpContext.Current.Request.UserHostAddress);
  13. Response.Redirect(Request.UrlReferrer.AbsoluteUri);
  14. }
  15. }

App_Code/Database.cs
  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Configuration;
  5. using System.Web;
  6.  
  7. namespace Guestbook
  8. {
  9. public static class Database
  10. {
  11. private static SqlConnection sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["DatabaseConnectionString"].ConnectionString);
  12.  
  13. public static DataTable GetData(String sqlString)
  14. {
  15. DataTable tempTable = new DataTable();
  16.  
  17. try
  18. {
  19. SqlDataAdapter adaptData = new SqlDataAdapter(sqlString, sqlConn);
  20. adaptData.Fill(tempTable);
  21. }
  22. catch (Exception ex)
  23. {
  24. throw new Exception(ex.Message);
  25. }
  26. return tempTable;
  27. }
  28.  
  29. public static void Update(int Id, String Naam, String Email, String Bericht, String Datum, String IP)
  30. {
  31. ExecuteQuery("UPDATE TblGuestBook SET Naam = '" + Naam + "', Email = '" + Email + "', Bericht = '" + Bericht + "', Datum = '" + Datum + "', IP = '" + IP + "' WHERE Id = '" + Id + "' ");
  32. }
  33.  
  34. public static void Delete(int Id)
  35. {
  36. ExecuteQuery("DELETE FROM TblGuestBook WHERE Id = '" + Id + "' ");
  37. }
  38.  
  39. public static void Insert(String Naam, String Email, String Bericht, String Datum, String IP)
  40. {
  41. ExecuteQuery("INSERT INTO TblGuestBook(Naam, Email, Bericht, Datum, IP) VALUES('" + Naam + "', '" + Email + "', '" + Bericht + "', '" + Datum + "', '" + IP + "')");
  42. }
  43.  
  44. private static void ExecuteQuery(String sqlQuery)
  45. {
  46. SqlCommand sqlComm = new SqlCommand(sqlQuery, sqlConn);
  47.  
  48. try
  49. {
  50. sqlConn.Open();
  51. sqlComm.ExecuteNonQuery();
  52. }
  53. catch (Exception ex)
  54. {
  55. throw new Exception(ex.Message);
  56. }
  57. finally
  58. {
  59. sqlConn.Close();
  60. }
  61. }
  62. }
  63.  
  64. public static class Functions
  65. {
  66. public static bool IsValidInput(String[] input)
  67. {
  68. foreach (String s in input)
  69. if (String.IsNullOrEmpty(s.Trim()))
  70. return false;
  71. return true;
  72. }
  73.  
  74. public static String[] SecureInput(String[] input)
  75. {
  76. int i = 0;
  77. String[] temp = new String[input.Length];
  78. foreach (String s in input)
  79. temp[i++] = HttpUtility.HtmlEncode(s);
  80. return temp;
  81. }
  82. }
  83. }

Web.config
  1. <!--
  2. Hiervan zet ik niet alle code, enkel de connectionstring voor de DB.
  3. Dit blokje code moet je tussen de <configuration>-tags plaatsen.
  4. -->
  5. <connectionStrings>
  6. <add name="DatabaseConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
  7. providerName="System.Data.SqlClient" />
  8. </connectionStrings>
Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Lees de reacties (7)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.069s