Asp.Net ile Ziyaretçi Defteri

Bu dersimizde Asp.Net ile basitçe ziyaretçi defteri yapmayı göreceğiz.

Bu dersimizde Asp.Net ile basitçe ziyaretçi defteri yapmayı göreceğiz.

Bir arkadaşımızın istediği üzerine bu makaleyi yazma girişiminde bulunduğumu belirtmek isterim. Asp.Net ile ziyaretçi defterimi giriş yapmadan önce birkaç öneride bulunmak istiyorum.

Ziyaretçi defterimizi DataList nesnesi ile yaptığım için ilk olarak bu nesne hakkında bilginiz yok ise Ders 1, Ders 2, Ders 3, Ders 4 makalelerini okumanızı tavsiye ederim. Şaket direk bu makaleden devam ederseniz. Anlamakta zorlanacağınızdan eminim. İkinci önerim olarakda eğer MsSql ile nasıl veritabanı oluşturulduğunu bilmiyorsanız daha önce yazmış olduğum makalelerden bakabilirsiniz. Bundan da uzun uzun bahsetmeyeceğim. Üçüncüsüde MasterPage olayınada yine daha önce yazdığım makaleden göz atın.

Makemize artık giriş yapabiliriz. İlk olarak sayfalarımızdan ve veritabanımızdan bahsetmek istiyorum.





Bu projemizde Default.aspx, MesajYaz.aspx ve ZiyaretciDefteri.master bir tane Css ve MsSql veritabanımız var.

Veritabanımızdaki tablo(Defter)da ID(Birincil Anahtar), AdiSoyadi(varchar(50)), MailAdresi(varchar(500)), WebSitesi(varchar(150)), Mesaj(varchar(500)), EklenmeTarihi(smalldatetime) alanları bulunuyor.
ZiyaretciDefteri.master sayfamızdan başlayalım. Bu sayfamızda ana kalıbımız yer alacak.

Html Tagler: ZiyaretciDefteri.master



<%@ Master Language="C#" AutoEventWireup="true" CodeFile="ZiyaretciDefteri.master.cs"

    Inherits="ZiyaretciDefteri" %>

<%--Mustafa Çiçek - By_Mstfcck--%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

    <title>Asp.NET ile Ziyaretçi Defteri - mstfcck</title>

    <asp:ContentPlaceHolder ID="head" runat="server">

        <style type="text/css">

            .tablo

            {

                width: 750px;

            }

            .baslik

            {

                height: 100px;

            }

        </style>

    </asp:ContentPlaceHolder>

    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />

</head>

<body>

    <form id="form_ziyaretcidefteri" runat="server">

    <div>

        <table align="center" class="tablo" cellpadding="5" cellspacing="0">

            <tr>

                <td class="baslik">

                    <div>

                        <h2>

                        Ziyaretçi Defteri</h2>

                    </div>

                </td>

            </tr>

            <tr>

                <td>

                    <div style="text-align: center">

                        <a href="Default.aspx">Defter</a> | <a href="MesajYaz.aspx">Mesaj Yaz</a></div>

                </td>

            </tr>

            <tr>

                <td>

                    <div>

                        <asp:ContentPlaceHolder ID="CPH_ziyaretcidefteri" runat="server">

                        </asp:ContentPlaceHolder>

                    </div>

                </td>

            </tr>

            <tr>

                <td>

                    <div>

                        Mustafa Çiçek - @Copyright By_Mstfcck</div>

                </td>

            </tr>

        </table>

    </div>

    </form>

</body>

</html>



Code Behind: Bu sayfamızda herhangi bir kod yer almıyor.
Görünümü:


Html Tagler: Default.aspx


<%@ Page Language="C#" MasterPageFile="~/ZiyaretciDefteri.master" AutoEventWireup="true"

    CodeFile="Default.aspx.cs" Inherits="_Default" Title="Defter" %>

<%--Mustafa Çiçek - By_Mstfcck--%>

<asp:Content ID="Content_head" ContentPlaceHolderID="head" runat="Server">

    <style type="text/css">

        div

        {

            height: 100%;

            width: 100%;

        }

        .sagayasla

        {

            text-align: right;

        }

        .altbasliksitili

        {

            text-align: center;

        }

        .gumusarkaplan

        {

            background-color: Silver;

        }

        .ustbasliksitili

        {

            text-align: center;

        }

    </style>

    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />

</asp:Content>

<asp:Content ID="Content_CPH" ContentPlaceHolderID="CPH_ziyaretcidefteri" runat="Server">

    <div>

        <%--DataList nesnemiz. Buradaki olaylara(event) dikkat edin. CodeBehind kısmında bunları kullanıyoruz

        (OnCancelCommand, OnDeleteCommand ...)--%>

        <aspataList ID="DL_defter" runat="server" 

            OnCancelCommand="DL_defter_CancelCommand"

            OnDeleteCommand="DL_defter_DeleteCommand" 

            OnEditCommand="DL_defter_EditCommand"

            OnUpdateCommand="DL_defter_UpdateCommand">

            

            <%--Burası DataList nesnesinin başlık kısmı--%>

            <HeaderTemplate>                

                <h1>Asp.Net ile Ziyaretçi Defteri - By_Mstfcck</h1> 

            </HeaderTemplate>

            

            <%--Burası DataList içinde veritabanından aldığımız verileri işleyecek kısım--%>

            <ItemTemplate>

                <table align="center" style="width: 750px">

                    <tr>

                        <td class="ustbasliksitili">

                            <%--Burasıda önemli bir basamak. Şimdi DataBinder ne işe yarar diye soruyorsunuzdur.

                            Bunun hakkında çok fazla bir bilgim olduğunu söyleyemem ama. Burada yaptığımız işlemin ne işe yaradığını söylim.

                            Alt satırda görmüş olduğumuz DataBinder.Eval veritabanından bulunan tablomuzdaki

                            sutunlardan "AdiSoyadi" olan alandaki verileri listelemeye yarar.

                            Diğerleride buna benzer işlemler yapıyor.--%>

                            <%#DataBinder.Eval(Container.DataItem,"AdiSoyadi")%>

                        </td>

                    </tr>

                    <tr>

                        <td colspan="2">

                            <%#DataBinder.Eval(Container.DataItem,"Mesaj")%>

                        </td>

                    </tr>

                    <tr>

                        <td colspan="2" class="altbasliksitili">

                            <%#DataBinder.Eval(Container.DataItem,"MailAdresi") %>

                            |

                            <%#DataBinder.Eval(Container.DataItem,"WebSitesi") %>

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <%--HiddenFiled bizim görünmez alanımızdır. Veritabanından her yoruma ait ID değerini saklıyor burada.

                            Bunu silme işlemi için kullanacağız.--%>

                            <asp:HiddenField ID="HiddenField_id" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"ID") %>' />

                            <%--Düzenle butonu CommandName olayına dikkat edin. Diğer butonlarda da--%>

                            <asp:LinkButton ID="lb_Duzenle" runat="server" CommandName="Edit" Text="Düzenle"></asp:LinkButton>

                            <asp:LinkButton ID="lb_Sil" runat="server" CommandName="Delete" Text="Sil"></asp:LinkButton>

                        </td>

                    </tr>

                </table>

            </ItemTemplate>

            

            <%--Düzenleme işlemi için verilerin sayfada görünecek hali. Burada TextBox'lar içinde görüntüleme yapıyoruz.

            Düzenleme işlemini yaptıktan sonra Güncelle butonuyla işlemi bitiriyoruz.--%>

            <EditItemTemplate>

                <table align="center" style="width: 750px">

                    <tr>

                        <td class="ustbasliksitili">

                            <asp:TextBox ID="txtAdiSoyadi" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"AdiSoyadi")%>' />

                        </td>

                    </tr>

                    <tr>

                        <td colspan="2" class="ustbasliksitili">

                            <asp:TextBox ID="txtMesaj" runat="server" Width="700px" Height="150px" TextMode="MultiLine" Text='<%#DataBinder.Eval(Container.DataItem,"Mesaj")%>' />

                        </td>

                    </tr>

                    <tr>

                        <td colspan="2" class="altbasliksitili">

                            <asp:TextBox ID="txtMailAdresi" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"MailAdresi") %>' />

                            |

                            <asp:TextBox ID="txtWebSitesi" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"WebSitesi") %>' />

                        </td>

                    </tr>

                    <tr>

                        <td>

                            <asp:HiddenField ID="HiddenField_id" runat="server" Value='<%#DataBinder.Eval(Container.DataItem,"ID") %>' />

                            <asp:LinkButton ID="lb_Guncelle" runat="server" CommandName="Update" Text="Güncelle"></asp:LinkButton>

                            <asp:LinkButton ID="lb_Iptal" runat="server" CommandName="Cancel" Text="İptal"></asp:LinkButton>

                        </td>

                    </tr>

                </table>

            </EditItemTemplate>

            

            <%--Burası ayırıcı kısmı adı üstünde. İki yorumu birbirinden ayrımak için araya yazdığımız taglardeki içeriği görüntüler.

            Ben burada bir tane çizgi koydum siz daha farklı yapabilirsiniz. Resim vs. içerikler.--%>

            <SeparatorTemplate>

                <hr />

            </SeparatorTemplate>

            

        </aspataList>

    </div>

</asp:Content>



Code Behind: Default.cs


using System.Data.SqlClient;



public partial class _Default : System.Web.UI.Page

{

    // Defteri veritabanından çekerek getiriyoruz.

    private void DefteriYukle() 

    {

        // Bağlantı nesnemiz

        SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|ZiyaretciDefteri.mdf;Integrated Security=True;User Instance=True");

        // Command nesnemiz. Buradaki sorguda tarihleri büyükten küçüğe doğru sıralıyoruz.

        // Çünkü en son eklenen mesajın en başta görünmesini istiyoruz.

        SqlCommand com = new SqlCommand("Select * From Defter Order By EklenmeTarihi Desc ", con);

        con.Open();

        // Burada DL_defter bizim DataList'imizin adı. Direk olarak veri kaynağını belirtiyoruz.

        // Html kısmında yazmış olduğumuz DataBinder.Eval ile verileri kendisi sayfaya yükleyecektir.

        DL_defter.DataSource = com.ExecuteReader();

        DL_defter.DataBind();

        con.Close();

    }

    protected void Page_Load(object sender, EventArgs e)

    {

        // Sayfamız ilk defa yükleniyorsa Yorumları listeliyoruz.

        // Buradaki postback olayı önemli sonradan sorun çıkarabiliyor. !!!

        if (!IsPostBack)

            DefteriYukle();

    }

    protected void DL_defter_EditCommand(object source, DataListCommandEventArgs e)

    {

        // Burada datalist lislenen verilere birer index ataması yaptığı için direk olarak edit

        // olayında e.Item.ItemIndex olayı ile index değerini alıp hangi kaydın güncelleneceğini

        // belirtiyoruz.

        DL_defter.EditItemIndex = e.Item.ItemIndex;

        // Daha sonra listeyi tekar yüklüyoruz.

        DefteriYukle();

    }

    protected void DL_defter_CancelCommand(object source, DataListCommandEventArgs e)

    {

        // Burada -1 değeri ile listemizin eski haline dönmesini sağlıyoruz.

        DL_defter.EditItemIndex = -1;

        DefteriYukle();

    }

    protected void DL_defter_UpdateCommand(object source, DataListCommandEventArgs e)

    {

        /* Burası önemli bir adım.

         * e.Item.FindControl ile datalist içindeki nesneleri ID değerlerini belirterek buluyoruz

         * ve içerdikleri değerleri değişkenlerimize atıyoruz.*/        

        int _ID = Convert.ToInt32(((HiddenField)(e.Item.FindControl("HiddenField_id"))).Value);

        string _AdiSoyadi = ((TextBox)e.Item.FindControl("txtAdiSoyadi")).Text.Trim();

        string _Mesaj = ((TextBox)e.Item.FindControl("txtMesaj")).Text.Trim();

        string _MailAdresi = ((TextBox)e.Item.FindControl("txtMailAdresi")).Text.Trim();

        string _WebSitesi = ((TextBox)e.Item.FindControl("txtWebSitesi")).Text.Trim();



        // Burada standart güncelleme işlemini yapıyoruz.

        // HiddenField da sakladığımız ID değerini sorgumuzda koşul olarak belirtiyoruz.

        SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|ZiyaretciDefteri.mdf;Integrated Security=True;User Instance=True");

        SqlCommand com = new SqlCommand("Update Defter Set AdiSoyadi=@AdiSoyadi, Mesaj=@Mesaj, MailAdresi=@MailAdresi, WebSitesi=@WebSitesi Where ID=@ID", con);

        con.Open();

        // Değişken değerlerini sorgumuza gönderiyoruz.

        com.Parameters.Add("@AdiSoyadi", SqlDbType.VarChar).Value = _AdiSoyadi;

        com.Parameters.Add("@Mesaj", SqlDbType.VarChar).Value = _Mesaj;

        com.Parameters.Add("@MailAdresi", SqlDbType.VarChar).Value = _MailAdresi;

        com.Parameters.Add("@WebSitesi", SqlDbType.VarChar).Value = _WebSitesi;

        com.Parameters.Add("@ID", SqlDbType.Int).Value = _ID;

        com.ExecuteNonQuery();

        DL_defter.EditItemIndex = -1;

        con.Close();

        DefteriYukle();

    }

    protected void DL_defter_DeleteCommand(object source, DataListCommandEventArgs e)

    {

        // silme işleminde de yine hiddenfield alanımızdaki id değerinden yararlanıyoruz.

        int _ID = Convert.ToInt32(((HiddenField)(e.Item.FindControl("HiddenField_id"))).Value);

        SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|ZiyaretciDefteri.mdf;Integrated Security=True;User Instance=True");

        SqlCommand com = new SqlCommand("Delete From Defter Where ID=@ID", con);

        con.Open();

        com.Parameters.Add("@ID", SqlDbType.Int).Value = Convert.ToInt32(_ID);

        com.ExecuteNonQuery();

        con.Close();

        DefteriYukle();

    }

}



Görünüm:


Html Tagler: MesajYaz.aspx

<%@ Page Language="C#" MasterPageFile="~/ZiyaretciDefteri.master" AutoEventWireup="true"

    CodeFile="MesajYaz.aspx.cs" Inherits="MesajYaz" Title="Mesaj Yaz" %>

<%--Mustafa Çiçek - By_Mstfcck--%>

<asp:Content ID="Content_head" ContentPlaceHolderID="head" runat="Server">

    <style type="text/css">

        div

        {

            height: 100%;

            width: 100%;

        }

        .ortala

        {

            text-align: center;

        }

    </style>

    <link href="StyleSheet.css" rel="stylesheet" type="text/css" />

</asp:Content>

<asp:Content ID="Content_CPH" ContentPlaceHolderID="CPH_ziyaretcidefteri" runat="Server">

    <div>

        <table align="center" cellpadding="5" cellspacing="0">

            <tr>

                <td colspan="2">

                    <h2>

                    Mesaj Yaz

                    </h2>

                </td>

            </tr>

            <tr>

                <td>

                    Adı Soyadı:

                </td>

                <td>

                    <asp:TextBox ID="txtAdiSoyadi" runat="server" Width="500px"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    Mail Adresi:

                </td>

                <td>

                    <asp:TextBox ID="txtMailAdresi" runat="server" Width="500px"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    Web Site:

                </td>

                <td>

                    <asp:TextBox ID="txtWebSite" runat="server" Width="500px"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td>

                    Mesaj:

                </td>

                <td>

                    <asp:TextBox ID="txtMesaj" runat="server" Height="150px" MaxLength="500" TextMode="MultiLine"

                        Width="500px"></asp:TextBox>

                </td>

            </tr>

            <tr>

                <td colspan="2" class="ortala">

                    <asp:LinkButton ID="lbtn_gonder" runat="server" onclick="lbtn_gonder_Click">Gönder</asp:LinkButton>

                </td>

            </tr>

        </table>

    </div>

</asp:Content>



Code Behind: MesajYaz.cs (Buradaki işlem standart kayıt ekleme olayıdır. TextBoxlara girilen bilgileri veritabanımızdaki uygun alanlara kaydediyoruz.)


using System.Data.SqlClient;



public partial class MesajYaz : System.Web.UI.Page

{

    protected void lbtn_gonder_Click(object sender, EventArgs e)

    {

        SqlConnection con = new SqlConnection(@"Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|ZiyaretciDefteri.mdf;Integrated Security=True;User Instance=True");

        SqlCommand com = new SqlCommand("Insert Into Defter(AdiSoyadi,MailAdresi,WebSitesi,Mesaj,EklenmeTarihi) Values(@AdiSoyadi,@MailAdresi,@WebSitesi,@Mesaj,GETDATE())", con);

        con.Open();

        com.Parameters.Add("@AdiSoyadi", SqlDbType.VarChar).Value = txtAdiSoyadi.Text;

        com.Parameters.Add("@MailAdresi", SqlDbType.VarChar).Value = txtMailAdresi.Text;

        com.Parameters.Add("@WebSitesi", SqlDbType.VarChar).Value = txtWebSite.Text;

        com.Parameters.Add("@Mesaj", SqlDbType.VarChar).Value = txtMesaj.Text;

        com.ExecuteNonQuery();

        con.Close();

        Response.Redirect("Default.aspx");

    }

}



Görünüm:



Sayfamızın çalışan halinden bir görünüm:



Bu makelemizde bu kadar arkadaşlar sorularınız olursa beklerim. İyi çalışmalar...
  • Etiketler;
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

Çok güzel çalışma teşekkürler..
denemem için ilk olarak proramı indirmem gerek sanırım
asya10: http://forum.muhabbetim.com/php-asp-cgi/asp-ile-asp-net-arasindaki-fark-t1733.html | mustafabas: siz asp'ye mi asp.net'e mi başladınız. Ben aspden pek anlamam. asp.net ise sayfayı nerde çalıştırmayı deniyorsunuz sorunuzu tam olarak anlayamadım.
Merhaba ben birşey öğrenmek istiyorum bu ziyaretçi defterine admin onayını nasıl verebiliriz? Yani gönderilen mesajları admin onay vermeden görüntülenmiycek nasıl yapabilirim?yardımcı olabilirseniz sevinirim...
Bence db de boolen bir değer koyup true yapılınca görüntülensin şeklinde olabilir. true false'u da tabii ki admine bırakılır.
arkadaşın dediği aynen doğrudur. where onay='true' diye koşul belirtirsiniz. tamamdır.
benim yazdığım kod sizin mesaj kodunuzla benzer.Program masaüstünde çalışıyor fakat internet serverına atınca An attempt to attach an auto-named database for file D:WebSitesOgrencig060110011App_DataDatabase.mdf failed. A database with the same name exists, or specified file cannot be opened, or it is located on UNC share. gibi bir hata veriyor.bende mi sorun var diye sizin programıda upload ettim aynı hatayı verdi. sorunun ne olduğu konsunda yardımcı olabilirmisiniz
veritabanını yanlış yerde arıyor. bunu denemedim daha önce sunucuya atıp. sunucu için veritabanı adesi başına server.mappath(adres) şeklinde belirtip bi de öyle deneyin... bu locak de çalışır
veri tabanı sorununu halledemiyorum sürekli hata şimdide dl_defterde veriyor yardımcı olur musunuzzz
veri tabanı sorununu halledemiyorum sürekli hata şimdide dl_defterde veriyor yardımcı olur musunuzzz
veri tabanı sorununu halledemedim yeni hatalar çıkıyor yardımcı olabilir msinizz

Yukarı Git