Zoque.Forum
»
Basit Bir Forum (ASP.NET + Access)
|
| Veritabanları MySQL , MSSQL, SQL, Access, Oracle |
![]() |
|
|
LinkBack | Seçenekler |
|
|
#1 (permalink) |
|
Üyelik Tarihi: 05.01.2006
Yer: İstanbul
Yaş: 22
Mesaj: 290
|
Basit Bir Forum (ASP.NET + Access)
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> 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"); } } } 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> 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; } } } 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> 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; } } } 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> 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. } } } 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> 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..
__________________
Hayattan Zevk, Yaptığı işten Şevk almıyor... Üç, Beş kişinin yaptıgı işi, Bir kişi alıp çalıyorsa o sektör ölü demektir. |
|
|
|
|
|
#3 (permalink) | |
|
Re: Basit Bir Forum (ASP.NET + Access)
Çok güzel tebrikler. Fakat bence bu bir makale değil. Neden; açıklama yok sadece kod verilmiş. Tüm sayfada yazılanların altta ki .zip dosyasından farkı nedir?
Açıklamalar Alıntı:
Umarım eleştirilerimi olumlu yönde algılarsınız.
__________________
Kişisel bir şey |
||
|
|
|
|
|
#4 (permalink) | |
|
Üyelik Tarihi: 05.01.2006
Yer: İstanbul
Yaş: 22
Mesaj: 290
|
Re: Basit Bir Forum (ASP.NET + Access)
Alıntı:
Özellikle "Kodlarla ilgili gerekli açıklamalar yanlarına yazılmıştır" diye yazdım. Çünkü her fonksiyonu tek tek açıklamaya kalkışsam en az 4-6 sayfalık bir yazı ortaya çıkacak böylece okuyucu ya programlama dersi vermiş olacagım. Düşündüm ki okuyucuya en kısa yoldan olayın mantıgını ve oluşum sürecini anlatmak' tı..
__________________
Hayattan Zevk, Yaptığı işten Şevk almıyor... Üç, Beş kişinin yaptıgı işi, Bir kişi alıp çalıyorsa o sektör ölü demektir. |
|
|
|
|
|
|
#5 (permalink) |
|
Re: Basit Bir Forum (ASP.NET + Access)
Doğru aslında büyük bir uygulamanın (forum sonuçta) makale olarak anlatılması olsa olsa bu kadar olur. Ama yine de sanırım biraz daha anlatmak gerekiyor bazı şeyleri.
Tebrik ederim. Yazılarınıza devam etmeniz dileğiyle...
__________________
Kişisel bir şey |
|
|
|
|
|
|
#6 (permalink) |
|
Üyelik Tarihi: 05.11.2005
Yer: Istanbul
Yaş: 28
Mesaj: 486
|
Re: Basit Bir Forum (ASP.NET + Access)
Gerçekten çok güzel olmuş; tebrikler.
Devamını düşünüyorsanız, Namespace' leri ve kullanımlarını seçmenizi tavsiye/rica ederim.. ufak örneklerle birlikte.. Örn : "System.Globalization" , "HtmlControls" vb... |
|
|
|
|
|
#7 (permalink) |
|
Üyelik Tarihi: 17.11.2006
Yer: SAKARYA
Mesaj: 4
|
Re: Basit Bir Forum (ASP.NET + Access)
PAYLAŞIM için teşekkürler.
Peki şu veritabanının türkçe halini niye vermediniz Örneğin kodlarda KonuBasligi veritabanında TopicSubjectHal böyle olunca bi scripti editleyip koymuşsunuz buraya diye düşünüyorum. Başarılar. |
|
|
|
Zoque'a hoşgeldiniz!