PHP+MySQL SİSTEMLER ÜYE SİSTEMİ

keserimsekerim

Katılımcı Üye
30 Haz 2015
306
0
Oncelikle merhaba cok aciklayici sekilde ogretecem

mysql kullandığımızı varsayarak kod örnekleyeceğim. Ama postgresql fln kullanan arkadaşlar da var ise bu dökümandaki algoritmayı izleyerek kolayca kendileri de kod yazabilirler. Aşağıda veritabanında kullanacağımız üye tablosuna ait veri yapısını import ederek kolayca oluşturabileceğiniz SQL sorgusunu koyuyorum, bu sorgudan hangi alanlar ve özelliklerinin neler olduğunu da kolayca görebilirsiniz.

Kod:
 01.   CREATE TABLE `uyeler` (
  02.  `no` int(10) NOT NULL auto_increment,
  03.  `kadi` varchar(50) NOT NULL default '',
  04.  `sifre` varchar(100) NOT NULL default '',
  05.   `izin` varchar(20) NOT NULL default '',
  06.   `adi` varchar(100) default NULL,
  07.   `eposta` varchar(255) default NULL,
  08.     PRIMARY KEY  (`no`)
  09.      ) ENGINE=MyISAM AUTO_INCREMENT=1 ;

gördüğünüz gibi basitçe 6 alanım var, burada no, izin, adi ve eposta alanları sistemin düzgün çalışması için şart olan alanlar değiller fakat üyeniz hakkında küçük bir bilgi tutmanızı sağlar. Eğer isterseniz buradaki alan sayınızı artırarak yeni üye detayları ekleyebilirsiniz. Mesela MSN adresi, web sitesi, ev adresi, cep telefonu, kimlik bilgileri mesleği falan


Şimdilik kayıtlı bir kullanıcının giriş yapmasını vae sayfalarda kullanının giriş yapıp yapmadığını yani oturumunu kontrol etmeyi göstereceğim. Bildiğiniz gibi kayıt işlemi basitçe bir formdan mysql'e veri kaydetme işlemi.. Buna dökümanın sonunda değineceğim.

__________________________________________________

Giriş işlemini yapcağımız bir form hazırlayın. Kullanıcı adı ve şifre giriş alanları olacak olan 2 input'luk bir form. “kadi” ve “sifre” gibi pratik alan adları belirlerseniz işiniz kolaylaşır. Bu formu giris.php diye bir işlem sayfanıza post methodu ile göndereceğiz. Şuna benzer bir form olacaktır :​



Kod:
01.     <form name="giris" action="giris.php" method="post">
 02.  <table cellpadding="8" cellspacing="0" align="center">
03.      <tr>
04.     <td width="100">Kullanıcı Adı</td>
05.       <td><input type="text" name="kadi"></td>
06.     </tr>
07.     <tr>
08.      <td width="100">Şifre</td>
09.       <td><input type="password" name="sifre"></td>
10.     </tr>
11.   <tr>
12.       <td colspan="2" align="right">
13.        <input type="submit" value="Giriş">
14.      </td>
15.    </tr>
16.  </table>
18.  </form>


Giriş işlemi sayfamızın (giris.php) koduna bakacak olursak :

Kod:
  <?php
# mysql baglantisi, sesion_start yapilmis varsayiyoruz
# bilgiler
  $kadi  = $_POST["kadi"];
  $sifre = $_POST["sifre"];
# kullanici bilgisi alalim
  $sorgu = mysql_query("select sifre from uyeler where kadi = '".$kadi."'");
  if( mysql_num_rows($sorgu) != 1 ){
    print '**********alert("Kullanıcı bulunamadı!");history.back(-1);</script>';
    exit;
  }else{
    # veriyi alıyoruz
      $bilgi = mysql_fetch_assoc($sorgu);
  }
# sifre eslestirmesi
  if( md5( trim($sifre) ) != $bilgi["sifre"] ){
    print '**********alert("Yanlış şifre girdiniz!");history.back(-1);</script>';
    exit;
  }
# başarılı giriş yapıldı
# oturuma kaydedip anasayfaya gidelim
  $_SESSION["giris"] = md5( "kullanic_oturum_" . md5( $bilgi["sifre"] ) . "_ds785667f5e67w423yjgty" );
  $_SESSION["kadi"]  = $kadi;
?>
**********
  alert("Başarıyla giriş yaptınız! Şimdi anasayfaya yönlendiriliyorsunuz.");
  window.top.******** = './';
</script>

gördüğünüz gibi kontrol kısmında çok karmaşık bir kod yok. MySQL'den kullanıcıya ait veri alıyoruz. Eğer gelen kayıt kümesinin boyutu 1 değilse üye adı yok demektir. Hata veriyoruz. Eğer 1 ise kayıt kümesini $bilgi dizisine alıyoruz. Alt kısımda da girilen şifrenin md5'ini veritabanındaki string ile karşılaştırıyoruz. Çünkü veritabanında şifrelerimizi md5'leyip saklıyoruz. Çünkü birisi veritabanımızı araklarsa md5'i çözemesin diye. Üye bilgilerinin güvenliğini sağlamış oluyoruz.

En altta ise giriş kontrolü için oturuma 2 değişken attım birisi şifre ile oluşturulmuş karışık bir cümlenin md5'li hali. Bunu giriş kontrolünde oturumda olup olmadığını kontrol etmek için kullanacağız. Sadece kullanıcı adı kullanmamamın nedeni ise sunucu yönetimindeki birinin oturumları oynayıp giriş yapmış kullanıcı hakkını değiştirememesi için oldukça basit bir engel o kadar. İsterseniz daha karmaşık kriptografik anahtarlar da oluşturabilirsiniz. Bu sitede sadece anahtar tutulur mesela. Oturum bilgileri veritabanında saklanır.. Bu tarz gelişmiş şeyler için de beyin fırtınası yapıp güzel şeyler yazabilirsiniz.

Şimdi giriş yapıldıktan sonra anasayfa'ya yönlendirildi üye, peki biz sayfalarımızda oturumu gezen misafirin üye olup olmadığını nasıl anlayacağız?


Üye kontrolü, üye oturumu yönetimi​

Benim site geliştirme yoluma göre ilk önce sitenin statik sayfasını hazırlayıp parçalardık hatırlarsanız. Ve her işlem/modül dosyamızın başında mysql.php veya ayar.php gibi bir include edilen dosyamız vardır. İşte buna giris_kontrol.php diye bir dosya daha ekleyin. Yani; üye'lere ait bilgileri alacağınız sayfalarda (üye kontrolü, üye alanları fln) giris_kontrol.php diye bir php include ettirin. Her sayfanıza. giris_kontrol.php dosyamızın kodunu verip açıklayayım :


Kod:
   <?php
# uye oturum degiskenleri
  $giris_yapilmis = false;
  $uye = false;
# kontrol ederek bilgileri dogrulayalim
  if( !empty($_SESSION["giris"]) && !empty($_SESSION["kadi"]) ){
  
    # kulanici bilgisini alalim
      $sorgu = mysql_query("select * from uyeler where kadi='".$_SESSION["kadi"]."'");
      if( mysql_num_rows($sorgu) == 1 ){
      
        $uye = mysql_fetch_assoc($sorgu);
        # anahtar kontrol
          if( $_SESSION["giris"]  ==  md5( "kullanic_oturum_" . md5( $uye["sifre"] ) . "_ds785667f5e67w423yjgty" ) ){
            $giris_yapilmis = true;
          }else{
            # giris yanlis. $uye'yi silelim
            $uye = false;
          }
      }
  }
?>

Tabiki bu sayfadan önce mysql ve ayar dosyanızın fln include edildiğini ve session_start yapılmış olduğunu düşünüyoruz çünkü bu sayfayı her sayfanın başında include ediyoruz.

Oturumdaki kadi değişkeni boş değilse veritabanından bilgileri alıyoruz. Eğer kullanıcı yoksa oturum açılmıyor zaten. Eğer şifre ile oluşturulan karışık cümlenin md5'i oturumdaki giris degişkeninin içeriğine eşitse bizim mantıksal koyduğumuz anahtar da doğrudur. Şimdi “giris_yapilmis” değişkenini true yapıyoruz ve $uye dizisine mysql sonuç kümesini atıyoruz. Neden bunu yapıyoruz çünkü, sayfalarımızda doğrudan $giris_yapilmis'i if yapılarımızda giriş yapılmış yapılmamış olduğunu hızlıca alabileceğiz. Mesela üyelere özel bir sayfanız var ise bu sayfanın başında;



Kod:
      if( !$giris_yapilmis ){
  print 'Bu sayfa üyelere özeldir! Lütfen giriş yapın!';
  exit;
}

diyerek giriş yapmamış kullanıcıların o sayfaya erişimini engelleyebilirsiniz.
Eğer üyeye ait bilgilere ihtiyacınız var ise zaten doğrudan $uye dizisinden alabilirsiniz.
Mesela giriş formunun yerine Hoşgeldin X dedirtmek için ile X yerine kullanıcı adını basabilirsiniz.


Kayıt işleminin mysql'e veri kaydetmek dışında bir kısmı olmadığından örneklemeye gerek duymuyorum. Sadece şifreyi veritabanına md5 fonksiyonundan geçirip kaydediyoruz. Onun dışındaki kontroller ve veri kayıdını yapamayacağınızı düşünmüyorum.


pdo hatası alanlar veritabanı bağlantısı yaptığınız dosyanın içine <?php tagının hemen altına

error_reporting(E_ALL ^ E_DEPRECATED); bu kodu yazsın sıkıntı gidecektir...!



EMEGE SAYGI TEŞEKKÜR ETMEYI UNUTMAYINIZ LUTFEN
 
Son düzenleme:

ihan3t

Kadim Üye
7 Şub 2012
5,018
23
Yanlış anlama dostum ama keşke göstermeseydin daha iyiydi...

Buradaki bilgiler o kadar eski ki.. Php de mysql artık deprecated oldu.

Mysql bağlantısı yerine mysqli veya pdo kullanılıyor. PDO şiddetle tavsiyemdir.

Ayrıca sorgularında maşaAllah gel beni patlat diyor.


$sorgu = mysql_query("select sifre from uyeler where kadi = '".$kadi."'");

zaafiyete son derece açıklar. değişkeni aldığın gibi sorguya dahil etmişsin. İster db yi sildirtirsin bu sorgudaki değişkenle , ister yeni üye eklersin, istersen admin şifresini değiştirirsin..
 

keserimsekerim

Katılımcı Üye
30 Haz 2015
306
0
Yanlış anlama dostum ama keşke göstermeseydin daha iyiydi...

Buradaki bilgiler o kadar eski ki.. Php de mysql artık deprecated oldu.

Mysql bağlantısı yerine mysqli veya pdo kullanılıyor. PDO şiddetle tavsiyemdir.

Ayrıca sorgularında maşaAllah gel beni patlat diyor.


$sorgu = mysql_query("select sifre from uyeler where kadi = '".$kadi."'");

zaafiyete son derece açıklar. değişkeni aldığın gibi sorguya dahil etmişsin. İster db yi sildirtirsin bu sorgudaki değişkenle , ister yeni üye eklersin, istersen admin şifresini değiştirirsin..

Bilgi verdiginiz icin tesekkurler ben burada en basit ve guvenlikliksiz yani mantigi anlatmak amaciyla yaptim bu kadar eski oldugunu bilmiyodum saol yinede
 

TCByİnTiK@m33

Uzman üye
17 Haz 2010
1,495
0
mersin
pdo hatası alanlar veritabanı bağlantısı yaptığınız dosyanın içine <?php tagının hemen altına

error_reporting(E_ALL ^ E_DEPRECATED); bu kodu yazsın sıkıntı gidecektir...!
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.