Evet, arkadaşlar bu makalem de basit bir
forum uygulaması yapacağız. İlk olarak şunu belirtmeliyim Access veritabanına kayıt yapıcağız ve
ASP.Net in DataGrid Fonksiyonu ile verileri okuyup kullanıcılara yansıtacağız.
forum yönetici tarafından kontrol edilebiliyor olacaktır.
Bu makale ve uygulamayı yazmamdaki amacım en basitinden
ASP.net ile forumun nasıl yapıldığı ve forumların nasıl çalıştığını göstermektir.
Kodlarla ilgili gerekli açıklamalar yanlarına yazılmıştır. Projemize Ana sayfadan başlıyoruz.
Default.aspx in source kısmına aşağıdaki kodları yazıyoruz.
Kod:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!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 id="Head1" runat="server">
<title>Basit forum Uygulaması</title>
<script type="text/JavaScript" language="JavaScript"> // Kullanıcı İsimini yazıp yazmadıgını kontrol edip uyarı Mesajı Veriyoruz.
function Validate(theForm)
{
if (theForm.FrmKullaniciAdi.value == "")
{
alert("Lütfen isminizi yazın");
theForm.FrmKullaniciAdi.focus();
return (false);
}
return (true)
}
</script>
</head>
<body onload="JavaScript: document.form1.FrmKullaniciAdi.focus()">
<form id="form1" method="post" runat="server" onSubmit="return Validate(this)">
<table border="0" align="center" cellspacing="1" cellpadding="5">
<tr>
<td width="100%" style="height: 94px">
<b>Foruma Giriş İçin İsminizi Yazın:</b>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
İsminiz :
<ASP:TextBox id="FrmKullaniciAdi" runat="server" Columns="15"></ASP:TextBox>
</td>
<td valign="top" rowspan="2">
<ASP:Button id="Button1" runat="server" OnClick="DoLogin" Text="Tamam"></ASP:Button>
</td>
</tr>
<tr>
<td valign="top" align="right">
<ASP:TextBox id="FrmSifre" Visible="False" runat="server" Columns="15" TextMode="Password"></ASP:TextBox>
</td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</HTML>
Daha sonra Default.aspx.cs ye aşağıdaki kodları yazıyoruz.
Kod:
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.web;
using System.web.Security;
using System.web.UI;
using System.web.UI.WebControls;
using System.web.UI.WebControls.WebParts;
using System.web.UI.HtmlControls;
public partial class _Default : System.web.UI.Page
{
public void DoLogin(object sender, System.EventArgs e)
{
if (FrmKullaniciAdi.Text == "admin") // Eger kullanıcı isminiz bölümüne admin yazarsa hemen alt kısmında şifre girilmesi için bölüm çıkacaktır
{
if (FrmSifre.Text == "Sifre") // Altta çıkacak bölüme Sifre yazılırsa
{
Session["KullaniciAdi"] = FrmKullaniciAdi.Text;
Session["admin"] = "yes";
Response.Redirect("Konular.aspx");// Kullanıcıya Silme yetkisi verilerek konular bölümüne yönlendirir.
}
else
{
FrmSifre.Visible = true; // Eger Kullanıcı parolayı dogru girmezse izin vermez.
}
}
else // Yukardaki koşullar oluşmazsa yazılan adı hafızaya alarak Konular a yönlendirir.
{
Session["KullaniciAdi"] = FrmKullaniciAdi.Text;
Response.Redirect("Konular.aspx");
}
}
}
Şimdi ise kullanıcının foruma konu eklemesi için KonuEkle.aspx i yaratalım
Kod:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="KonuEkle.aspx.cs" Inherits="KonuEkle" %>
<!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 id="Head1" runat="server">
<title>Konu Ekle</title>
<script type="text/JavaScript" Language="JavaScript">
function Validate(theForm)
{
if (theForm.frmPost.value == "")
{
alert("Lütfen Yeni Konu İsmini Girin");
theForm.frmPost.focus();
return (false);
}
return (true)
}
</script>
</head>
<body>
<form id="AddTopic" method="post" runat="server" onSubmit="return Validate(this)">
<h2>
BasitForum
</h2>
<p>
İlkbaşta Girilen Kullanıcı Adı İle Foruma Yeni Konu Ekliyebiliyoruz
</p>
<div id="outError" runat="server">
<table cellpadding="5" cellspacing="1" border="0" class="DataTable">
<tr>
<td class="TableItem">
Konu Yaratan :
<ASP:Label ID="FrmAdi" Runat="server"></ASP:Label>
<br />
Yeni Konu Adı : (Maksimum 255 Karakter )
<br />
<ASP:TextBox id="frmPost" runat="server" TextMode="MultiLine" MaxLength="255" Columns="40" Rows="5"></ASP:TextBox>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" align="right">
<ASP:Button onClick="DoAddTopic" Text="Ekle" Runat="server" id="Button1"></ASP:Button>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br />
<a href="Konular.aspx">Konulara Geri Dön</a>
</div>
</form>
</body>
</HTML>
Daha sonra KonuEkle.aspx.cs ye aşağıdaki kodları yazıyoruz.
Kod:
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.web;
using System.web.Security;
using System.web.UI;
using System.web.UI.WebControls;
using System.web.UI.WebControls.WebParts;
using System.web.UI.HtmlControls;
public partial class KonuEkle : System.web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// Kullanıcı Adını Kontrol Ediyoruz.
if (Session["KullaniciAdi"].ToString().Length < 1)
{
Response.Redirect("default.aspx");
}
FrmAdi.Text = "<b>" + Session["KullaniciAdi"].ToString() + "</b>";
}
public void DoAddTopic(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + server.MapPath(".\\db\\forum.mdb"); // Veritabanı Baglantı Cümlesi
string strInsert = "INSERT INTO Konular (KonuBasligi, KonuSahibi) VALUES ('" + frmPost.Text + "', '" + Session["KullaniciAdi"].ToString() + "')"; // Kullanıcı tarafından yazılan Konu adını ve kullanıcın adını veritabanımızdaki Konular tablosundaki KonuBasligi ve KonuSahibi bölümlerine ekliyoruz.
try
{
//Yeni baglantı yaratıyoruz
OleDbConnection objConnect = new OleDbConnection(strConnect);
// Veritabanı ile baglantıyı açıyoruz.
objConnect.Open();
OleDbCommand objCommand = new OleDbCommand(strInsert, objConnect);
objCommand.ExecuteNonQuery();
// Veritabanı ile baglantıyı kapatıyoruz.
objConnect.Close();
// Konular.aspx' e Yönlendiriliyor
Response.Redirect("Konular.aspx", true);
}
catch (Exception objError)
{
//Hata varsa mesaj yazdırıyoruz.
outError.InnerHtml = "<b>* Veritabanına baglantı hatası</b>.<br />" + objError.Message + "<br />" + objError.Source;
return;
}
}
}
Şimdi ise forumun konularının listelenmesi için Konular. aspx i kodluyoruz.
Konular. aspx in source kısmına aşağıdaki kodları yazıyoruz.
Kod:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Konular.aspx.cs" Inherits="Konular" %>
<!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 id="Head1" runat="server">
<title>Konular</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<h3>
Basit forum
</h3>
<div id="welcome" runat="server" />
<a href="KonuEkle.aspx">Yeni Konu Ekle</a>
<p />
<div id="outError" runat="server">
<ASP:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="False" HeaderStyle-CssClass="TableHeader" AlternatingItemStyle-CssClass="AltTableItem" ItemStyle-CssClass="TableItem" CellPadding="4" ForeColor="#333333" GridLines="None">
<Columns>
<ASP:TemplateColumn HeaderText="Yazar">
<ItemTemplate>
<ASP:Label Runat='server' ID="lblAdminLink">
<%# DataBinder.Eval(Container.DataItem, "KonuSahibi") %>
<% if (Session["admin"] == "yes")
{ %>
<br>
<a href="KayitSilme.aspx?T=T&ID=<%# DataBinder.Eval(Container.DataItem, "KonuID") %>">
Sil</a>
<% }
%>
<br>
</ASP:Label>
</ItemTemplate>
</ASP:TemplateColumn>
<ASP:TemplateColumn HeaderText="Konu">
<ItemTemplate>
<ASP:Label Runat='server' ID="lblSubject">
<a href="Mesajlar.aspx?ID=<%# DataBinder.Eval(Container.DataItem, "KonuID") %>&S=<%# DataBinder.Eval(Container.DataItem, "KonuBasligi") %>">
<%# DataBinder.Eval(Container.DataItem, "KonuBasligi") %>
</a>
</ASP:Label>
</ItemTemplate>
</ASP:TemplateColumn>
<ASP:BoundColumn DataField="KonuTarihi" HeaderText="Yazıldıgı Tarih"></ASP:BoundColumn>
</Columns>
<FooterStyle BackColor="#507CD1" font-Bold="True" ForeColor="White" />
<EditItemStyle BackColor="#2461BF" />
<SelectedItemStyle BackColor="#D1DDF1" font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<AlternatingItemStyle BackColor="White" />
<ItemStyle BackColor="#EFF3FB" />
<HeaderStyle BackColor="#507CD1" font-Bold="True" ForeColor="White" />
</ASP:DataGrid> </div>
</form>
</body></HTML>
Daha sonra Konular.aspx.cs ye aşağıdaki kodları yazıyoruz.
Kod:
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.web;
using System.web.Security;
using System.web.UI;
using System.web.UI.WebControls;
using System.web.UI.WebControls.WebParts;
using System.web.UI.HtmlControls;
public partial class Konular : System.web.UI.Page
{
public void Page_Load(object sender, System.EventArgs e)
{
if (Session["KullaniciAdi"] == null)// Kullanıcının girişte yazmış oldugu isim veritabanından okunur
{
Response.Redirect("default.aspx");
}
welcome.InnerHtml = "Merhaba " + Session["KullaniciAdi"] + ", yeni konu ekleyebilir veya mevcut olan konulara bakabilirsiniz.<P>";
ListKonular();
}
public void ListKonular()
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + server.MapPath(".\\db\\forum.mdb");
string strSelect = "SELECT * FROM Konular ORDER BY KonuTarihi DESC";
try
{
//Yeni baglantı yaratıyoruz
OleDbConnection objConnect = new OleDbConnection(strConnect);
//Veritabanı ile baglantıyı açıyoruz
objConnect.Open();
OleDbCommand objCommand = new OleDbCommand(strSelect, objConnect);
OleDbDataReader objDataReader;
objDataReader = objCommand.ExecuteReader();
DataGrid1.DataSource = objDataReader;
DataGrid1.DataBind();
if (DataGrid1.Items.Count == 0) // Eger konuya mesaj yazılmamışsa mesaj verdiriyoruz.
{
outError.InnerHtml = "Henüz Mesaj Yazılmamış..";
}
//DataReader ve Veritabanı Baglantısını Kapatıyoruz
objDataReader.Close();
objConnect.Close();
}
catch (Exception objError)
{
outError.InnerHtml = "<b>* Veritabanına baglantı hatası</b>.<br />"
+ objError.Message + "<br />" + objError.Source; //Hata varsa mesaj yazdırıyoruz.
return;
}
}
}
forum yetkilisinin istenmeyen konu veya mesajları silmesi için KayitSilme.aspx i oluşturalım
Kod:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="KayitSilme.aspx.cs" Inherits="KayitSilme" %>
<!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 id="Head1" runat="server">
<title>Kayit silme</title>
</head>
<body>
<div id="outError" runat="server">
</div>
</body>
</HTML>
KayitSilme.aspx.cs ye asagidaki kodlari yaziyoruz.
Kod:
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.web;
using System.web.Security;
using System.web.UI;
using System.web.UI.WebControls;
using System.web.UI.WebControls.WebParts;
using System.web.UI.HtmlControls;
public partial class KayitSilme : System.web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + server.MapPath(".\\db\\forum.mdb"); // Veritabanı Baglantı Cümlesi
string strDELETE = "DELETE * FROM ";// String deger oluşturuyor
string strURL;
if (Request.QueryString["T"] == "T")
{
strDELETE += "Konular WHERE KonuID = " + Request.QueryString["ID"]; // Silinecek konu KonuID sine bakılıp silinmek üzere strDELETE degişkenine atanır.
strURL = "Konular.aspx";
}
else
{
strDELETE += "Mesajlar WHERE MesajID = " + Request.QueryString["ID"];// Mesaj silmek için MesajID sine bakılıp silinmek üzere strDELETE degişkenine atanır.
strURL = "Mesajlar.aspx?ID=" + Request.QueryString["TID"] + "&S=" + Request.QueryString["S"];
}
try
{
OleDbConnection objConnect = new OleDbConnection(strConnect); // Yeni baglantı yaratıyoruz
objConnect.Open();// Veritabanı ile baglantıyı açıyoruz.
OleDbCommand objCommand = new OleDbCommand(strDELETE, objConnect);// Verilen silme işlemini yapıyoruz
objCommand.ExecuteNonQuery();
objConnect.Close(); // Veritabanı ile baglantıyı kapatıyoruz.
Response.Redirect(strURL);
}
catch (Exception objError)
{
outError.InnerHtml = "<b>Veritabanınıa baglantı hatası</b>.<br />" + objError.Message + "<br />" + objError.Source; //Hata varsa mesaj yazdırıyoruz.
}
}
}
Ve son olarak ta Mesajlar.aspx i olusturuyoruz.
Kod:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Mesajlar.aspx.cs" Inherits="Mesajlar" %>
<!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 id="Head1" runat="server">
<title>Mesajlar</title>
<script type="text/JavaScript" Language="JavaScript">
function Validate(theForm)
{
if (theForm.frmPost.value == "")
{
alert("Lütfen Mesajınızı Yazınız.");
theForm.frmPost.focus();
return (false);
}
return (true)
}
</script>
</head>
<body>
<form id="AddPosting" method="post" runat="server" onSubmit="return Validate(this)">
<h2> Basit forum</h2>
<div ID="KonuBasligi" Runat="server">
</div>
<p>
İlkbaşta Girilen Kullanıcı Adı İle Foruma Yeni Mesaj Ekliyoruz
</p>
<div id="Div1" runat="server">
<table cellpadding="5" cellspacing="1" border="0" class="DataTable">
<tr>
<td class="TableItem">
Mesaj Yazan :
<ASP:Label ID="FrmAdi" Runat="server"></ASP:Label>
<br />
Yeni mesaj : (Maksimum 255 Karakter )
<br />
<ASP:TextBox id="frmPost" runat="server" TextMode="MultiLine" MaxLength="255" Columns="40" Rows="5"></ASP:TextBox>
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" align="right">
<ASP:Button onClick="DoAddPost" Text="Ekle" Runat="server" id="Button1" CssClass="button"></ASP:Button>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br />
<a href="Konular.aspx">Konulara Geri Dön</a>
<br />
</div>
<div id="outError" runat="server">
<ASP:DataGrid EnableViewState="False" DataKeyField="MesajID" id="DataGrid1" runat="server" AutoGenerateColumns="False" HeaderStyle-CssClass="TableHeader" AlternatingItemStyle-CssClass="AltTableItem" ItemStyle-CssClass="TableItem" CellPadding="4" ForeColor="#333333" GridLines="None">
<HeaderStyle BackColor="#507CD1" font-Bold="True" ForeColor="White"></HeaderStyle>
<PagerStyle NextPageText="Next >" PrevPageText="< Prev" BackColor="#2461BF" ForeColor="White"
HorizontalAlign="Center"></PagerStyle>
<AlternatingItemStyle BackColor="White"></AlternatingItemStyle>
<ItemStyle BackColor="#EFF3FB"></ItemStyle>
<Columns>
<ASP:TemplateColumn HeaderText="Yazar">
<ItemTemplate>
<ASP:Label Runat='server' ID="lblAdminLink">
<%# DataBinder.Eval(Container.DataItem, "MesajiYaratan") %>
<% if (Session["admin"] == "yes")
{ %>
<br>
<a href="KayitSilme.aspx?S=<%# Request.QueryString["S"] %>&TID=<%# Request.QueryString["ID"] %>&T=P&ID=<%# DataBinder.Eval(Container.DataItem, "MesajID") %>">
Sil</a>
<% }
%>
<br>
</ASP:Label>
</ItemTemplate>
</ASP:TemplateColumn>
<ASP:BoundColumn DataField="Mesaj" HeaderText="Mesaj"></ASP:BoundColumn>
<ASP:BoundColumn DataField="MesajTarihi" HeaderText="Yazıldıgı Tarih"></ASP:BoundColumn>
</Columns>
<FooterStyle BackColor="#507CD1" font-Bold="True" ForeColor="White" />
<EditItemStyle BackColor="#2461BF" />
<SelectedItemStyle BackColor="#D1DDF1" font-Bold="True" ForeColor="#333333" />
</ASP:DataGrid>
</div>
</form>
</body>
</HTML>
Mesajlar.aspx.cs ye aşağıdaki kodu yazıyoruz.
Kod:
using System;
using System.Data;
using System.Data.OleDb;
using System.Configuration;
using System.Collections;
using System.web;
using System.web.Security;
using System.web.UI;
using System.web.UI.WebControls;
using System.web.UI.WebControls.WebParts;
using System.web.UI.HtmlControls;
public partial class Mesajlar : System.web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
if (Session["KullaniciAdi"] == null)
{
Response.Redirect("default.aspx");
}
FrmAdi.Text = "<b>" + Session["KullaniciAdi"].ToString() + "</b>";
ListMesajlar();
}
private void ListMesajlar()
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + server.MapPath(".\\db\\forum.mdb");
string strSelect = "SELECT * ";
strSelect += "FROM Mesajlar ";
strSelect += "WHERE KonuID=" + Request.QueryString["ID"] + " ";
strSelect += "ORDER BY MesajTarihi DESC;";
try
{
OleDbConnection objConnect = new OleDbConnection(strConnect);
objConnect.Open();
OleDbCommand objCommand = new OleDbCommand(strSelect, objConnect);
OleDbDataReader objDataReader;
objDataReader = objCommand.ExecuteReader();
DataGrid1.DataSource = objDataReader;
DataGrid1.DataBind();
if (DataGrid1.Items.Count == 0)
{
outError.InnerHtml = "Henüz Mesaj Yazılmamış..";
}
KonuBasligi.InnerHtml = "<h4>" + Request.QueryString["S"] + "</h4>";
objDataReader.Close();
objConnect.Close();
}
catch (Exception objError)
{
outError.InnerHtml = "<b>* Veritabanına baglantı hatası</b>.<br />" + objError.Message + "<br />" + objError.InnerException + "<P>" + objError.Source + "<P>" + objError.StackTrace + "<P>" + strSelect;
return;
}
}
public string AdminVisible()
{
if (Session["admin"] == "yes")
{
return " Visible=true";
}
else
{
return "";
}
}
public void DoAddPost(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0 ;Data Source=" + server.MapPath(".\\db\\forum.mdb");
string strInsert = "INSERT INTO Mesajlar (Mesaj, MesajiYaratan, KonuID) VALUES ('" + frmPost.Text + "', '" + Session["KullaniciAdi"].ToString() + "', " + Request.QueryString["ID"] + " )"; try
{
OleDbConnection objConnect = new OleDbConnection(strConnect);
objConnect.Open();
OleDbCommand objCommand = new OleDbCommand(strInsert, objConnect);
objCommand.ExecuteNonQuery();
objConnect.Close();
Response.Redirect("Mesajlar.aspx?ID=" + Request.QueryString["ID"] + "&S=" + Request.QueryString["S"], true);
}
catch (Exception objError)
{
outError.InnerHtml = "<b>* Veritabanına baglantı hatası</b>.<br />"
+ objError.Message + "<br />" + objError.Source;
return;
}
}
}
En son olarak ta db klasörünün içine bu
access dosyanı kopyalıyoruz..
Güvenlik ayarlarına girilmemiştir çünkü eğitim amaçlı yazılmıştır..
Umarım Yardımcı Olabilmişimdir..