Merhaba arkadaşlar?
Bu makalede bütün işlemleri tek tek anlatmayacağım. Veritabanı önceki makalede kullandığımız ile aynı veritabanıdır. Nasıl oluşturacağınızı bilmiyorsanız bir önceki makaleyi okumalısınız.
İlk olarak bu makalede neler yapacağımızı kısaca özetleyeceğim;
1. Yeni üye kaydı
2. Parolamı unuttum
3. Üye giriş işlemi
4. Üye çıkış işlemi
5. Aktif kullanıcı sayısını öğrenme
Yeni projemizdeki sayfalar bu şekildedir. Bu sayfaları eklemek için Web Site > Add New Item adımlarını kullanabilirsiniz.
İlk olarak veritabanımızda nelerimiz olduğuna bir göz atalım.
Gördüğümüz gibi 5 adet alanımız var.
Şimdi Anasayfamızdan (Default.aspx) başlayarak neler yaptığımıza bakalım.
Default.aspx sayfamızın tag?leri;
<%@ 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 runat="server">
<title>Asp.Net ile Üyelik Sistemi</title>
</head>
<body>
<form id="icerik_form" runat="server">
<div>
<table align="center" width="600">
<tr>
<td height="100" style="text-align: center; background-color: #CCCCCC;">
<h1>
Asp.Net ile Üyelik Sistemi</h1>
</td>
</tr>
<tr>
<td height="250" style="text-align: center; font-size: x-large; color: #FFFFFF; background-color: #FF0000">
Sayın
<asp:Label ID="lblAktifKullanici" runat="server"></asp:Label>
, sitemize hoşgeldiniz.
</td>
</tr>
<tr>
<td style="text-align: center; font-size: x-large; color: #FFFFFF; background-color: #CCCCCC">
<asp:Button ID="btnCikisYap" runat="server" OnClick="btnCikisYap_Click" Text="Çıkış Yap" />
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Bu tag?lerin oluşturduğu sayfamız şu şekildedir.
Default.aspx.cs kodlarımız;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Eğer herhangi bir kullanıcı yok ise
if (Session["UyeID"] == null)
{
// Üye giriş sayfasına yönlendir
Response.Redirect("GirisYap.aspx");
}
else
{
// Varsa ekrana adını soyadını yaz
lblAktifKullanici.Text = Session["AdiSoyadi"].ToString();
}
}
protected void btnCikisYap_Click(object sender, EventArgs e)
{
// Bütün Session değerlerini sıfırlayarak kullanıcının sistemden çıkış yapması sağlanır
Session.Abandon();
}
}
Kullanıcı Giriş (GirisYap.aspx) sayfamız;
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GirisYap.aspx.cs" Inherits="GirisYap" %>
<!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>Giriş Yap</title>
</head>
<body>
<form id="icerik_form" runat="server">
<div>
<table align="center">
<tr>
<td colspan="2" height="50" style="text-align: center; background-color: #CCCCCC">
<h3>
Asp.Net ile Üyelik Sistemi<br />
Giriş Sayfası</h3>
</td>
</tr>
<tr>
<td>
Kullanıcı Adı:
</td>
<td>
<asp:TextBox ID="txtKullaniciAdi" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td>
Parola:
</td>
<td>
<asp:TextBox ID="txtParola" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center">
<asp:Button ID="btnGirisYap" runat="server" Text="Giriş Yap" OnClick="btnGirisYap_Click" />
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center">
<asp:Label ID="lblKullaniciKontrol" runat="server"></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Oluşan sayfamız;
GirisYap.aspx.cs kodlarımız;
using System.Data.SqlClient;
public partial class GirisYap : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// Eğer zaten bir kullanıcı giriş yapmış ise Default sayfasına yönlendir
if (Session["UyeID"] != null)
{
Response.Redirect("Default.aspx");
}
}
protected void btnGirisYap_Click(object sender, EventArgs e)
{
// Veritabanı bağlantısı için SqlConnection nesnemizi oluşturuyoruz
SqlConnection baglanti = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UyelikSistemi.mdf;Integrated Security=True;User Instance=True");
// Gerekli sorgumu yapabilmek için SqlCommand nesnemizi oluşturuyoruz
SqlCommand sorgu = new SqlCommand("SELECT * FROM Uyeler WHERE KullaniciAdi=@KullaniciAdi AND Parola=@Parola", baglanti);
// Burada sorgumuza verileri parametreler ile gönderiyoruz
sorgu.Parameters.Add("@KullaniciAdi", SqlDbType.VarChar).Value = txtKullaniciAdi.Text;
sorgu.Parameters.Add("@Parola", SqlDbType.VarChar).Value = txtParola.Text;
// Veritabanı bağlantımızı açıyoruz
baglanti.Open();
SqlDataReader oku = sorgu.ExecuteReader(CommandBehavior.CloseConnection);
// Eğer bir kayıt okunuyorsa
if (oku.Read())
{
// Okunan verileri Session'larda sakla
Session["UyeID"] = oku["UyeID"].ToString();
Session["AdiSoyadi"] = oku["Adi"].ToString() + " " + oku["Soyadi"].ToString();
// Giriş sayfasına yönlendir
Response.Redirect("Default.aspx");
}
else // Böyle bir kayıt okunamadıysa
{
lblKullaniciKontrol.Text = "Böyle bir kullanıcı bulunamadı !!!";
}
oku.Close(); // Reader nesnesini kapat
baglanti.Close(); // Bağlantı nesnesini kapat
}
}
Sırada Kullanıcı Kaydı(KullaniciKaydi.aspx) sayfamız var;
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="KullaniciKaydi.aspx.cs" Inherits="KullaniciKaydi" %>
<!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>Kullanıcı Kaydı</title>
</head>
<body>
<form id="icerik_form" runat="server">
<div>
<table align="center">
<tr>
<td colspan="3" height="50" style="text-align: center; background-color: #CCCCCC">
<h3>
Asp.Net ile Üyelik Sistemi<br />
Kullanıcı Kaydı</h3>
</td>
</tr>
<tr>
<td>
Kullanıcı Adı:
</td>
<td>
<asp:TextBox ID="txtKullaniciAdi" runat="server"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="kullaniciadiRFV" runat="server" ControlToValidate="txtKullaniciAdi"
ErrorMessage="(*)"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>
Parola:
</td>
<td>
<asp:TextBox ID="txtParola" runat="server"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="parolaRFV" runat="server" ControlToValidate="txtParola"
ErrorMessage="(*)"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>
Parola Tekrar:
</td>
<td>
<asp:TextBox ID="txtParolaTekrar" runat="server"></asp:TextBox>
</td>
<td>
<asp:CompareValidator ID="parolakontrolCV" runat="server" ControlToCompare="txtParola"
ControlToValidate="txtParolaTekrar" ErrorMessage="(*)"></asp:CompareValidator>
</td>
</tr>
<tr>
<td>
Adı:
</td>
<td>
<asp:TextBox ID="txtAdi" runat="server"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="adRFV" runat="server" ControlToValidate="txtAdi"
ErrorMessage="(*)"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>
Soyadı:
</td>
<td>
<asp:TextBox ID="txtSoyadi" runat="server"></asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="soyadRFV" runat="server" ControlToValidate="txtSoyadi"
ErrorMessage="(*)"></asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td colspan="3" style="text-align: center">
<asp:Button ID="btnKaydol" runat="server" OnClick="btnKaydol_Click" Text="Kaydol" />
</td>
</tr>
<tr>
<td colspan="3" style="text-align: center">
<asp:Label ID="lblMesaj" runat="server"></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Sayfamızın görüntüsü;
Bu sayfada farklı olarak Validator kontrolleri kullandık. Bundan uzun uzun bahsetmeyeceğim çünkü bu ayrı bir makale gerektirir. Ama ne işe yaradığını söyleyim. Verilerin hepsi girilmiş mi girilmemiş mi? Değerler eşit mi değil mi? Belli aralıklarda veri girişi yapmamızı verileri kontrol etmemizi sağlıyor. Bunlar sağlanmadığı sürece sayfada işlem yapamıyoruz. Bunu da araştırmanız gerekecek veya bir makale ile ben açıklayacağım ;)
KullaniciKaydi.aspx.cs kodlarımız;
using System.Data.SqlClient;
public partial class KullaniciKaydi : System.Web.UI.Page
{
protected void btnKaydol_Click(object sender, EventArgs e)
{
// Veritabanı bağlantısı için SqlConnection nesnemizi oluşturuyoruz
SqlConnection baglanti = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UyelikSistemi.mdf;Integrated Security=True;User Instance=True");
// Gerekli sorgumu yapabilmek için SqlCommand nesnemizi oluşturuyoruz
SqlCommand sorgu = new SqlCommand("INSERT INTO Uyeler(KullaniciAdi,Parola,Adi,Soyadi) VALUES(@KullaniciAdi,@Parola,@Adi,@Soyadi)", baglanti);
// Burada sorgumuza verileri parametreler ile gönderiyoruz
sorgu.Parameters.Add("@KullaniciAdi", SqlDbType.VarChar).Value = txtKullaniciAdi.Text;
sorgu.Parameters.Add("@Parola", SqlDbType.VarChar).Value = txtParola.Text;
sorgu.Parameters.Add("@Adi", SqlDbType.VarChar).Value = txtAdi.Text;
sorgu.Parameters.Add("@Soyadi", SqlDbType.VarChar).Value = txtSoyadi.Text;
// Veritabanı bağlantımızı açıyoruz
baglanti.Open();
sorgu.ExecuteNonQuery();
lblMesaj.Text = "Kayıt yapıldı !!!";
baglanti.Close(); // Bağlantı nesnesini kapat
}
}
Parolamı Unuttum (ParolamiUnuttum.aspx) sayfamız;
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ParolamiUnuttum.aspx.cs"
Inherits="ParolamiUnuttum" %>
<!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>Parolamı Unuttum</title>
</head>
<body>
<form id="icerik_form" runat="server">
<div>
<table align="center">
<tr>
<td colspan="2" style="text-align: center; background-color: #CCCCCC">
<h3>
Asp.Net ile Üyelik Sistemi<br />
Parolamı Unuttum</h3>
</td>
</tr>
<tr>
<td>
Kullanıcı Adı:
</td>
<td>
<asp:TextBox ID="txtKullaniciAdi" runat="server"></asp:TextBox>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center">
<asp:Button ID="btnParolaGonder" runat="server" OnClick="btnParolaGonder_Click" Text="Parolamı Gönder" />
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center">
<asp:Label ID="lblMesaj" runat="server"></asp:Label>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Ekran görüntümüz;
ParolamiUnuttum.aspx.cs kodlarımız;
using System.Data.SqlClient;
public partial class ParolamiUnuttum : System.Web.UI.Page
{
protected void btnParolaGonder_Click(object sender, EventArgs e)
{
// Veritabanı bağlantısı için SqlConnection nesnemizi oluşturuyoruz
SqlConnection baglanti = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\UyelikSistemi.mdf;Integrated Security=True;User Instance=True");
// Gerekli sorgumu yapabilmek için SqlCommand nesnemizi oluşturuyoruz
SqlCommand sorgu = new SqlCommand("SELECT * FROM Uyeler WHERE KullaniciAdi=@KullaniciAdi", baglanti);
// Burada sorgumuza verileri parametreler ile gönderiyoruz
sorgu.Parameters.Add("@KullaniciAdi", SqlDbType.VarChar).Value = txtKullaniciAdi.Text;
// Veritabanı bağlantımızı açıyoruz
baglanti.Open();
SqlDataReader oku = sorgu.ExecuteReader(CommandBehavior.CloseConnection);
// Eğer bir kayıt okunuyorsa
if (oku.Read())
{
// Burada ben kullanıcı adını gönderip parolayı istedim
// Gelen veriyide Label'a yazdırdım
// Tabiki siz bu kadar basit yapmayın
// Örneğin; kullanıcı mail adresini girsin eğer böyle bir kayıt varsa
// okunan parolayı kullanıcıya mail olarak gönderin
// Ben bu kısma giremeyeceğim bunun için internette bolca örnek var
// "Asp.net ile mail gönderme" diyerek aratın !!!
lblMesaj.Text = oku["Parola"].ToString();
}
else // Böyle bir kayıt okunamadıysa
{
lblMesaj.Text = "Böyle bir kullanıcı bulunamadı !!!";
}
oku.Close(); // Reader nesnesini kapat
baglanti.Close(); // Bağlantı nesnesini kapat
}
}
Ve son olarak Global.asax dosyamıza gelelim;
<%@ Application Language="C#" %>
<script RunAt="server">
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
}
void Application_End(object sender, EventArgs e)
{
// Code that runs on application shutdown
}
void Application_Error(object sender, EventArgs e)
{
// Code that runs when an unhandled error occurs
}
void Session_Start(object sender, EventArgs e)
{
// Session değeri başladığında yani Session'a bir değer atandığında buradaki kodlar çalışacak
// Burada da yaptığımız işlem ziyaretçi sayısını 1 artırmak
// Kullanıcı sayısınıda Application nesnesinde saklıyoruz
// Bunun nedeni ise Applicaion nesnesi sistemdeki tüm kullanıcıların aynı anda kullanabileceği bir nesnes olmasıdır
// Yani bütün kullanıcılar tek bir nesne ile çalışır
// Kullanıcı sayısınıda ekranda bi yere yazdırmak istiyorsanız
// Ör: Label1.Text=Application["ToplamZiyaretciSayisi"].ToSring() demeniz yeterlidir
if (Application["ToplamZiyaretciSayisi"] == null)
Application["ToplamZiyaretciSayisi"] = 1;
else
{
int ziyaretcisayisi = (int)Application["ToplamZiyaretciSayisi"];
ziyaretcisayisi += 1;
Application["ToplamZiyaretciSayisi"] = ziyaretcisayisi;
}
// Kullanıcının sistemde kalacağı süre. (60 dakida)
Session.Timeout = 60;
}
void Session_End(object sender, EventArgs e)
{
// Session değerini sıfırladığımızda çalışacak kodları buraya yazıyoruz
// Bu değer sıfırlandığında kullanıcı sistemden çıkmış olacak
// Haliyle kullanıcı sayısını 1 eksiltiyoruz
int ziyaretcisayisi = (int)Application["ToplamZiyaretciSayisi"];
ziyaretcisayisi -= 1;
Application["ToplamZiyaretciSayisi"] = ziyaretcisayisi;
Response.Redirect("GirisYap.aspx");
}
</script>
Bu dosyamızın veya sayfamızın diyelim sayfada değilde herneyse ;) eklediğimizde içeriği önceden belirlenmiş halde gelir. Sadece aralardaki blokları biz dolduruyoruz.
Bu makelemizinde burada sonuna geldik. Neden daha fazla ayrıntılı anlatmadınız diyorsanız bunların çoğundan bir önceki makalede bahsemiştim. Onu okumanızı tavsiye ederim...