PHP ve MySQL ile üyelik sistemi yapımı

Kısaca ve basitçe üyelik sisteminin temellerini anlattım. Giriş, çıkış, yeni üyelik vs.

Selam arkadaşlar, bu dersimizde PHP ve MySQL ile session kullanarak üyelik sistemi yapıcaz. Bu dersimiz PHP konusunda temeli olan arkadaşlar içindir. Yeni başlayanlara karmaşık gelebilir. Bu dersimizde sadece üye kayıtı, girişi ve çıkışını yapıcaz. Sonraki derslerimizde üyelikler ile işlemler, üyelikler arası mesajlaşma(özel mesaj), üye profili hazırlama vb. gibi konulara değineceğim.

Veritabanında oluşturmamız gereken tablo;


CREATE TABLE IF NOT EXISTS `uyeler` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `kulladi` varchar(30) NOT NULL,

  `kullsifre` varchar(30) NOT NULL,

  `mail` varchar(30) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin5 AUTO_INCREMENT=1 ;

 

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;



Peki ne yaptık?

Veritabanımıza uyeler isimli bir tablo oluşturup kulladi, kullsifre ve mail isimli satırlar ekledik.

Veritabanı bağlantısı için kodlarımız:

vtbaglan.php



<?php 

##################################################

#           Veritabanı Ayarları

#

#   $vt_host      = Veritabanı Hostu

#   $vt_kullanici = Veritabanı Kullanıcı Adı

#   $vt_sifre     = Veritabanı Şifresi

#   $vt_adi       = Veritabanı Adı

#

##################################################

 

$vt_host       "localhost";

$vt_kullanici  "root";

$vt_sifre      "123456";

$vt_adi        "ornekler";

 

//Veritabanı bağlantısını yapıyoruz

$vtbaglan = @mysql_connect($vt_host,$vt_kullanici,$vt_sifre) or die("Veritabanı bağlantısı sağlanamadı!");

mysql_select_db($vt_adi,$vtbaglan) or die("Veritabanı bulunamadı!");

?> ?>



Peki ne yaptık?

Bir veritabanı bağlantı dosyası oluşturduk. Oluşturduğumuz bu veritabanı dosyası ile her sayfada mysql bağlantısı kurmamızı ve uyeler isimli tablodan kullanıcı bilgilerine erişmemizi sağlayacak. $vt_host, $vt_kullanici, $vt_sifre, $vt_adi isminde 4 değişken oluşturduk bu değişkenlerimize veritabanı bilgilerimizi yazıp mysql_connect() fonksiyonu ile veritabanı bağlantısını kurduk ve mysql_select_db() fonksiyonu ile mysql bilgileri ile veritabanımızı bağdaştırıp veritabanımıza erişimi sağladık.

Üye Girişi yapmak için kodlarımız:

index.php



<?php 

//Oturumumuzu başlatıyoruz

session_start();

//Veritabanı bağlantı dosyamızı çekiyoruz

require_once("vtbaglan.php");

 

//Bir string değişken oluşturduk

$adim $_GET['adim'];

switch(
$adim){

case 
""//Atadığımız string değişkenimize hiçbir değer atanmamış ise giriş formunu gösteriyoruz

if($_SESSION['rutbe'] != 5){ //Giriş yapan kullanıcıya atadığımız rütbe eğer doğru değilse giriş panelini tekrar gösteriyoruz

?>

 

<!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>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />

<title>Üye Girişi</title>

</head>

 

<body>

<form action="index.php?adim=girisonay" method="post">

<table width="400" border="0">

  <tr>

    <td width="115">Kullanıcı Adı</td>

    <td width="269"><input name="grs_kulladi" type="text" /></td>

  </tr>

  <tr>

    <td>Şifreniz</td>

    <td><input name="grs_sifre" type="password" /></td>

  </tr>

   <tr>

    <td> </td>

    <td><input type="submit" value="Giriş Yap" /></td>

  </tr>

</table>

</form>

<br />Kayıt olmak için <a href="kayit.php">tıklayınız</a>

</body>

</html>

 



}else{ //Giriş yapan kullanıcıya atadığımız rütbe doğruysa profil sayfasına yönlendiriyoruz

    echo '<meta http-equiv="refresh" content="0;URL=profil.php">';

}

break;

 

case "girisonay":

//Giriş formundan metin kutusu verilerini çekiyoruz

$giris_adi   = $_POST['grs_kulladi'];

$giris_sifre = $_POST['grs_sifre'];

 

if(($giris_adi == "") or ($giris_sifre == "")){ //Eğer kullanıcı adı ve şifre alanı boş bırakılırsa bir hata mesajı verdiriyoruz

    echo '<script type="text/javascript">alert("Boş bıraktığınız alanlar var!");</script>';

    echo '<meta http-equiv="refresh" content="0;URL=index.php">';

}else{ //Eğer kullanıcı adı ve şifre alanı boş değilse kullanıcı bilgilerini veritabanındaki bilgiler ile karşılarştırıyoruz

    $uyeler = mysql_query("SELECT * FROM uyeler WHERE kulladi='$giris_adi' and kullsifre='$giris_sifre'"); //Veritabanındaki uyeler tablosundaki verilerimizi metin kutusu verileri ile eşleştiriyoruz

    $uyebul = mysql_num_rows($uyeler); //Üyeleri sayı olarak tanımlıyoruz

    if($uyebul > 0){ //Eğer üye varsa aşağıdaki kodları çalıştırıyoruz

        $mailcek = mysql_query("SELECT * FROM uyeler WHERE kulladi='$giris_adi'"); //Giriş doğrulanırsa giriş yapan kişinin kullanıcı adı ile mail adresini eşleştiriyoruz

        $mailcek2 = mysql_fetch_array($mailcek); //Giriş yapan kişinin kullanıcı adı ve mail adresi eşleşen mail adresini yeni bir değişkene atıyoruz

        $_SESSION['kulladi'] = $giris_adi; //Giriş doğrulanırsa metin kutusundaki kullanıcı adını kulladi isimli SESSION'a atıyoruz

        $_SESSION['email']   = $mailcek2['mail']; //Giriş doğrulanırsa profil sayfası için giriş yapan kişinin kullanıcı adı ile eşleşen mail adresini email isimli SESSION'a atıyoruz

        $_SESSION['rutbe']   = 5; //Giriş doğrulanırsa rutbe isimli bir SESSION oluşturup istediğimiz bir değer atıyoruz

        echo '<script type="text/javascript">alert("Başarıyla giriş yaptınız! Profil sayfanıza yönlendirileceksiniz...");</script>';

        echo '<meta http-equiv="refresh" content="0;URL=profil.php">';

    }else{ //Eğer kullanıcı adı veya şifre yanlışsa veya yoksa hata mesajı verdiriyoruz

        echo '<script type="text/javascript">alert("Kullanıcı adı veya şifreniz yanlış!");</script>';

        echo '<meta http-equiv="refresh" content="0;URL=index.php">';

    }

}

break;

}

?> ?>



Peki ne yaptık?

Bir string değişken oluşturduk ?adim? isminde ve bu string değişkenimiz ile tek sayfada üye giriş formu ve giriş onay kodlamasını gerçekleştirdik. Üye Girişi formundan gelen metin kutusu verilerini çekip içeriği boş ise hata mesajı verdiriyoruz ve eğer boş değilse kullanıcının bilgilerini veritabanındaki bilgiler ile karşılaştırıyoruz. Eğer kullanıcı adı ve şifre veritabanındaki ile eşleşiyorsa kullanıcı adını ve şifreyi bir SESSION?a atadık. Sonra rutbe isminde bir SESSION oluşturup istediğimiz değeri atıyoruz ve profil.php sayfasına yönlendiriyoruz. Eğer kullanıcı adı ve şifre veritabanındaki ile eşleşmiyorsa hata mesajı verdiriyoruz.

Üye Kayıtı yapmak için kodlarımız ? kayit.php

<?php 

//Veritabanı bağlantı dosyamızı çekiyoruz

require_once("vtbaglan.php");

 

$adim $_GET['adim'];

switch(
$adim){

case 
"":

?>

 

<!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>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />

<title>Üye Kayıt Formu</title>

</head>

 

<body>

<form action="kayit.php?adim=kayitonay" method="post">

<table width="400" border="0">

  <tr>

    <td width="115">Kullanıcı Adı</td>

    <td width="269"><input name="kyt_kulladi" type="text" /> <font color="#FF0000">*</font></td>

  </tr>

  <tr>

    <td>Şifreniz</td>

    <td><input name="kyt_sifre" type="password" /> <font color="#FF0000">*</font></td>

  </tr>

  <tr>

    <td>Şifreniz(Tekrar)</td>

    <td><input name="kyt_sifretekrar" type="password" /> <font color="#FF0000">*</font></td>

  </tr>

  <tr>

    <td>E-Mail</td>

    <td><input name="kyt_email" type="text" /></td>

  </tr>

   <tr>

    <td> </td>

    <td><input type="submit" value="Kayıt Ol" /></td>

  </tr>

</table>

</form>

<br />Giriş yapmak için <a href="index.php">tıklayınız</a>

</body>

</html>

 



break;

 

case "kayitonay":

//Kayıt formundan metin kutusu verilerini çekiyoruz

$kullanici_adi         = $_POST['kyt_kulladi'];

$kullanici_sifre       = $_POST['kyt_sifre'];

$kullanici_sifretekrar = $_POST['kyt_sifretekrar'];

$kullanici_email       = $_POST['kyt_email'];

 

if(($kullanici_adi == "") and ($kullanici_sifre == "") and ($kullanici_sifretekrar == "")){ //Eğer kullanıcı adı, şifresi ve şifre(tekrar) alanı boş ise hata mesajı verdiriyoruz

    echo '<script type="text/javascript">alert("Boş bıraktığınız alanlar var!");</script>';

    echo '<meta http-equiv="refresh" content="0;URL=kayit.php">';

}elseif($kullanici_sifre != $kullanici_sifretekrar){ //Eğer kullanıcı şifresi ve şifre(tekrar) eşleşmiyorsa hata mesajı verdiriyoruz

    echo '<script type="text/javascript">alert("Şifreleriniz birbiriyle uyuşmuyor!");</script>';

    echo '<meta http-equiv="refresh" content="0;URL=kayit.php">';

}else{ //Eğer boş bırakılan bir alan yoksa, şifre ve şifre(tekrar) eşleşiyorsa kullanıcı kayıt işlemini gerçekleştiriyoruz

    $kullanici_kaydet = mysql_query("INSERT INTO uyeler (kulladi,kullsifre,mail) VALUES ('$kullanici_adi','$kullanici_sifre','$kullanici_email')"); //Kullanıcıyı veritabanına kaydedicek mysql kodu

    echo '<script type="text/javascript">alert("Kayıt işleminiz başarıyla gerçekleşti!");</script>';

    echo '<meta http-equiv="refresh" content="0;URL=kayit.php">';

}

break;

}

?> ?>



Peki ne yaptık?

Bir string değişken oluşturduk "adim" isminde ve bu string değişkenimiz ile tek sayfada üye kayıt formu ve kayıt onay kodlamasını gerçekleştirdik. Üye Kayıt formundan gelen metin kutusu verilerini çekip içeriği boş ise, girilen şifre ve şifre(tekrar) alanı birbiriyle eşleşmiyorsa hata mesajı verdiriyoruz ve eğer boş değilse veritabanına yeni kullanıcı kaydını gerçekleştiriyoruz. Yıldızlı(*) yani zorunlu doldurulması gereken alanları if döngüsü kullanıp == operatörü ile boş ise şartı vererek oluşturabilirsiniz.

Üye Profil sayfası yapmak için kodlarımız:

profil.php



<?php 

//Oturumumuzu başlatıyoruz

session_start();

//Veritabanı bağlantı dosyamızı çekiyoruz

require_once("vtbaglan.php");

?>

 

<!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>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" />

<title>Üye Profili</title>

</head>

 

<body>



if($_SESSION['rutbe'] == 5){

    echo '<h3>Burası <font color="red">'.$_SESSION['kulladi'].'</font> isimli kullanıcının profilidir.</h3>';

    echo '<b>Kullanıcı Adınız:</b> '.$_SESSION['kulladi'].'<br />';

    echo '<b/>E-Mail Adresiniz:</b> '.$_SESSION['email'].'<br /><br />';

    echo 'Çıkış yapmak için <a href="cikis.php">tıklayın.</a>';

}else{

    echo '<meta http-equiv="refresh" content="0;URL=index.php">';

}

?>

</body>

</html> ?>


Peki ne yaptık?
Öncelikle sayfamızda session_start() fonksiyonu ile oturumumuzu başlattık ve giriş yaparken kullanıcıya atadığımız rutbe isminde session?un değeri belirtilen şekilde doğru ise profil sayfamızı gösteriyoruz, doğru değilse anasayfaya yani üye giriş formuna yönlendiriyoruz. Daha sonra giriş yaparken atadığımız sessionlar sayesinde kullanıcı bilgierini çekip ekrana yazdırıyoruz. Ayrıca sayfamıza bir çıkış linki ekleyiyoruz.

Çıkış sayfası yapmak için kodlarımız:

cikis.php



<?php 

ob_start
(); //Sayfanın daha hızlı yüklenmesine yardımcı olur

session_start(); //Oturumumuzu başlatıyoruz

session_destroy(); //Oturumumuzu sonlandırıyoruz

echo '<meta http-equiv="refresh" content="0;URL=index.php">'//Anasayfa yani giriş formu sayfasına yönlendiriyoruz

ob_end_flush(); //ob_start() fonksiyonu temizliyoruz

?> ?>



Peki ne yaptık?

ob_start() fonksiyonu ile sayfamızın daha hızlı yüklenmesini sağladık ve ob_end_flush() fonksiyonu ilede temizledik. session_start() fonksiyonu ile oturumumuzu başlatıyoruz ve session_destroy() fonksiyonumuzla oturumumuzu sonlandırıp anasayfaya yani üye giriş formuna yönlendiriyoruz.

Kolay gelsin.

  • Etiketler;
Yorum Yaz

Yorum yazabilmek için üye girişi yapmanız gerekiyor!

mükemmel anlatmışsınız hocam php ye başlayalı 1 hafta oldu ama sayenizde uyeliği bile öğrendik.ellerinize sağlık....
hocam peki aynı kullanıcının iki kez kayıt yapmaması için veya aynı isimle başka kayıt yapılmaması için ne yapabilirz?
@karakaya07 [b]Yorumun için teşekkür ederim öncelikle;[/b] İki kez kayıt yapmamak için birçok yol ve önlem alabiliriz ama bu bilgimize ve pratik zekamıza kalmış birşey sen daha yeni PHP öğreniyorsun o yüzden kolay bir örnek vericem zaten makalemde de bahsetmiştim bu yeni başlayanlar için ileride daha gelişmişini yapıp anlatıcam, [i]özel mesaj sistemli, profil yönetimli[/i] felan. [b][color=red]kayit.php[/color][/b] dosyamızda bir sorgu ile veritabanındaki kullanıcı adını çekip formdan gelen textbox(metin kutusu) alanına yazılmış kullanıcı adını if veya elseif ile eşleştirip bir hata mesajı verdirebiliriz. Bir örnek vericem. [code] $kull_kontrol = mysql_query("SELECT * FROM uyeler"); $kull_kontrol2 = mysql_fetch_array($kull_kontrol); if($kull_kontrol2['kulladi'] == $kullanici_adi){ echo '<script type="text/javascript">alert("Bu kullanıcına adına ait bir üyelik var!");</script>'; echo '<meta http-equiv="refresh" content="0;URL=kayit.php">'; } [/code]
Merhaba ben burda anlatılanları aynen uyguladım fakat kayit.php yi açtıgımda Notice: Undefined index: adim in C:wampwwwuyelikkayit.php on line 13 $adim = $_GET['adim']; //13. Satır bu sistem çalışıyor fakat boyle bir hata var nedeni nedr??? Aynı hata index.php de de veriyor Notice: Undefined index: adim in C:wampwwwuyelikindex.php on line 17 $adim = $_POST['adim']; //17. satır Notice: Undefined index: rutbe in C:wampwwwuyelikindex.php on line 20 if($_SESSION['rutbe'] != 5) // 20. Satır.. yardımcı olursanız sevinirim.. Yeniyim Php de::D
Hocam bu refresh kodu yerine ne yazılabilir. Şöyleki giriş yapmadan da .../profil.php yazdığımda index.php ye dönerken sayfayının içeriğini 1 saniyeliğine de olsa gösteriyor. Kullanıcı giriş yapmadığında saydanın içeriğini hiç göremesin istiyorum. Yardımcı olursan sevinirim
Selam, header fonksiyonu ile yönlendirme yapabilirsin arkadaşım. @header("Location: ../profil.php");
Üye profılınde resim ekleme ve duzenleme konusunuda anlatırsanız cok sevınırm cok acıl lütfen
hersey çok güzel kaydı kabul ediyor ancak index.php sayfamı açamıyorum case=""; hata veriyor yardım ederseniz çok sevinirim ..Ekranda çıkan hata ise Parse error: syntax error, unexpected '=' in
Asagidaki hatayı alıyorum, sebeb ne olabilir acaba? SQL sorgunuzda bir hata olduğu görünüyor. MySQL sunucusu hata çıktısı aşağıdadır, eğer varsa, sorunu teşhis etmenizde ayrıca size yardımcı olabilir ERROR: Bilinmeyen Noktalama İşareti Dizgisi @ 1 STR: <? SQL: <?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start();<?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start();<?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start();<?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start();<?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start();<?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start();<?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start();<?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start();<?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start(); SQL sorgusu: <?php //Oturumumuzu ba&#65533;lat&#65533;yoruz session_start(); MySQL çıktısı: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<?php //Oturumumuzu ba&thorn;lat&yacute;yoruz session_start()' at line 1
bu işlemleri yaptım üzerinde değişikliklerde yaptım çok güzel çalışıor fakat küçük ayrıntılar unutulmuş gibime geldi örneğin boş alan bıraktınız diye bir hata verdiriyoruz iyi güzel fakat tekrar o boş alanı doldurmak için geri döndüğüm zaman yazdıklarımında kayıp oldugunu görüyorum yani form tekrar boş bir halde karşıma geliyor..bu nasıl olucak
kimse yokmu
<!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> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Untitled Document</title> </head> <?php //Parse error göstermemek için koyuyoruz, aksi durumda undefined index hatasi verir header ("Content-Type: text/html; charset=windows-1254"); $ebits = ini_get('error_reporting'); error_reporting($ebits ^ E_NOTICE); //Veritabani baglanti dosyamizi çekiyoruz require_once("veritabani.php"); $adim = $_GET['adim']; switch($adim){ case "": ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9" /> <title>Üye Kayit Formu</title> </head> <body> <form action="kayit.php?adim=kayitonay" method="post"> <table width="521" height="390" border="0"> <tr> <td width="116">Kullan&#305;c&#305; Ad&#305; </td> <td width="395"><input name="kyt_kullaniciadi" type="te
herşeyi devletten beklememek lazım neticede burda mantığı örnek ile anlatıyoruz geliştirmek size kalmış ister javascript kullanırsınız ister başka birşey komple bir sistem yazıp paylaşacak halimiz yok herhalde ama soruna basit bir js koduyla cevap veriyim tarayıcının geri işlevini js ile çalıştırarak formun boş değil bırakılan halde gelmesini sağlayabilirsin ister onclick işlevinde istersende yönlendirmede kullan [code] history.back(); [/code]
arkadaslar ıkıncı kaydı verı tabanına kaydetmıyor yardımcı olabilcek olan varmı ?
kayıt oluyorum kayıt olduktan sonra giriyorum yanlış girdiniz diyo lütfen yardımcı olun 1aydır uğraşırıyorum.
Şu kodda SQL Injection açığı var: $uyeler = mysql_query("SELECT * FROM uyeler WHERE kulladi='$giris_adi' and kullsifre='$giris_sifre'"); Bunun yerine şunu kullan: $uyeler = mysql_query("SELECT * FROM uyeler WHERE kulladi='".addslashes($giris_adi)."' and kullsifre='".addslashes($giris_sifre)."'");
profil.php de hangi tablo olduğunu çekmeden yazdırmışsınız sistem nasıl anlasın?

Yukarı Git