edit : 3Farklı üyelik seviyeli ve e-posta doğrulamalı bir üyelik sistemi.

İlk önce index.php sayfamızı oluşturalım.

<?php
@session_start();

# Eğer giriş yapılmamış ise ziyaretçiye giriş ve üyelik formunu gösterelim.
if(!isset($_SESSION['kullanici']))
{
?>
<html>
<head>
<title>Giriş</title>
<style type="text/css">
table {
font-family: Arial;
font-size: 9pt;
}
</style>
</head>
<body>

<form action="giriskontrol.php" method="post">
<table border="0">
<tr>
<td>Kullanıcı:</td>
<td><input type="text" name="kullanici"></td>
</tr>

<tr>
<td>Şifre:</td>
<td><input type="password" name="sifre"></td>
</tr>

<tr>
<td></td>
<td><input type="submit"></td>
</tr>

<tr>
<td><a href="yeni_sifre.html">Şifremi Unuttum</a></td>
<tr>
<td><a href="kayit.html">Üye ol</a></td>
</tr>

</table>
</form>
</center>
</body>
</html>
<?php
}
# Eğer giriş yapılmış ise üyeyi tanıyalım.
else
{
  echo "Hoşgeldiniz,  " . $_SESSION['kullanici']."<br><br>";
  echo "Kullanıcı seviyeniz, " . $_SESSION['kullanici_seviye']."<br><b>Bu bölümleri görebilirsiniz.</b><br>";
  # Seviye "0" ise
  if($_SESSION['kullanici_seviye'] == 0)
  {
    echo 'HTML,ASP,PHP';
  }
   # Seviye "3" ise
  if($_SESSION['kullanici_seviye'] == 3)
  {
    echo 'Asp.net,C#, Java';
  }
  echo '<br><br>Çıkış yapmak için <a href="cikis.php">TIKLA</a>';
}

?>
index.php de sayfamıza gelen kişi ziyuaretçi ise giriş ve kayıt linklerini eğer üye ve giriş yapmış ise session ile görmesi gereken sayfaları gösteriyoruz.geliştirmek size kalmış.


Ardından giriskontrol.php sayfamızı inceliyoruz.

<?php
@session_start();

include("fonksiyonlar.php");

db_baglanti();

# Formdan veri çekiyoruz

$kullanici = addslashes($_POST['kullanici']);
$sifre = addslashes($_POST['sifre']);

# Form Kontrolleri

if((!$kullanici) || (!$sifre))
{
  echo '<font color="red">Lütfen tüm alanları doldurun.</font>';
  include("index.php");
}
else
{
# Parolayı Shal olarak alıyoruz
$sifre2 = sha1($sifre);

# Kullanıcı adı ve şifre atifmi kontrolü yapıyoruz.

$sql = mysql_query("select * from kullanicilar where kullanici='$kullanici' and sifre='$sifre2' and aktiflik='1'");
$sql2 = mysql_num_rows($sql);

if ($sql2 > 0)
{
  while($yaz = mysql_fetch_array($sql))
  {

  $_SESSION['kullanici'] = $kullanici;
# Databaseden kullanıcı seviyesini alıp sesiona atıyoruz
  $_SESSION['kullanici_seviye'] = $yaz['kullanici_seviye'];

  header("Location: index.php");
}
}
else
{
  echo '<font color="red">Kullanıcı adı ve parola yanlış, yada hesabınızı aktif etmediniz. !</font>';
}
}
?>
Kontroller ve onay sayfası için

<?php

include ("fonksiyonlar.php");

# Bağlantı Oluştur

db_baglanti();

# Formdan verileri alalım

$ad = stripslashes($_POST['ad']);
$kullanici = stripslashes($_POST['kullanici']);
$sifre = stripslashes($_POST['sifre']);
$sifre2 = stripslashes($_POST['sifre2']);
$email = stripslashes($_POST['email']);
$hakkinda = stripslashes($_POST['hakkinda']);

# Kontrol Edelim

if((!$ad) || (!$kullanici) || (!$sifre) || (!$sifre2) || (!$email))
{
  echo '<font color="red">Gerekli bir bölümü boş bıraktınız.</font>';
  if(!$ad)
  {
    echo '<font color="red">Ad soyadı boş bıraktınız.</font>';
  }
  if(!$kullanici)
  {
    echo '<font color="red">Kullanıcı adını boş bıraktınız.</font>';
  }
  if(!$sifre)
  {
    echo '<font color="red">Þifre alanını boş bıraktınız.</font>';
  }
  if(!$sifre2)
  {
    echo '<font color="red">Þifrenizi tekrar yazmadınız.</font>';
  }
  if($sifre != $sifre2)
  {
    echo '<font color="red">Şifreler uyuşmuyor.</font>';
  }
  if(!$email)
  {
    echo '<font color="red">Emaili alanını boş bıraktınız.</font>';
  }
  include("kayit.html");
  exit;
}
# Yazılın kullanıcı adı yada mail daha önce alınmışmı bakalım.

$email_kontrol = mysql_query("select email from kullanicilar where email='$email'");
$kullanici_kontrol = mysql_query("select kullanici from kullanicilar where kullanici='$kullanici'");

# Sonucu
$email_kontrol2 = mysql_num_rows($email_kontrol);
$kullanici_kontrol2= mysql_num_rows($kullanici_kontrol);

if(($email_kontrol2 > 0) || ($kullanici_kontrol2 > 0))
{
  echo '<font color="red">Hata oluştu.</font>';
  
  if($email_kontrol2 > 0)
  {
    echo '<font color="red">Bu email adresi zaten kullanılıyor.</font>';
    unset($email);
  }
  if($kullanici_kontrol2 > 0)
  {
    echo '<font color="red">Bu kullanıcı adı zaten kullanılıyor.</font>';
    unset($kullanici);
  }
    include("kayit.html");
    exit;
}


$rastgele_sayi = rastgelesayi();
$sifre2 = sha1($sifre);

#Girilen Bilgileri Dbye yazdırıyoruz.

$sql = "insert into kullanicilar (ad_soyad, kullanici, sifre, email, hakkinda, akod, kayit_tarih) 
 values('$ad', '$kullanici', '$sifre2', '$email', '$hakkinda', '$rastgele_sayi', now())";
$sql2 = mysql_query($sql);

#Dbye yazdırırken bir hata oluşursa;

if(!$sql2)
{
  echo 'Bir hata oluştu.Lütfen daha sonra tekrar deneyin.';
}
else
{
$kullanici_id = mysql_insert_id();

# Kullanıcıya hesabını etkinleştirmesi için mail gönderiyoruz.

$konu = "Üyelik Onayı";
$mesaj = " Sayın $ad

Üyelik işleminizi tamamlamak için aşağıdaki linke tıklayın ya da adres çubuğuna kopyalayın.

http://www.10bir.net/aktifle.php?id=$kullanici_id&akod=$rastgele_sayi

Giriş Bilgileriniz;

Kullanıcı adı: $kullanici
Şifre: $sifre

Teşekkürler.";

mail($email, $konu, $mesaj, "From: Domain.com<admin@domain.com>");

echo 'Kullanıcı bilgileriniz email adresinize gönderildi.Üyeliğizi onaylamak için lütfen email adresinizdeki
    bağlantıya tıklayın.Aksi halde siteye giriş yapamazsınız .<br />';
    
echo 'Anasayfa için <a href="index.php">tıklayın</a>';

}

?>
ardından üye onay sayfası

<?php

include ("fonksiyonlar.php");

db_baglanti();

# Linkden bilgileri çekelim.

$kullanici_id = $_REQUEST['id'];
$akod = $_REQUEST['akod'];

$sql = mysql_query("update kullanicilar SET aktiflik='1' where id='$kullanici_id' AND akod='$akod'");

$sql2 = mysql_query("select * from kullanicilar where id='$kullanici_id' AND akod='$akod' AND aktiflik='1'");

$kontrol = mysql_num_rows($sql2);

if($kontrol == 0)
{
 echo 'Hesabınız aktifleştirilemedii';
}
elseif($kontrol > 0)
{
echo 'Tebrikler üye olmayı başardın.';

include("index.php");

}
?>

Şifremi unutum sayfası

<?php
include("fonksiyonlar.php");

db_baglanti();

$email = $_POST['email'];
if(!$email)
    {
        echo "Lütfen kayıt olurken girdiğiniz mail adresini giriniz.";
        include ("yeni_sifre.html");
        exit();
    }
   #Email adresini kontrol et.
    $email_kontrol = mysql_query("select * from kullanicilar where email='$email'");
    $email_kontrol2 = mysql_num_rows($email_kontrol);
if($email_kontrol2 == 0)
  {
    echo '<font color="red">Girdiğiniz email adresi kayıtlı değil.</font>';
    unset($email);
   include ("yeni_sifre.html");
   exit();
   }
#Rastgele say üret
$rastgele_sayi = rastgelesayi();
#Rastgele üretilen sayıyı sha1 yap.
$yeni_sifre = sha1($rastgele_sayi);

# Sha1 olan şifreyi dbye kaydet, normal şifreyi maille kullancya gönder.
$sql = mysql_query("update kullanicilar set sifre='$yeni_sifre' where email='$email'");
$konu = "Þifre hatrlatma";
$mesaj = " Merhaba, bizden yeni şifre istemişsiniz.Buyrun

Yeni şifreniz: $rastgele_sayi

http://www.10bir.net/

Teşekkürler.";

mail($email, $konu, $mesaj, "From: Domain.com<admin@domain.com>");

echo 'Yeni şifreniz arzu ettiğiniz adrese gönderilmiştir.';

?>
Kullanılan Fonksiyonlar


<?php
# Db bağlantısı
function db_baglanti()
{
  $db_host = "localhost";
  $db_kullanici = "r10"; 
  $db_sifre = "123456";    
  $db_adi = "root";    

  $baglanti = mysql_connect($db_host, $db_kullanici, $db_sifre);
  mysql_select_db($db_adi, $baglanti);
  
  if(mysql_errno())
  {
    echo 'Veritabanına bağlanılamıyor ...';
    exit;
  }
}

# Rastgele sayı Oluştur.
function rastgelesayi() {
  $salt = "abchefghjkmnpqrstuvwxyz0123456789";
  srand((double)microtime()*1000000);
      $i = 0;
      while ($i <= 7) {
            $num = rand() % 33;
            $tmp = substr($salt, $num, 1);
            $pass = $pass . $tmp;
            $i++;
      }
      return $pass;
}

?>
ve çıkış sayfamız.

<?php
session_start();
if(!isset($_SESSION['kullanici']))
{
  echo 'Hayrola nerden ?';
}
else 
{
session_destroy();

header("Location: index.php");
}

?>
2 tanede html sayfamız var


Kayıt HTML

<html>
<head>
<title>Kayıt ol</title>
<style type="text/css">
table {
font-family: Arial;
font-size: 9pt;
}
</style>
</head>
<body>
<form action="uyepostala.php" method="post">
<table border="0">
<tr>
<td>Ad Soyad: </td>
<td><input type="text" name="ad"> *</td>
</tr>

<tr>
<td>Kullanıcı adı: </td>
<td><input type="text" name="kullanici"> *</td>
</tr>

<tr>
<td>Şifre: </td>
<td><input type="password" name="sifre"> *</td>
</tr>

<tr>
<td>Şifre tekrar: </td>
<td><input type="password" name="sifre2"> *</td>
</tr>

<tr>
<td>Email: </td>
<td><input type="text" name="email"> *</td>
</tr>

<tr>
<td>Hakkında: </td>
<td><textarea name="hakkinda" rows="10" cols="23"></textarea></td>
</tr>

<tr>
<td></td>
<td><input type="submit" onClick="javascript:this.form.submit();this.disabled=true;this.value='Gönderiliyor...';" value="G&ouml;nder"></td>
</tr>

</table>
</body>
</html>
Yenisifre html

<html>
<head>
<title>Şifremi Unuttum</title>
</head>
<body>
<form action="sifre_unuttum.php" method="post">
Email :<input type="text" name="email"><br  />
<input type="submit">
</form>
</body>
</html>

Takılan yapamayan olursa yazarsınız..

unutmadan sql i
-- phpMyAdmin SQL Dump
-- version 2.9.2
-- http://www.phpmyadmin.net
-- 
-- Anamakine: localhost
-- Üretim Zamanı: 15 Ağustos 2007 saat 23:28:54
-- Sunucu sürümü: 5.0.33
-- PHP Sürümü: 5.2.1
-- 
-- Veritabanı: `r10`
-- 

-- --------------------------------------------------------

-- 
-- Tablo yapısı: `kullanicilar`
-- 

CREATE TABLE `kullanicilar` (
  `id` int(25) NOT NULL auto_increment,
  `ad_soyad` varchar(25) collate latin1_general_ci NOT NULL default '',
  `kullanici` varchar(25) collate latin1_general_ci NOT NULL default '',
  `sifre` varchar(255) collate latin1_general_ci NOT NULL default '',
  `email` varchar(25) collate latin1_general_ci NOT NULL default '',
  `hakkinda` text collate latin1_general_ci NOT NULL,
  `kullanici_seviye` enum('0','1','2','3') collate latin1_general_ci NOT NULL default '0',
  `kayit_tarih` datetime NOT NULL default '0000-00-00 00:00:00',
  `akod` varchar(255) collate latin1_general_ci NOT NULL default '',
  `aktiflik` enum('0','1') collate latin1_general_ci NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

-- 
-- Tablo döküm verisi `kullanicilar`
-- 

INSERT INTO `kullanicilar` VALUES (1, 'volkan', 'bagcali', 'fa6977c99b809db68e1c56888ec38bd004719b39', 'volkan@dode.com.tr', 'r10.net', '0', '2007-08-15 23:26:08', 'ua8umew1', '0');


ekstra bir üyelik seviyesi eklenip db yapısı değiştirilmiştir.
özgem'li ... ((: